2009-09-18 34 views
5

我們有一個WCF服務,我們最近從自託管切換到IIS託管。它需要使用Process.Start()啓動一個可執行文件。這工作得很好時,它的自託管,但是託管在IIS的時候,我們得到的錯誤:如何從IIS託管的WCF服務啓動可執行文件?

System.ComponentModel.Win32Exception:系統找不到指定的文件

我們有exe文件都bin目錄和應用程序根目錄(在.svc文件旁邊)。但是,它似乎無法找到exe。

任何幫助,將不勝感激。謝謝!

編輯:我忘了提及我們啓動使用下面的代碼: Process.Start(「LeakingWrapper.exe」);

更多信息:不幸的是,我們沒有選擇將exe切換到dll,因爲它正在封裝泄漏內存的第三方庫。因此,我們必須將其納入自己的流程中,以確保我們長期運行的WCF服務不會泄漏!

回答

3

您是否已將aspNetCompatibilityEnabled設置爲true?在這種情況下,你有一個HttpContext,這可能會嘗試使用調用類似:

string exeFileName = HttpContext.Current.Server.MapPath("~/LeakingWrapper.exe") 

或者:如果你指定的EXE整個路徑,例如

Process.Start("C:\yourServiceDir\bin\LeakingWrapper.exe") 

這是否有幫助?

Marc

+0

我們結束了使用你的第二個建議,並存儲在web.config文件的完整路徑,然後通過它進入Process.Start()。謝謝您的幫助! – GuyBehindtheGuy 2009-09-19 18:40:36

0

marc_s答案可能是正確的。

但是,也可能是進程無法找到該文件,因爲它沒有讀取exe文件的權限。

+0

我使用Process Monitor來確保它不是權限問題。 w3wp.exe只是找不到可執行文件! – GuyBehindtheGuy 2009-09-19 18:41:30

0

要使用使用HttpContext Web服務的路徑,必須包括以下行中您的Web服務的web.config

<configuration> 
<system.serviceModel> 
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" /> 
</system.serviceModel> 
</configuration>`