获得密码提示通知C#System.Diagnostic.Process

时间:2014-09-04 22:00:13

标签: c# command-line process

我一直在尝试使用System.Diagnostic.Process在git可执行文件周围实现一个C#包装器,并且已经打了一针墙。我想做的是在与远程存储库交互时,只要git提示输入用户名和密码,就可以在我的应用程序中弹出密码提示。这将允许用户自动使用所有内置的git密码凭据存储工具,并且仍然可以选择在应用程序未使用时在应用程序中输入凭据。

我尝试的是以下代码。

var process = new System.Diagnostics.Process();

    process.StartInfo.UseShellExecute = false;
    process.StartInfo.RedirectStandardOutput = true;
    process.StartInfo.RedirectStandardError = true;
    process.StartInfo.FileName = "cmd.exe";
    process.StartInfo.Arguments = "/c git fetch";

    StringBuilder output = new StringBuilder();
    StringBuilder error = new StringBuilder();

    process.OutputDataReceived += (sender, e) =>
    {
        Debug.Log("OUTPUT DATA: " + e.Data);
    };
    process.ErrorDataReceived += (sender, e) =>
    {
        Debug.Log("ERROR DATA: " + e.Data);
    };

    process.Start();

    process.BeginOutputReadLine();
    process.BeginErrorReadLine();

    process.WaitForExit();

我看到命令窗口弹出"密码:http://www.gitrepo.com"但是我的OutputDataReceived或ErrorDataReceived回调中没有看到此输出供我的应用程序读取。理想情况下,我希望在出现这些提示时触发事件,并为用户显示一个很好的用户名/密码对话框。

我挖了一下git代码,发现这些密码提示输出到/ dev / tty并从中读取。现在我不太熟悉输入/输出流和TTY如何工作。我想知道是否有人能指出我正确的方向,以便我能够检测到这个提示何时弹出并允许用户传入

1 个答案:

答案 0 :(得分:1)

啊哈。我找到了答案。我可以创建一个小的GUI应用程序,git会在需要密码时通过设置" git config core.askpass

来提示我。

我使用以下的askpass脚本进行了测试,它可以根据需要运行。

http://code.metager.de/source/xref/git/git-gui/git-gui--askpass