C# IIS环境下通过CMD调用pg_dump备份表不生效问题
IIS托管.NET程序调用pg_dump备份数据表失效问题
问题背景
正在开发通过pg_dump --table参数备份重要数据表的功能,该功能在本地localhost环境运行正常,可顺利完成导出备份,但将程序部署到服务器通过IIS运行时,该功能无任何执行效果。
项目基于*.NET Framework 4.7.2*开发,功能实现代码如下:
try{ var process = new Process(); var startInfo = new ProcessStartInfo(); startInfo.FileName = "cmd.exe"; startInfo.WorkingDirectory = "C:\\Website\\Logs\\"; string fileName = startInfo.WorkingDirectory+RandomString(); startInfo.Arguments = $"/c set PGPASSWORD={userPassword}&pg_dump --file {fileName} --host {Ip} --port 5432 --username {userName} --no-password --verbose --format=d --table public.clients {DB_Name}"; ServerLogs.SaveLog(startInfo.Arguments); //记录执行日志 startInfo.Verb = "runas"; //以管理员身份运行 startInfo.CreateNoWindow = true; startInfo.UseShellExecute = false; process.StartInfo = startInfo; process.Start(); process.WaitForExit(); process.Close(); return "Success"; }catch (Exception x) { return x.Message; }
服务端记录的进程启动参数显示,实际生成的待执行CMD命令如下:/c set PGPASSWORD=MyPassword&pg_dump --file C:\Website\Logs\abcd\FileName123123 --host mycluster.eu-north-1.rds.amazonaws.com --port 5432 --username test--no-password --verbose --format=d --table public.clients CRM
手动将该命令复制到EC2服务器终端执行时,可正常运行并将表数据导出到指定路径,但通过IIS托管的程序触发执行时,仅能正常写入日志,pg_dump进程未完成表导出操作,也未生成任何备份文件。已确认服务器环境变量配置正确,可全局识别pg_dump命令。
已完成初步排查
- 功能在本地运行正常,初步判断代码逻辑无明显错误
- 生成的CMD命令在服务器终端手动执行正常,初步判断命令参数配置无误
- 将进程启动参数替换为
type nul > somefile.txt测试IIS对目标目录的写入权限,执行成功,初步排除目录写入权限问题
目前已尝试多种公开解决方案仍未定位问题根因,寻求可行的排查思路与解决方案。
内容的提问来源于stack exchange,提问作者E.Mich
相关产品推荐
相关产品推荐

