Process Start

10/26/2015 00:04 __FR3DDIE#1
Hallo Coders-Den,

leider habe ich ein Problem und ich finde keine Lösung. Bei Stackoverflow habe ich mal dazu was geschrieben und ich bin mal so frei, das zu zitieren:


Ich kann gar keinen Prozess starten, ob mit oder ohne Parametern ist egal, auch die auszuführende Datei selbst spielt offenbar keine Rolle. Weiß jemand mehr?
10/26/2015 05:14 Xio.#2
[Only registered and activated users can see links. Click Here To Register...]
10/26/2015 11:06 schokox34#3
Hm, also bei mir funktioniert das so.
Sicher, dass du den Pfad richtig angegeben hast und vollen Zugriff auf die auszuführende Datei hast?

Eventuell kannst du mal:
Code:
Process.Start(System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location) + "/test/testfile.exe", "1 8 EN");
probieren.
10/26/2015 11:33 __FR3DDIE#4
Quote:
Originally Posted by Xio. View Post
[Only registered and activated users can see links. Click Here To Register...]
[Only registered and activated users can see links. Click Here To Register...] War nicht allzu hilfreich..

Quote:
Originally Posted by schokox34 View Post
Hm, also bei mir funktioniert das so.
Sicher, dass du den Pfad richtig angegeben hast und vollen Zugriff auf die auszuführende Datei hast?

Eventuell kannst du mal:
Code:
Process.Start(System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location) + "/test/testfile.exe", "1 8 EN");
probieren.
Bei mir hat es auch immer funktioniert und klappt auch in jeder anderen Anwendung super, nur in dieser Anwendung mit dem GhostTheme nicht.
10/26/2015 13:00 Xio.#5
PHP Code:
string exeDir Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location);
Directory.SetCurrentDirectory(exeDir);
Process.Start(System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location) + "/test/testfile.exe""1 8 EN"); 
Oder besser... p = new Process
PHP Code:
p.StartInfo.WorkingDirectory Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location); 
10/28/2015 01:58 Nevada'#6
Vllt musst du die WorkingDir angeben.



Code:
Process p = new Process(); 
p.StartInfo.WorkingDirectory = ".../test/";
p.StartInfo.FileName = @ "../test/test.exe"; 
p.StartInfo.Arguments = "1 8 EN"; //
p.StartInfo.UseShellExecute = false;
p.Start();
10/30/2015 20:23 D3luxe.#7
Quote:
Originally Posted by FreddieMercury View Post
Hallo Coders-Den,

leider habe ich ein Problem und ich finde keine Lösung. Bei Stackoverflow habe ich mal dazu was geschrieben und ich bin mal so frei, das zu zitieren:

Ich kann gar keinen Prozess starten, ob mit oder ohne Parametern ist egal, auch die auszuführende Datei selbst spielt offenbar keine Rolle. Weiß jemand mehr?
Lol. Eventuell die Backslashes falsch rum gemacht bei den Pfaden?


Man beachte den unterschied zwischen "\test\test.exe" und "/test/test.exe". Richtig ist normalerweise ersteres, wobei du es für C# entweder mit doppeltem Backslash oder mit nem @ davor schreiben musst.


Um das ganze unabhängig von der Eingabe zu testen:
Erstelle ein neues Consolenprogramm und füge folgendes Snippet in die Program.cs ein:
Dieses Programm wird sich selbst mit Argumenten starten und einen Beep-Ton ausgeben sowie ne Nachricht anzeigen, wenn es geklappt hat.

PS: Willst du einen Pfad bauen, ohne dich um das Backslash-Problem kümmern zu müssen:
Code:
Path.Combine("teil1", "teil2", "yolo.exe");
// => "teil1\\teil2\\yolo.exe" oder "teil1/teil2/yolo.exe" je nach OS, Pfad stimmt immer
PPS: using Statement: Gibt den Speicher am Ende des using-Blocks wieder frei, auch bei einem Error/Crash.
Wann immer möglich benutzen, wenn du IDisposable Objects hast.

Edit: Test vereinfacht
10/31/2015 12:49 __FR3DDIE#8
Quote:
Originally Posted by D3luxe. View Post
Lol. Eventuell die Backslashes falsch rum gemacht bei den Pfaden?


Man beachte den unterschied zwischen "\test\test.exe" und "/test/test.exe". Richtig ist normalerweise ersteres, wobei du es für C# entweder mit doppeltem Backslash oder mit nem @ davor schreiben musst.


Um das ganze unabhängig von der Eingabe zu testen:
Erstelle ein neues Consolenprogramm und füge folgendes Snippet in die Program.cs ein:
Dieses Programm wird sich selbst mit Argumenten starten und einen Beep-Ton ausgeben sowie ne Nachricht anzeigen, wenn es geklappt hat.

PS: Willst du einen Pfad bauen, ohne dich um das Backslash-Problem kümmern zu müssen:
Code:
Path.Combine("teil1", "teil2", "yolo.exe");
// => "teil1\\teil2\\yolo.exe" oder "teil1/teil2/yolo.exe" je nach OS, Pfad stimmt immer
PPS: using Statement: Gibt den Speicher am Ende des using-Blocks wieder frei, auch bei einem Error/Crash.
Wann immer möglich benutzen, wenn du IDisposable Objects hast.

Edit: Test vereinfacht
Zunächst möchte ich dir für deine Antwort danken. In jeder anderen Anwendung hat meine Methode super geklappt und es lag offensichtlich am GhostTheme. Gelöst habe ich es aber einfach durch einen zweiten Prozess, der durch Prozessinteraktion vom anderen Prozess den Startbefehl erhält. Sehr umständlich, funktioniert aber nun.

Grüße