IIS 7.5 w3wp.exe运行另一个进程

时间:2011-09-24 14:51:53

标签: .net asp.net-mvc git iis

我有在IIS上运行的ASP.NET MVC3应用程序。一个控制器操作启动过程“cmd / C git clone some-repo”。

我需要确保在已经安装了git的用户下运行子进程。我使用带有Identity == My Accout的应用程序池(admin + git正常工作)。

进程启动正常,但它挂断了。我认为,由于错误的身份运行它。

有没有人有在IIS下启动进程的经验,你见过类似的东西吗?调试此类问题的方法是什么?

2 个答案:

答案 0 :(得分:1)

我怀疑发生了什么......

在每个用户的基础上,您需要接受远程SSH服务的公钥。您的进程可能会挂起,等待某人通过键盘输入接受公钥。

在控制台应用程序中,用户就是您,您已经接受了它。作为w3wp,密钥尚未被接受 - 永远等待它被接受。

你有几个选择。

  1. 如果您控制w3wc的AppPool的身份,您可以以该用户身份登录,并自行永久接受。您可以使用PsExec等工具将系统或网络服务作为流程运行。

  2. 使用different overload Process.Start将其作为已接受公钥的其他用户启动。

答案 1 :(得分:1)

我认为你的other question解决方案也适用于此。

将模拟设置为我的用户名

<identity impersonate="true" password="o1j2813n" userName="obrad" />

我已尝试从mvc操作中运行System.Diagnostics.Process.Start中的进程,并且它们出现在我的Windows任务管理器中的用户名下,因此我认为this answer会有所帮助。

修改

问题的另一部分 - git无法正常工作是由于给出git命令的错误方式造成的。我做了一些实验,并找到了一种如何从控制器动作克隆git repo的方法:

System.Diagnostics.Process.Start(@"C:\Program Files (x86)\Git\bin\git.exe", "clone git://github.com/goranobradovic/go.DB.JournalingBase.git " + @"C:\Users\obrad\Desktop\temp");

此命令将repo从git://github.com/goranobradovic/go.DB.JournalingBase.git克隆到桌面上的temp文件夹。