public void btnBackup_Click(object sender, EventArgs e)
{
BackupDatabase(
"localhost",
"5432",
"postgres",
"***********",
"PerfectFreight",
txtPath.Text,
"Backup #",
"C:\\Program Files\\PostgreSQL\\13\\bin\\");
}
public static string BackupDatabase(
string server,
string port,
string user,
string password,
string dbname,
string backupdir,
string backupFileName,
string backupCommandDir)
{
try
{
Environment.SetEnvironmentVariable("PGPASSWORD", password);
string backupFile = backupdir + backupFileName + DateTime.Now.ToString("MM") + "_" + DateTime.Now.ToString("dd") + "_" + DateTime.Now.ToString("yyyy") + "_Time»" + DateTime.Now.ToString("HH") + ";" + DateTime.Now.ToString("mm") + ".backup";
string BackupString = " -U " + user + " -h " + server + " -p " + port + " -d " + dbname + " -F c -b -v -f \"" + backupFile;
Process proc = new Process();
proc.StartInfo.FileName = backupCommandDir + "\\pg_dump.exe";
proc.StartInfo.Arguments = BackupString;
proc.StartInfo.RedirectStandardOutput = true;//for error checks BackupString
proc.StartInfo.RedirectStandardError = true;
proc.StartInfo.UseShellExecute = false;//use for not opening cmd screen
proc.StartInfo.CreateNoWindow = true;//use for not opening cmd screen
proc.Start();
proc.WaitForExit();
proc.Close();
MessageBox.Show("Backup successfully created");
return backupFile;
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
return null;
}
}程序开始运行但没有结束,它不会给出错误。在指令proc.WaitForExit();中,执行就像在无限循环中一样停滞。
发布于 2021-02-05 16:18:51
pg_dump的参数结果如下所示
-U postgres -h localhost -p 5432 -d PerfectFreight -F c -b -v -f "...Backup #02_05_2021_Time»10;32.backup除了疯狂的文件名之外,还有一些严重的问题:
你忘记了end中的右双引号
-v并不表示“详细”,而是设置一个变量并需要一个参数试着先想出一个有效的命令,然后在程序中使用它。
发布于 2021-02-05 18:20:12
您正在传递的应用程序参数肯定存在错误,因此您正在启动的应用程序的进程由于该应用程序代码或参数中的错误而无法完成其工作。如果您启动的目标进程由于某种原因挂起,WaitForExit()将完全按照方法的提示执行操作,您的应用程序也会挂起。
https://stackoverflow.com/questions/66056680
复制相似问题