C# StartInfo.FileName aus gleichem Verzeichnis

powerfx

Admiral
Registriert
Apr. 2009
Beiträge
9.351
Hallo Leute,

helft mir mal bitte schnell.
Ich möchte aus einer Anwendung (C#) eine andere Starten.

PHP:
Process P = new Process();
P.StartInfo.FileName = "foobar.exe";

Das Problem beim oberen Code ist, dass das Framwork "foobar.exe" irgendwo im Windows-Verzeichnis erwartet.
Bei mir liegt sie aber im gleichen Verzeichnis wie das Hauptprogramm.
Wie lässt sich dieses aktuelle Verzeichnis übergeben?

Danke im Voraus.
 
Aktuelles Verzeichnis abfragen und dann mit foobar.exe zusammen als FileName eintragen...

Ist auch echt ein Hexenwerk, 20 Sekunden Google

Code:
P.StartInfo.FileName = Environment.CurrentDirectory + "\\foobar.exe";
P.StartInfo.WorkingDirectory = Environment.CurrentDirectory; // besser wenn man das auch noch macht
 
Zuletzt bearbeitet:
Danke. :)

Genau das habe ich auch versucht.

Zur Laufzeit kommt dann aber immer noch:
System.ComponentModel.Win32Exception: Das System kann die angegebene Datei nicht finden

Jetzt glaube ich, dass das Problem woanders liegt.
Danach übergebe ich Parameter mit
PHP:
P.StartInfo.Arguments = "-a "+"/"Param a/" "+"-b "+"/"Param b/""
Lasse ich diese Zeile weg, funktioniert's.
Wieso denkt er, ich übergebe hier eine Datei?

"foobar.exe" lässt sich übrigens mit
PHP:
P.StartInfo.FileName = ".\\foobar.exe";
aus dem gleichen Verzeichnis verwenden.
 
Versuchs mal damit:
Code:
P.StartInfo.Arguments = "-a \"Param a\" -b \"Param b\""
 
Ja, die Slashs hatte ich natürlich einfach nur hier falsch eingegeben.
Bei mir sind's auch Backslashs. :)

Aber als ein einziger String geht's nicht, da die Parameter Variablen sind (oder eben so was wie "textBox.Text").

Hier was simples. Externes Programm ausführen und mit dem switch "-input" eine Datei für dieses Programm auswählen, die man mittels OpenFileDialog wählt und den Pfad in textBox1 schreibt.
PHP:
P.StartInfo.FileName = ".\\programm.exe";
P.StartInfo.Arguments = "-input " + textBox1.Text;
P.Start();
führt zu:
************** Ausnahmetext **************
System.ComponentModel.Win32Exception: Das System kann die angegebene Datei nicht finden
bei System.Diagnostics.Process.StartWithShellExecuteEx(ProcessStartInfo startInfo)
bei System.Diagnostics.Process.Start()
 
Zuletzt bearbeitet: (Beispiel eingefügt)
naja auch da gibt's dann möglichkeiten, mit Hilfe von String-Formatierung zu arbeiten
(ähnlich wie bei Console.WriteLine("Hallo {0}", name) )

Edit: Auch wenn es daran vermutlich nicht liegt... aber schon komisch das ganze...
 
Zuletzt bearbeitet:
Einige Windowsdialoge wie z.B. "Datei öffnen/speichern" verändern das CurrentDirectory, dann verweist CurrentDirectory immer auf das zuletzt ausgewählte Verzeichnis solange diese Option nicht im Dialog explizit deaktiviert wurde. D.h. sobald der Dialog einmal angezeigt wird, ist es aus mit der Referenzierung über CurrentDirectory.

Um den realen Pfad deiner Assembly zu erhalten, würde ich System.AppDomain.CurrentDomain.BaseDirectory verwenden, z.B.:
Code:
string sExecutable = System.IO.Path.Combine(System.AppDomain.CurrentDomain.BaseDirectory, "foobar.exe");
string sWorkingDirectory = System.AppDomain.CurrentDomain.BaseDirectory;

Das System.IO.Path.Combine wird verwendet um das richtige Pfadtrennzeichen in dem neuen Pfad zu setzen. Ist halt Umgebungsabhängig ob Windows/.Net-Framework mit Backslash oder Linux/Mono mit Slash.
 
Zuletzt bearbeitet:
Also, nachdem ich wieder etwas Zeit für's Projekt hatte, kann ich sagen, dass Rossibaer absolut Recht hatte.
Der OpenFileDialog ändert das aktuelle Verzeichnis.

Mit dem o.g. Code geht's jetzt aber wunderbar.

Danke euch beiden. :)

Problem gelöst...
 
Zurück
Oben