收到密码提示C#System.Diagnostics.Process的通知

本文关键字:Process 通知 Diagnostics C#System 密码 提示 | 更新日期: 2023-09-27 18:20:46

我一直在尝试使用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的工作方式还不是很熟悉。我想知道是否有人能为我指明正确的方向,告诉我如何检测这个提示何时弹出,并允许用户进入

收到密码提示C#System.Diagnostics.Process的通知

啊哈。我找到了答案。我可以通过设置"git-config-core.askpass

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

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