2009-09-18 31 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>`