从ASP.NET执行EXE

时间:2011-05-05 23:23:52

标签: c# asp.net iis-6

我想从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}}标记。但是 - 这没效果。

谢谢 - 感谢所有帮助。

4 个答案:

答案 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命令)使一切正常运行