从ASP.NET执行EXE

我想从ASP.NET MVC应用程序执行一个exe。 是的,我理解这样做的固有风险,但不幸的是我真的需要这样做。

EXE是一个GUI应用程序,但是我传递它的参数强制它以“静默”运行,它在zip文件中生成一些数据然后退出。

执行EXE的代码如下 – 它在我的开发盒上的VS2008中运行正常 – 但是当我对实际服务器(Server 2003 – IIS6)进行测试时,它失败了:

ProcessStartInfo psi = new ProcessStartInfo(); psi.FileName = "C:\....."; psi.Arguments = "-silent -file outFile.zip"; Process proc = new Process(); proc.StartInfo = psi; proc.Start(); proc.WaitForExit(); log.Debug("Process exited: " + proc.ExitCode); 

退出代码是:-532459699,所以显然出了问题。

我通过经过身份validation的HTTPS连接(基本身份validation)在服务器上运行应用程序,所以我想我可以通过在Web.config文件下设置来解决问题。 标记。 但是 – 这没效果。

谢谢 – 所有帮助表示赞赏。

您的网站在受限制的用户帐户下运行。 除非您使用模拟,否则您的EXE将在相同的受限帐户下运行。

编辑:Microsoft的支持: http : //support.microsoft.com/kb/306158

更好地找出您的exe的真正需求,并赋予NetworkService适当的权限(在文件系统,注册表…)

它需要一些逆向工程(使用sysinternals processmonitor ),但你仍然拥有一个高安全系统。

仅在代码中使用WindowsIdentity类的Impersonatefunction进行该操作。 您不希望模拟有权为整个应用程序执行任意.exe的用户。 确保您(被模拟的调用者)有权在生产服务器上运行它。

因此,模拟建议很有趣,但最终我的问题出在我的控制台应用程序本身。 它试图将一些日志文件写入用户的应用程序数据目录(即使使用-silent选项…),这是我没想到的。

删除这些部分(从而使其符合-silent命令)使一切工作完美