C# 如何从ASP.NET Web服务启动进程(并允许它做它想做的一切)?

C# 如何从ASP.NET Web服务启动进程(并允许它做它想做的一切)?,c#,asp.net,web-services,iis-7,C#,Asp.net,Web Services,Iis 7,Amazon服务器上安装了一个Web服务。ExposedWebMethod应该启动一个可执行文件。但是,WebMethod启动的进程(可执行文件)似乎没有完成其工作的权限。如果在本地调用WebMethod(在Amazon VM上使用IE),我可以将一些事件跟踪到路径:C:\\LogFiles上的日志文件中。但是,若从远程机器调用,甚至并没有日志文件。在本地,在我的机器上一切正常。 问题:IIS7中是否有任何方法或设置允许我的Web服务创建可以完成我想做的任何事情的流程?在web.config文件

Amazon服务器上安装了一个Web服务。Exposed
WebMethod
应该启动一个可执行文件。但是,
WebMethod
启动的进程(可执行文件)似乎没有完成其工作的权限。如果在本地调用
WebMethod
(在Amazon VM上使用IE),我可以将一些事件跟踪到路径:
C:\\LogFiles
上的日志文件中。但是,若从远程机器调用,甚至并没有日志文件。在本地,在我的机器上一切正常。 问题:IIS7中是否有任何方法或设置允许我的Web服务创建可以完成我想做的任何事情的流程?在web.config文件中,我添加了一行:

<identity impersonate="true" userName="USERNAME" password="password"/>

(当然,用户名和密码在文件中的书写是正确的)

此外,我尝试使用非超声处理,正如它所解释的那样,但没有结果。我的进程无法完成它的工作,它甚至无法将操作跟踪到日志文件中。在本地,在我的机器上,一切正常

知道如何将设置或其他更改为IIS7吗


编辑:除了主要问题之外:我的Web服务甚至无法在路径上创建日志文件:
C:\\LogFiles
-虽然它可以在本地启动,但远程没有包含一些字符串的简单日志文件。如何允许它创建简单的文本文件?

如果所有其他操作都失败,您可以单独启动此过程并让它等待信号。您可以通过多种方式提供信号-通过IP套接字、邮件槽、命名管道。web服务将向命令管道(或队列)发送请求,“executor”进程将弹出命令,执行它们,并等待更多命令。

如果您使用Linux,我将为您提供有史以来最智能的解决方案,设置SUID标志,这在Windows中是不可能的

模拟的问题在于,只要您对服务器计算机有某种控制权,它就会工作,而不仅仅是拥有适当的凭据

您提到了AmazonVM:出于安全原因,我非常确定他们不会允许执行模拟。[添加]或者,更好的是,他们不允许任何人在
C:\

选择1 切换到Mono/Linux,使用控制台中的
chmod
rock设置SUID位

选择2 如果您可以以ASP.NET以外的方式运行可执行文件(即,您有一个远程桌面,SSH*)作为特权帐户(注意:特权并不意味着管理员),那么您可以重新设计应用程序,让ASP.NET使用WCF、Web服务或远程处理从守护进程调用服务。但是,在这种情况下,必须重新设计可执行文件,使其成为独立服务器

[添加]如果您的主机提供商不允许您在路径(如
C:\
)中写入,而只允许您在主目录下写入,则没有解决方案修复


*它也适用于Windows!!!!我指的是服务器

您应该避免尝试从ASP.NET启动外部进程,因为您的应用程序将在ASP.NET帐户的上下文中运行。(是的,您可以使用模拟启动到另一个帐户,但是,我们不要去那里)

相反,安装一个Windows服务,它可以接收信号*来启动所需的可执行文件

这样做的好处是,您可以自定义服务运行的帐户,而无需在代码中输入密码

(*)信号可通过多种方式实现:

  • WCF服务调用(使用由Windows服务承载的WCF服务)
  • 监视对已知目录的文件系统更改
这是一个好主意,但在这种情况下它不是一个选项-流程必须在命令行中接收多个参数,并且每次调用WebMethod时都有一个新流程(作业完成后,流程退出)。不过,还是要谢谢你。(1)你可以通过一个套接字或一个命名管道来传递大量的信息。(2) 您可以从该守护进程启动一个新进程,该进程有望使用正确的凭据运行。这就是Unix世界的生活方式,顺便说一句。谢谢,我会投票支持你的答案;这是一个好主意,但我将继续等待答案(当然,如果有正确的答案的话)如何从web服务启动流程。@vladimir:谢谢!你真的不需要对这个答案投赞成票;我只是想让更多的解释更清楚,而不是更有说服力:)正如我已经说过的,这是一个好主意,可能应该按照你的建议去做(我的意思是按照你在回答和评论中的建议)。问题是,我基本上不是网络程序员,我没有足够的时间让它以正确的方式工作,我只需要以最快的方式解决问题:)谢谢你的尝试,但这仍然不是我问题的答案。是的,我知道我应该避免从ASP.NET启动外部进程,但假设我必须这样做,我无法解释为什么。我只是想这么做,问题是:怎么做?谢谢。“如何”只是一个简单的过程。开始()。。。但对于“裸体时徒手抓捕愤怒的老虎的最佳做法是什么?”的答案是“不要这样做。试试另一种方法。如果你坚持下去,你很可能会受伤。”。