0

我希望我的 ASP.NET 页面能够脱壳并执行 git 命令。我将命令放在一个 bat 文件中,该文件有效:

REM cd to the git repo folder
cd c:\temp\mygitrepo
"c:\Program Files\Git\Bin\git.exe" show c090dc4b8b1b3512c1b5363c371e21d810d02f54 -- myfile.txt

如果我从 cmd 提示符运行我的 .bat 文件,没问题。如果我使用 System.Diagnostics.Process.Start 运行它,我会收到此错误:
请求 RUNTIME_PREFIX,但前缀计算失败。使用静态回退

错误来自这个 git 文件:http: //github.com/git/git/blob/master/exec_cmd.c

我使用完全相同的技术来运行 svn.exe 命令,没问题。

编辑 1:从这里的线程我了解到 msysgit 将一些文件安装在与当前用户我相关的位置,而不是所有用户。IIS Web 服务器正在另一个用户帐户下运行。我尝试将一些引起我注意的 git 文件(例如 .gitconfig)复制给其他用户(在文档和设置中)。没运气。因此,我将重点转移到让 IIS 在启动 git 命令时模拟我。

4

1 回答 1

3

它实际上是一个错误,还是只是通知您一个后备?根据链接的代码,该命令似乎仍应成功执行,仅使用静态 PREFIX 而不是 RUNTIME_PREFIX。

如果该命令确实失败,您可能需要确保在从 .NET 启动进程时所有必需的环境变量都可用。您可能还需要模拟不同的 windows 身份来运行具有适当权限的命令(我假设 ASP.NET 身份受到尽可能多的限制。) ProcessStartInfo 对象提供了几种配置进程的方法,包括 windows身份、过程动词和环境变量。确保在运行批处理文件之前提供了批处理文件所需的正确上下文。

于 2009-10-11T23:20:22.147 回答