[C#]Frage: Prozess Pfad anderer Anwendungen

Nico Graichen

Erfahrenes Mitglied
dann zieh den Code doch weiter auseinander!
C#:
Process[] processes = Process.GetProcessesByName("explorer.exe");
if (processes.Length > 0)
{
    Console.WriteLine(processes[0].MainModule.FileName);
}
else
{
    Console.WriteLine("no process with this name found");
}
 

lolko

Grünschnabel
Nee das mein ich so nicht das geht ja alles nur (ich hab jetz ma dein source genommen)
Process[] explorer = Process.GetProcessesByName("explorer");

if (explorer.Length > 0)
{


string exp = explorer[0].MainModule.FileName;
explorer.Kill();
}

else
{

MessageBox.Show("no process with this name found");

}

und außerhalb von if steht dann noch

Process.Start(exp);
tea definiere ich ja in der if schleife nur dann kommt der Fehler

Der Name "exp" ist im aktuellen Kontext nicht vorhanden.

Und das ist mein jetziges problem. Ich möchte, wenn der Process an ist .. den string definieren. Aber das geht ja iwie net und das nen big problem
weil ich die exe erst killen möchte und danach dann starten ^^ ..
 
Zuletzt bearbeitet:

Nico Graichen

Erfahrenes Mitglied
Hi

Der Skope, in dem du die Variable exp definiert hast, existiert nicht mehr. Die Variable ist nur im If-Teil deine If-Else-Anweisung gültig.
Du musst die Variable vor dem Konstrukt definieren und im If-Teil füllen.
Noch besser wäre aber, wenn du Process.Start() mit im If-Teil ausführst. Ansonsten kommst du zu Problem, wenn der Explorer-Prozess nicht exisitert/gefunden wird.
 

lolko

Grünschnabel
naja ich muss sie definieren wenn der prozess existiert... wenn er nicht an is gibt er mir nen fehler , wenn ichs vorher definiere.. weil er ja net an is und start kann ich in der if anweisung net mit einbringen
es muss außerhalb passieren
 

Nico Graichen

Erfahrenes Mitglied
Hi

Kannst du das bitte nochmal schreiben und dich dabei vorallem an die Netiquette halten. Ich hab kein Wort verstanden. Den Aufruf von Prozess.Start() kannst du nur da machen, wo du auch den Pfad zu einer Anwendung hast, ansonsten läufst du in eine Fehler
 

lolko

Grünschnabel
Also: Ich hab den Code so geschrieben wie ich ihn auch brauch ^^.
Das ganze soll ein Updater sein und da Mein Programm mit TeaTimer
probleme hat bzw TeaTimer mit meinem Programm .. kann ich es
wenn TeaTimer läuft net löschen. Deswegen soll es gucken ob TeaTimer läuft,
wenn ja den string definieren tea = sowieso

und nachdem dann mein Programm ersetzt wurde soll Tea Timer wieder gestartet werden.



Process[] processes = Process.GetProcessesByName("TeaTimer");

if (processes.Length > 0)
{

MessageBox.Show(processes[0].MainModule.FileName);
string tea = processes[0].MainModule.FileName;
}

else
{

MessageBox.Show("no process with this name found");

}

Download und löschen von meinem programm (Code lass ich mal raus)

Process.Start(tea);

und am ende soll er halt TeaTimer wieder starten. Hoff das war jetz gut erklärt ^^
 

Nico Graichen

Erfahrenes Mitglied
Wenn der Prozess vorher nicht lief, kommst du über diesen Weg auch nicht an an den Pfad der Exe.
Trotzdem musst du, wenn du die Anwendung außerhalb der IF-Else-Struktur starten willst, die string-Variable "tea" auch außerhalb deklarieren! Du musst sie nur sowohl im If als auch im Else-Teil mit einem gültigen Pfad initialisieren.
Wie du aber an den Pfad kommst, wenn der Prozess nicht läuft, kann ich die nicht sagen, da ich nicht weiß, wie du die Informationen außerhalb dieser Anwendung hälst (ggf. per Setup in die Registry eintragen o.ä.)
 

lolko

Grünschnabel
Wenn er net läuft möcht ich den pfad ja auch net auslesen .. nur wenn er läuft .. damit dieser im nachhinein wieder gestartet werden kann .. gibt es nicht irgendwie eine möglichkeit das in der if schleife definierte auch außerhalb der if schleife zu verwenden ?
denn wenn es den prozess nicht gibt gibt er mir ja nen error aus, deswegen muss ich ja checken ob der prozess läuft und kann erst dann "tea" den pfad zu weisen , den möcht ich jedoch halt außerhalb der if schleife auch verwenden können.
 

Nico Graichen

Erfahrenes Mitglied
Hi

1. Du sollst dich an die Netiquette halten!
2. Nein!
Wie gesagt, mit Verlassen des IF-Teils ist der Skope verlassen, in dem du die Variable deklariert hast. Es gibt nur diese Variante!
C#:
string path = string.Empty;
Process[] processes = Process.GetProcessesByName("explorer.exe");
if (processes.Length > 0)
{
    path = processes[0].MainModule.FileName;
}
if(!String.IsNullOrEmpty(path)
{
    Process.Start(path);
}