2012-10-25 41 views
1

我正在C#中執行一個進程,但我希望能夠在不指定路徑的情況下執行此操作。我在哪裏可以放置項目中的可執行文件,以便代碼發現它wuthout指定路徑?使用C#.NET執行外部EXE

目前我有:

 ProcessStartInfo psi = new ProcessStartInfo(); 
     psi.FileName = @"C:\Docs\wkhtmltopdf.exe"; 

,哪個跑得很好,但我想直到結束是:

 ProcessStartInfo psi = new ProcessStartInfo(); 
     psi.FileName = "wkhtmltopdf.exe"; 

我試着放置在EXE的文件夾中該項目位於項目的根目錄中,位於項目的bin文件夾中 - 全部不成功。

+1

它需要在你自己的.exe所在的同一個目錄中 - 通常是bin/debug/ – PhonicUK

回答

6
ProcessStartInfo psi = new ProcessStartInfo(); 
psi.FileName = "wkhtmltopdf.exe"; 
psi.WorkingDirectory = Environment.CurrentDirectory; 
Process proc = Process.Start(psi); 
+0

'Environment.CurrentDirectory'返回'」C:\\ Program Files(x86)\\ Common Files \\ Microsoft Shared \\ DevServer \\ 10.0「' –

+1

您是否正在運行此操作代碼爲網站/ web服務?如果是,然後嘗試HttpContext.Current.Server.MapPath(「〜/」) – Anton

+0

確定這工作 - 我沒有運行它作爲網絡代碼(它只是一個C#類),但最終我希望它作爲一個Web服務運行無論如何,所以這對我來說是一個很好的解決方案。可悲的是,我沒有足夠的代表來支持你,否則我會 - 謝謝。 –

0

把二進制只要你想和這個文件夾添加到系統

+0

我應該提到最終我想將它部署爲一個Web服務,所以我不一定能夠訪問%PATH%變量。除此之外,我還嘗試將EXE放在C:\ Windows \ System32中,但它仍然沒有找到它...... –

0

我會用Enviroment.SpecialFolders之一。

然後,您可以推斷出正確的路徑,而不必硬編碼任何值或不得不請求來自用戶的輸入。