Entwickler-Ecke

Sonstiges (.NET) - C# Process.Start, übergibt falschen StartupPath...


MarcoG88 - Sa 04.12.10 13:52
Titel: C# Process.Start, übergibt falschen StartupPath...
Hi,

Ich habe folgendes Problem. Bei mir liegt eine .exe Datei im Ordner Eigene Dateien/Eigene Dokumente/MeinProgramm_NR1.exe
Dieses Programm kann dateien im eigenen Programmpfad erstellen.

Jetzt habe ich ein Programm geschrieben (Ich nenn es mal MeinProgramm_NR2.exe) das mit Process.Start das Programm "MeinProgramm_NR1.exe" aufruft. Das Programm_NR2 liegt aber in einem anderen Ordner. Wenn ich nun das Programm_NR2 aufrufe
öffnet es wie gewollt Programm_NR1. Jedoch erstellt Programm_NR1 nun die Datei im Ordner von Programm_NR2. Wie kann ich das unterbinden, sodass das Programm_NR1 den richtig Application.StartupPath hat?

Folgender Code wird zum öffnen des Programms benutzt:


Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
private void ListBox_DoubleClick(object sender, EventArgs e)
        {
            if (this.listBox1.SelectedItem != null)
            {
                foreach (string s in fileList)
                {
                    if (s.EndsWith(this.listBox1.SelectedItem.ToString()))
                    {
                        Process programm = new Process();
                        programm.StartInfo.FileName = s;
                        programm.StartInfo.WindowStyle = ProcessWindowStyle.Normal;
                        programm.Start();
                    }
                }
            }
        }


Gruß
Marco


jaenicke - Sa 04.12.10 13:58

Ich sehe auch nirgends, dass du das Arbeitsverzeichnis des zu startenden Prozesses in der StartInfo setzt. Also woher soll er wissen, welches du denn gerne gesetzt hättest? :gruebel:
http://msdn.microsoft.com/de-de/library/system.diagnostics.processstartinfo.workingdirectory.aspx


MarcoG88 - Sa 04.12.10 14:50

Ah, ok.
Wusste nicht das ich ein WorkingDirectory festlegen muss.

Falls jemand das gleiche Problem mal hat, so hab ich das jetzt gelöst:


Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
if (s.EndsWith(this.listBox1.SelectedItem.ToString()))
                    {
                        Process programm = new Process();
                        programm.StartInfo.FileName = s;
                        FileInfo fi = new FileInfo(s);
                        programm.StartInfo.WorkingDirectory = fi.Directory.ToString();
                        programm.StartInfo.WindowStyle = ProcessWindowStyle.Normal;
                        programm.Start();
                    }