如何为控制台应用程序提供密码?

时间:2014-01-30 19:29:53

标签: c# redirect console

当我在测试当前应用程序时遇到问题时,我经常需要调整应用程序使用的数据库。在多次丢失重要更改后,我编写了一个程序,将我的数据库备份到一个文件,然后将文件检入SubVersion。我发现备份应用程序不够好。

数据库是PostgreSQL数据库,我的备份应用程序调用pg_dump来创建备份文件。 pg_dump在控制台窗口中执行。当数据库在我自己的机器上时,它运行良好。但是当我将数据库移动到我们的测试服务器时,pg_dump要求输入密码。虽然这不是什么大不了的事,但我希望能够自动提供密码,因为它在备份应用程序中可用。

我试过按照我在这里找到的建议,但pg_dump仍然停止并要求输入密码。这是我认为应该提供密码的代码:

Process backupProcess = new Process();
backupProcess.StartInfo.UseShellExecute = false;
backupProcess.StartInfo.RedirectStandardInput = true;
backupProcess.StartInfo.FileName = dumpPath + "pg_dump.exe";
backupProcess.StartInfo.Arguments = " --host " + host + 
                                    " --port " + port + 
                                    " --username " + userName + 
                                    " --format custom --blobs --verbose --file " +
                                    "\"" + txtBackupFile.Text + "\" " + dbName;
backupProcess.StartInfo.WindowStyle = ProcessWindowStyle.Normal;
backupProcess.Start();
StreamWriter standardInput = backupProcess.StandardInput;
standardInput.WriteLine("mypassword");
backupProcess.WaitForExit();// Waits here for the process to exit.

感谢您的帮助。

ROBR

2 个答案:

答案 0 :(得分:4)

我已经使用

解决了这个问题
backupProcess.EnvironmentVariables["PGPASSWORD"] = "password";
这样,我就避免将密码存储在电脑上

答案 1 :(得分:1)

也许它有点作弊(从某种意义上说它并没有真正帮助你回答如何向pg_dump提供输入的问题),但是你可以参考this answer这表明使用.pgpass文件。当然可以动态地写入该文件,而不是在提示时尝试与程序交互。

.pgpass here上的信息。