2012-07-22 87 views
1

我正在運行一個工具,用於爲特定值(我沒有寫入它)對HW PCI進行採樣。使用process.start運行應用程序會返回與手動運行應用程序不同的值

當我從命令提示符運行它時,它會返回一個退出代碼(正確的),但是當我使用Process.Start從另一個應用程序運行它時,它會返回另一個退出代碼。

直接運行應用程序還是通過Process.Start運行應用程序有區別嗎? 你知道這個問題的一個簡單的解決方法嗎?

+2

沒有任何真實的細節,誰知道?什麼工具?你有源嗎?它有文檔嗎?它是否描述退出代碼?環境是否一樣?等等,等等。 – leppie 2012-07-22 11:15:41

+1

*你打電話給'Process.Start'?* – Adam 2012-07-22 11:16:13

+0

該工具是公司內部的。 – 2012-07-22 11:19:05

回答

1

如果你想得到與Process.Start()相同的結果,你必須在你的命令行上執行你的應用程序 相同的工作目錄。

1

正如Hassan的回答(解決了我的類似問題)中所述,從Process.Start()返回的退出代碼受可執行文件位置影響,特別是它所在的目錄。下面是我使用的代碼:

string yourExe = "C\\Program Files\\Your Directory\\YourExe.exe"; 
    string currentDir = Directory.GetCurrentDirectory(); 
    string yourExeDir = "C\\Program Files\\Your Directory"; 

    try 
    { 
     Directory.SetCurrentDirectory(yourExeDir); 
    } 
    catch (DirectoryNotFoundExeption dnfe) 
    { 
     MessageBox.Show("The specified directory does not exist. " + dnfe.Message); 
    } 

    if (!File.Exists(yourExe)) 
    { 
     MessageBox.Show("Can't find yourExe"); 
    } 
    else 
    { 
     Process.Start(yourExe); 
    } 

    try 
    { 
     //Set the current directory. 
     Directory.SetCurrentDirectory(currentDir); 
    } 
    catch (DirectoryNotFoundException dnfe) 
    { 
     MessageBox.Show("The specified directory does not exist. " + dnfe.Message); 
    } 

此切換當前工作目錄到.exe文件所在的目錄,運行它,然後再切換回無論你以前的工作目錄。