我有在IIS上运行的ASP.NET MVC3应用程序。一个控制器操作启动过程“cmd / C git clone some-repo”。
我需要确保在已经安装了git的用户下运行子进程。我使用带有Identity == My Accout的应用程序池(admin + git正常工作)。
进程启动正常,但它挂断了。我认为,由于错误的身份运行它。
有没有人有在IIS下启动进程的经验,你见过类似的东西吗?调试此类问题的方法是什么?
答案 0 :(得分:1)
我怀疑发生了什么......
在每个用户的基础上,您需要接受远程SSH服务的公钥。您的进程可能会挂起,等待某人通过键盘输入接受公钥。
在控制台应用程序中,用户就是您,您已经接受了它。作为w3wp,密钥尚未被接受 - 永远等待它被接受。
你有几个选择。
如果您控制w3wc的AppPool的身份,您可以以该用户身份登录,并自行永久接受。您可以使用PsExec等工具将系统或网络服务作为流程运行。
使用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文件夹。