如何使用从另一个应用程序调用的cmd.exe执行Git命令?

时间:2017-11-01 18:16:25

标签: c# command-line process.start

我有一个生成一些文件的应用程序。生成文件后,我想执行一些Git命令来启动本地存储库。我花了几天时间研究多种解决方案和无休止的谷歌搜索,但我不能按预期工作。

如果我在本地或服务器上手动启动.exe,它可以正常工作。但是,当应用程序(MVC)调用.exe时,它无法在本地或服务器上运行。我将提供调用.exe本身的代码,然后是.exe代码正在执行的操作。

MVC调用运行.exe

        //Call git exe 
        var processInfo = new ProcessStartInfo()
        {
            Arguments = Arg1 + " " + Arg2,
            UseShellExecute = false,
            FileName = @"C:\Foo.exe"
        };

        var process = new Process()
        {
            StartInfo = processInfo
        };

        process.Start();
        process.WaitForExit();

这个.exe在没有问题的情况下启动,所以我觉得这部分工作正常。我通过任务管理器检查了它。

执行Git命令

        var process = new Process
        {
            StartInfo = new ProcessStartInfo
            {
                FileName = "cmd.exe",
                RedirectStandardInput = true,
                UseShellExecute = false,
                WorkingDirectory = Properties.Settings.Default.OutPutDirectory
            },
        };

        process.Start();
        using (var writer = process.StandardInput)
        {
            writer.WriteLine("git init");
            writer.WriteLine("git add --all");
            writer.WriteLine("git commit --author=\"" + ParseUserNameFromEmail() + " <" + _userEmailAddress + ">\" -m \"Initial Commit\"");
        }

如果我从cmd提示符手动执行此部分,它在本地和服务器上都可以正常工作。但是只要从MVC应用程序调用此.exe,它就会运行,但git repo不会按预期创建。我完全迷失了。我已尝试使用我的信用卡和服务帐户运行该过程。我也尝试捕获输出,希望能够解释问题可能是什么,但它在错误和输出重定向时只是空的:(。

0 个答案:

没有答案