【问题标题】:Executing an EXE from ASP.NET从 ASP.NET 执行 EXE
【发布时间】:2011-05-05 23:23:51
【问题描述】:

我想从 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 连接(基本身份验证)在服务器上运行应用程序,因此我认为可以通过在 <system.web> 下的 Web.config 文件中设置 <identity impersonate="true" /> 来解决此问题标签。但是——这没有奏效。

谢谢——感谢所有帮助。

【问题讨论】:

  • 你只是想压缩一些文件/目录吗?
  • 是的,但我删除了一些参数,因为它们与问题无关。弄清楚要压缩的内容的实际过程很复杂,并且需要大量的后端 DLL 和我不想拉入我的 Web 应用程序的东西。因此,我尝试使用我们的独立 EXE 来完成所有艰苦的工作。

标签: c# asp.net iis-6


【解决方案1】:

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

编辑:来自微软的支持:http://support.microsoft.com/kb/306158

【讨论】:

  • 我试图用模拟标签来做到这一点——但我会尝试那个 KB 中提到的“代码”方法并回复你
  • 是的,经过大量调试后,我发现我正在运行的应用程序试图将日志文件写入用户的应用程序数据目录.......失败!不用说我删除了它,一切正常,甚至不必使用模拟!
  • @debracey 好吧,实际上您可能希望您的应用程序继续记录,这是您记录的有价值的信息,对吧?在这种情况下,您应该为日志文件找到另一个合适的位置,以便在任何一种情况下都可以安全地访问它。另外,任何日志记录机制都应该是 100% 安全的,这意味着在任何情况下日志记录都不应该破坏您的应用程序......
  • 在这种情况下,日志既不有趣也不不必要。该应用程序还尝试编写一些配置文件,因此我添加了一个新标志来阻止它,因为 ASP.NET 应用程序不需要该应用程序重写任何配置文件
【解决方案2】:

最好找出你的 exe 的真正需求并赋予NetworkService 适当的权限(在文件系统、注册表...上)

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

【讨论】:

    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

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

      移除这些部分(从而使其符合-silent 命令)使一切正常运行

      【讨论】:

        猜你喜欢
        • 2013-08-26
        • 2015-10-10
        • 2012-11-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多