2016-05-04 54 views
-2

C#代码使用Process.Start运行本地保存在运行代码的相同PC上的exe文件。在Visual Studio中,这个工作正常,exe被调用并弹出cmd窗口。一旦exe完成,控制然后传回给C#调用应用程序。但是,一旦Web应用程序发布到本地IIS,将应用程序池标识设置为自定义帐户,就不再有效。这个exe在任务管理器中可以看作是一个正在运行的进程,但是cmd窗口不会弹出来向用户表明它正在运行。 try/catch块没有捕获任何错误。应用程序池标识确实有权运行该exe。我如何确保cmd窗口在IIS中可以被用户看到,就像在Visual Studio中一样?运行exe的ASP.NET Web应用程序在VS中工作,而不在IIS中

+0

EXE是否以登录到Web服务器的用户身份运行? – mason

+0

iis应用程序池在具有管理员访问权的自定义用户帐户下运行。我也测试了用同样的用户登录到PC上,正如所建议的,不幸的是同样的问题存在。此用户有权运行该exe文件。 – LeedsWalker

+0

但是,EXE是否做它需要或不?为什么你需要看到CMD窗口弹出? IIS进程不是交互式进程。 –

回答

1

微软不建议从Web应用程序调用.exe,因为w3wp.exe出于安全原因在沙盒环境中运行,因此它启动的任何线程/任务/进程与启动时的启动方式不同它自己,因此可能无法按预期工作。

您可能希望将控制台应用程序重新编码为ASP.NET Web API(以前称为WCF),可能托管在IIS或Windows服务中。

Similar question

+3

Web API不是WCF。他们是完全不同的技术。 https://msdn.microsoft.com/en-us/library/jj823172(v=vs.110).aspx –

+0

Web API是旧版皂基技术的延续。这并没有改变我的答案的重点,但感谢指出新的vs旧的... – IrishChieftain

+0

好吧,感谢您的意见,这是一个失望,因为我不那么热衷于重新写所有!... – LeedsWalker

0

我使用JavaScript解决了这个问题。我在我的按钮中添加了一个“OnClientClick”事件,并启动了我的javascript功能。这个函数创建了一个新的ActiveXObject,然后运行有问题的文件。这现在可以通过IIS成功运行。

+1

如果它运行在JavaScript它可能运行在客户端而不是服务器上。这可能不会在锁定的客户端上运行。 –

相关问题