繁体   English   中英

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

[英]Getting notified of password prompt C# System.Diagnostic.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();

我看到带有“ Password for: http : //www.gitrepo.com ”的命令窗口弹出,但是在我的OutputDataReceived或ErrorDataReceived回调中看不到此输出,以供我的应用读取。 理想情况下,当这些提示出现时,我想触发一个事件,并为用户显示一个不错的用户名/密码对话框。

我仔细浏览了git代码,发现这些密码提示输出到/ dev / tty并从中读取。 现在,我对输入/输出流和TTY的工作方式并不十分熟悉。 我想知道是否有人可以向我指出正确的方向,以使我能够检测到何时弹出此提示并允许用户通过

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM