2010-03-10 65 views
4

我有一個應用程序啓動一個可執行文件是在同一文件夾中的應用程序,這樣做:從當前文件夾啓動一個.exe有時會失敗

  Process procStarter = new Process(); 
      procStarter.StartInfo.FileName = "OtherApp.exe"; 
      procStart.Start(); 

,直到我用一個文件打開,工作正常,或文件保存對話框在我的應用程序。然後它找不到OtherApp.exe。

這是否正常?我可以通過將當前文件夾添加到StartInfo.Filename(以及如何獲取當前文件夾)來修復它?

回答

10

使用文件對話框可能改變你的進程的當前目錄。要訪問一個文件在同一文件夾作爲當前可執行文件,你可以使用下面的代碼:

string path = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location); 
path = Path.Combine(path, "OtherApp.exe"); 
0

嘗試顯式指定到OtherApp.exe的路徑。

您打開的文件對話框可能正在更改當前目錄。

0

如果您沒有明確指定文件夾,系統將在該過程的「當前工作目錄」中查找。

當前工作目錄(通常)以應用程序的exe目錄開頭,但可以通過使用打開或保存對話框瀏覽來更改。

使用顯式文件路徑是正確的答案。最好的辦法是根本不依賴工作目錄,而是使用當前可執行文件的文件路徑作爲基礎。

這裏有一些方法可以做到這一點:Application.StartupPathApplication.ExecutablePath

代碼可能是這個樣子......

var exeName = "sample.exe"; 
var exePath 
    = Path.Combine(
     Path.GetDirectoryName(Application.ExecutablePath), 
     exeName); 
3

或者你可以添加到您的代碼:

saveFileDialog1.RestoreDirectory = true ; 

提示文件名時。

1

問題是,您可以在執行其他文件操作時更改當前的工作目錄。

您想記住其他海報向您展示的路徑,但可能是您想要創建自己的ProcessStartInfo實例並使用屬性,以便記住正確的路徑。

0

嘗試System.IO.Path.Combine(System.Windows.Forms.Application.StartupPath, "myfile.exe");

如果它不是一個WinForms項目DIVO的回答是最好的(IMO,在這個答案的時間)

相關問題