【问题标题】:How can I shell out of an ASP.NET page and execute a git command?如何退出 ASP.NET 页面并执行 git 命令?
【发布时间】:2009-10-11 23:05:07
【问题描述】:

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

【问题讨论】:

    标签: asp.net git msysgit


    【解决方案1】:

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

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

    【讨论】:

    • 在精神上,我很快就驳回了您的“这实际上是一个错误...命令仍然应该成功执行”。但这是关键。我的逻辑捕获了标准输出和标准错误。如果 stderr 不是空白,我的逻辑假设命令失败并且只显示 stderr。正如您所怀疑的那样,尽管有错误,stdout 确实包含了我所期望的输出。
    • 有时只需要一些开箱即用的思考。 ;) 很高兴它的工作。
    猜你喜欢
    • 1970-01-01
    • 2020-03-27
    • 2023-02-08
    • 1970-01-01
    • 1970-01-01
    • 2015-01-07
    • 2013-08-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多