Hi Leute
ist es möglich einen Prozess zu beenden wenn man nur dessen "Befehlszeile" kennt
bsp ich habe 2 Prozesse
test.exe --username name778 --passwort pw7889
test.exe --username name332 --passwort pw7889
nun will ich einen Prozess beenden in dessen Befehlszeile das wort "name778" vorkommt
hoffe jemand versteht das Problem und kennt eine Lösung
Vielen Dank
Erster Google Treffer =)
Find process started with arguments
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
Hi,
meinst du mittels eines Programms oder per Hand? Im TaskManager kannst du die "Befehlszeile" als Spalte einblenden lassen und dann den entsprechenden Process beenden.
Ansonsten hilft dir evtl. folgender WMI-Code: How to get the command line parameters from a different process in C#
ich meine mit Befehl in c#
per Hand das is schon klar 😄
@ Abt
Danke für die Antwort
Ich habe das auch schon gefunden verstehe es aber nicht ganz
bekomme da immer Fehler fehlt mir da ein "using" ?
hoffe du kennst dich da besser aus
das using System.Management; hatte ich vergessen 😄
Bild-Link entfernt. Bitte beachte [Hinweis] Wie poste ich richtig?
Erster Google Treffer =)
>
kanns du mir sagen wie ich das beenden richtig eintrage ?
private void button40_Click(object sender, EventArgs e)
{
var processName = "test";
string wmiQuery = string.Format("select CommandLine from Win32_Process where Name='{0}'", processName);
ManagementObjectSearcher searcher = new ManagementObjectSearcher(wmiQuery);
ManagementObjectCollection retObjectCollection = searcher.Get();
foreach (ManagementObject retObject in retObjectCollection)
{
if (retObject["CommandLine"].Equals("--password 338"))
{
processName.Kill();
}
}
}
Vielen Dank 😄
Bild-Link entfernt. Bitte beachte [Hinweis] Wie poste ich richtig?
Hi,
Kurzform: Nett geht das über Umwege - aber vorgesehen ist es so glaube ich nicht.
Wenn's dein eigener Prozess ist: Stichwort IPC
Wenn's fremde Prozesse sind: Versuche das HauptWindow zu schließen - wenn nicht kannst du immer noch ein Kill machen.
Siehe auch: “Gracefully” killing a process
LG
Siehe auch:
>
Vielen Dank
Leider scheint der von "Abt" verlinke Code nicht zu funktionieren oder ich mache da was falsch
habe es mit einigen Prozessen versucht werden nich gefunden
hier nochmals der Code
private void button40_Click(object sender, EventArgs e)
{
var processName = "RAVCpl64";
string wmiQuery = string.Format("select CommandLine from Win32_Process where Name='{0}'", processName);
ManagementObjectSearcher searcher = new ManagementObjectSearcher(wmiQuery);
ManagementObjectCollection retObjectCollection = searcher.Get();
foreach (ManagementObject retObject in retObjectCollection)
{
if (retObject["CommandLine"].Equals("-s"))
{
Global.WriteLog("Prozess gefunden");
}
}
}
Du hast [Hinweis] Wie poste ich richtig? wohl nur überflogen 😉 Punkt 2.3 und siehe deine vorigen Beiträge
Hi,
vorab muss ich dich um etwas mehr Bemühungen deinerseits bitten. Was du hier postet lässt nicht einmal der Compiler durch. "Funktioniert nicht" ist zudem auch keine hilfreiche Beschreibung.
Zur Lösung des Problems:
Hier mal als funktionierendes Beispiel:
var processName = "Test.exe";
string wmiQuery = $"select ProcessId, CommandLine from Win32_Process where Name='{processName}'";
var searcher = new ManagementObjectSearcher(wmiQuery);
var retObjectCollection = searcher.Get();
foreach (var retObject in retObjectCollection)
{
if (retObject["CommandLine"].ToString().EndsWith("--password 338"))
{
var processId = (uint)retObject["ProcessId"];
var process = Process.GetProcessById((int)processId);
if (!process.CloseMainWindow())
process.Kill();
}
}
LG
Vorab Vielen Dank Taipi88 für deine Hilfe
und sry wenn meine Beschreibung nicht gut war ich bin Anfänger und versuche nur irgendwie das gelöst zu bekommen 😄
- Sicherstellen, dass System.Management auch tatsächlich als Verweis eingebunden ist
(der namespace hilft dir alleine nicht)
ich bin mir leider nicht ganz sicher wie ich das sicherstellen kann habe bisher immer nur oben using verwendet wie früher bei java
im verweis manager steht das drin
[Bild entfernt - Coffeebean]
reicht das aus?
- Die WMI-Query korrekt schreiben - du solltest nicht nach "test" sondern nach "Test.exe" suchen (Wie man auch im Debugger sehen würde)
mit .exe habe ich auch schon versucht ich dachte hald weil es in dem orginal code nicht drin war gehört es nicht hin
- In der Commandline steht deutlich mehr drin als "--password xyz" - bei mir z.B. bei Start über die Eingabeaufforderung ein komplettes "test --pasword778" - ein Equals halte ich somit nicht für zielführend
ich fand Equals auch nicht gut ich will eigentlich das es den prozess erkennt wenn ein bestimmtes wort drin vorkommt und nicht die ganze zeile ich denke das EndsWith ist vermutlich auch nicht das richtige , leider weiss ich nicht was man dafür benutzt "if contains" kenne ich aus java ka obs das in c gibt
ich habe jetzt einfach mal dein funktionierendes Beispiel bei mir eingefügt nur um mal zu sehen ob das geht bekomme da einen fehler angezeigt
ich hoffe du kannst mir nochmal erklähren wie ich das behebe
[Bild entfernt - Coffeebean]
danke für deine geduld 😄
Hallo,
die Syntax mit dem $
-Zeichen vor dem String ist ein neues Feature von C# 6 und gibt es erst seit VS 2015. Wenn das bei Dir nicht klappt, bleib bei dem String.Format
.
leider weiss ich nicht was man dafür benutzt "if contains" kenne ich aus java ka obs das in c gibt
Dann schau bitte in die Doku: String.Contains-Methode
Gruß, MarsStein
EDIT: und häng Deine Bilder hier direkt an, nicht als externe Links! Siehe [Hinweis] Wie poste ich richtig? Punkt 6.1
Non quia difficilia sunt, non audemus, sed quia non audemus, difficilia sunt! - Seneca
Hallo tm64,
ist mir schleierhaft, wieso du die Moderationskommentare in deinen Beiträgen ignorierst. Ich habe die Bilder wieder einmal entfernt. Die Links bekommst du per PN zugesandt, dann kannst du sie anhängen.
Bitte beachte [Hinweis] Wie poste ich richtig? (nicht nur) Punkt 6.1 !!
Gruss
Coffeebean
Microsoft MVP // Me // Blog // GitHub // @Egghead // All my talks // Speakerdeck