2

第一次在这里问问题,因为我有点难倒这个问题。我有一个 Powershell 脚本来拉一个 git 存储库:

git.exe --git-dir=C:\ReleaseStaging\QABuild\.git pull --progress "origin"

如果我在 powershell 中执行此脚本,该脚本可以正常工作。

下一步是让 ac# windows 服务执行这个 powershell 脚本。命令的输出是“'W:/QABuild' 似乎不是 git 存储库。致命:无法从远程存储库读取。请确保您具有正确的访问权限并且存储库存在。”

“W”驱动器是我的 git 存储库的映射驱动器,而 C:\ReleaseStaging\QABuild 是我在本地克隆存储库的位置。

我的下一个测试是在 ConsoleApplication 中运行相同的 c# 代码,它运行良好。所以我认为我的 Windows 服务需要在不同的凭据下运行才能看到 W 驱动器,但是在我的本地帐户下运行也不起作用,因为我遇到了同样的错误。

这是我在 Windows 服务中使用的代码:

        using(RunspaceInvoke invoker = new RunspaceInvoke()) {
            invoker.Invoke("Set-ExecutionPolicy Unrestricted");
        }

        string cmdArg = String.Format(@"C:\ReleaseStaging\PullChanges.ps1");

        Runspace runspace = RunspaceFactory.CreateRunspace();
        runspace.ApartmentState = System.Threading.ApartmentState.STA;
        runspace.ThreadOptions = PSThreadOptions.UseCurrentThread;
        runspace.Open();

        Pipeline pipeline = runspace.CreatePipeline();
        pipeline.Commands.AddScript(cmdArg);

        pipeline.Commands[0].MergeMyResults(
          PipelineResultTypes.Error, PipelineResultTypes.Output);

        Collection<PSObject> results = pipeline.Invoke();
        var error = pipeline.Error.ReadToEnd();
        runspace.Close();

关于如何从 Windows 服务中执行的 powershell 脚本中获取 git 存储库的任何想法?

4

1 回答 1

0

问题是git pull隐式使用映射驱动器。在 Windows 服务中使用映射的网络驱动器是出了名的困难。

有关如何执行此操作的一些提示,请参阅此答案。最简单的方法可能是使用 UNC 路径而不是映射驱动器。

于 2013-05-17T17:39:41.387 回答