我想从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,所以显然出现了问题。
我通过经过身份验证的HTTPS连接(基本身份验证)在服务器上运行应用程序,所以我想我可以通过在{下面的Web.config文件中设置<identity impersonate="true" />
来解决问题。 {1}}标记。但是 - 这没效果。
谢谢 - 感谢所有帮助。
答案 0 :(得分:8)
您的网站在受限制的用户帐户下运行。 除非您使用模拟,否则您的EXE将在相同的受限帐户下运行。
修改:来自Microsoft的支持:http://support.microsoft.com/kb/306158
答案 1 :(得分:1)
最好找出你的exe的真正需求,并赋予NetworkService
适当的权利(在文件系统,注册表......)
它需要一些逆向工程(使用sysinternals processmonitor
)但你仍然拥有一个高安全系统。
答案 2 :(得分:0)
仅在代码中使用Impersonate
类的WindowsIdentity
功能进行该操作。您不希望模拟有权为整个应用程序执行任意.exe的用户。确保您(被模拟的调用者)有权在生产服务器上运行它。
答案 3 :(得分:0)
所以假冒建议很有意思,但最终我的问题出在我的控制台应用程序本身。它试图将一些日志文件写入用户的应用程序数据目录(即使使用-silent
选项...),这是我没想到的。
删除这些部分(从而使其符合-silent
命令)使一切正常运行