收到密码提示C#System.Diagnostic.Process的通知
我一直试图使用System.Diagnostic.Process在git可执行文件周围实现一个C#包装器,但遇到了一些麻烦。我想做的是在与远程存储库交互时,每当git提示输入用户名和密码时,在我的应用程序中弹出一个密码提示。这将允许用户自动使用所有内置的git密码凭证存储工具,并且仍然可以在应用程序中输入未使用的凭证 我尝试的是以下代码收到密码提示C#System.Diagnostic.Process的通知,c#,command-line,process,C#,Command Line,Process,我一直试图使用System.Diagnostic.Process在git可执行文件周围实现一个C#包装器,但遇到了一些麻烦。我想做的是在与远程存储库交互时,每当git提示输入用户名和密码时,在我的应用程序中弹出一个密码提示。这将允许用户自动使用所有内置的git密码凭证存储工具,并且仍然可以在应用程序中输入未使用的凭证 我尝试的是以下代码 var process = new System.Diagnostics.Process(); process.StartInfo.UseShellE
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:”,但我在OutputDataReceived或ErrorDataReceived回调中都没有看到此输出,以供我的应用程序读取。理想情况下,我希望在出现这些提示时触发一个事件,并为用户显示一个漂亮的用户名/密码对话框
我仔细研究了一下git代码,发现这些密码提示是输出到/dev/tty并从中读取的。现在我不太熟悉输入/输出流和TTY的工作原理。我想知道是否有人能为我指出正确的方向,让我知道何时会弹出此提示,并允许用户进入Aha。我找到了答案。我可以制作一个小型GUI应用程序,git通过设置“git config core.askpass”在需要密码时提示我 我使用下面的askpass脚本进行了测试,它可以根据需要正常工作
为什么要用参数
/c git fetch
调用cmd.exe
,而不仅仅是用参数fetch
调用git.exe
?也可能有帮助。对不起,这只是我在尝试的事情。我最初把它设置为只调用“git”“然后又回到了那一点。不过,无论哪种方式,我都会有同样的行为。谢谢你的链接,但这不是我真正想要的。我想让git问我用户名。我只是希望用户能够在git提示的情况下指定用户名,我完全知道我想做的事情可能根本不可能。在这种情况下,我将研究在我的应用程序中构建我自己的密码缓存机制。我想如果git已经内置了一个非常健壮的密码缓存API,为什么还要重新发明它呢?如果用户愿意,我应该让他们充分利用这一点,并且只允许他们在git无法从他们自己的凭据API中找到密码时输入密码。