IIS7不会通过Process Start启动我的Exe文件,但它在任务栏中运行

时间:2016-10-21 10:07:34

标签: c# asp.net iis

我已经在c#中创建了一个带有进程启动的项目,它在本地Visual Studio构建中运行,当我在IIS中托管它时它没有运行但它正在启动进程而没有显示任何内容我在任务管理器中检查过它。代码示例:< / p>

  Process process = new Process();
  process.StartInfo.FileName = "calc.exe";
  process.StartInfo.UseShellExecute = false;
  process.Start()process.WaitForExit();

我尝试过以下解决方案

IIS7 does not start my Exe file by Process Start

Foo.cmd won't output lines in process

System.Diagnostics.Process.Start not work from an IIS

没有任何帮助。如果有人知道请帮帮我

2 个答案:

答案 0 :(得分:3)

尝试为您的应用程序使用的ApplicationPool将Load User配置文件的值设置为True。

您只需选择应用程序池并在高级设置下选择高级设置即可找到此选项。

这对我有用。

ApplicationPool Settings screen shot

编辑:但正如消费者所说,不建议从您的IIS服务器启动EXE,因为这可能会为黑客攻击您的应用程序提供一些方法。

答案 1 :(得分:1)

我已经搜索了很多,最后我找到了解决方案,我对某人有帮助。

解决方案:

带有IIS的Asp.net作为服务应用程序运行,这意味着它在另一个Window Station和Desktop下运行。但是,在Windows中,默认的可见Window Station和Desktop是WinSta0 \ Default,这是Shell(explorer.exe)运行的位置。因此,您创建的.exe显示在一个不可见的桌面上。

实际上,Window Station和Desktop是一个很好的GUI安全沙箱,因为Windows不希望普通的GUI应用程序通过Windows消息与其他服务应用程序进行通信。

要从不可见的服务应用程序显示GUI,您必须打破WinSta0 \ Default的安全沙箱,这有点复杂。

但是,如果你想创建一个可见的过程,那真的很难。通常,推荐的解决方案是创建第二个GUI应用程序,如Winform,Asp.net和Winform可以通过.Net Remoting或其他Inter进程通信技术进行通信。当Asp.net想要创建可见的记事本进程时,它可以通过Net Remoting告诉Winform客户端,然后Winform将代表Asp.net进程简单地处理Proces.Start notepad.exe。

.Net Remoting是解决此问题的解决方案 (参考此链接 .NET Remoting with an easy example

Click Here下载示例