在IIS中调用PostgreSQL组件失败的解决办法在IIS中调试c#程序,在IIS中将Process类在cmd中的输出内容输出到程序中

  我在在cmd、C#中使用命令为PostgreSQL创建数据库、登录角色,并对数据库进行备份和恢复中写出了postgresql的备份恢复的具体方法,但是,当代码从visual studio中发布并部署到IIS上后,不论是备份还是恢复,都不能运行了。
  首先,写出备份的代码:

using System.Diagnostics;  //一定要引用这个命名空间
                private static string result_success = "";
                private static string result_error = "";

                //备份数据库
                string argbackup = @"--host=localhost --port=5432 --username=admin -w --format=c --blobs --verbose --file=D:/abc abc";
                ProcessStartInfo backupProcess = new ProcessStartInfo();
                backupProcess.FileName = @"C:\Program Files\PostgreSQL\9.5\bin\pg_dump.exe";
                backupProcess.Arguments = argbackup;
                backupProcess.UseShellExecute = false;
                backupProcess.RedirectStandardInput = true;
                backupProcess.RedirectStandardOutput = true;
                backupProcess.RedirectStandardError = true;
                backupProcess.CreateNoWindow = true;
                try
                {
                    Process process = Process.Start(backupProcess);
                    //在cmd中输出的成功的内容,重定向到result_success中
                    process.OutputDataReceived += (s,_e) => result_success += _e.Data;
                    //在cmd中输出的成功的内容,重定向到result_error中
                    process.ErrorDataReceived += (s,_e) => result_error += _e.Data;
                    //当EnableRaisingEvents为true,进程退出时Process会调用下面的委托函数
                    process.Exited += (s,_e) => Console.WriteLine("Exited with " + process.ExitCode);
                    process.EnableRaisingEvents = true;
                    process.BeginOutputReadLine();
                    process.BeginErrorReadLine();
                    process.WaitForExit();
                    process.Close();
                }
                catch (Exception e)
                {
                    Console.WriteLine(e.Message);
                }

  在上面的代码中,增加了在IIS中将Process类在cmd中的输出内容输出到程序中的代码,但是,不知道postgresql的输出内容是怎么判断的,输出成功和失败的话都输出到error里了。
  具体的可以看 .net Process类 输入输出重定向方法记录Process.StandardOutput使用注意事项C#输入输出重定向。   在IIS中选择部署好的C#工程,点击浏览网站,然后打开对应的C#程序,在菜单栏中点击调试——附加到进程,选择w3wp.exe,然后点击附加即可。如果有多个w3wp,只有一个一个试了,但类型应该是托管,可以在程序里打个断点,点了附加后,如果显示不能命中断点则说明不是这个进程。   在result_error处打断点可以看到输出的错误是没有输入密码。但是由于我没有找到在c#中向cmd中再次输入字符的方法,因此只能寻找不输入的方法,那么,就只有修改postgresql的权限,使用户可以不用输入密码就操作数据库。   我使用管理员登录IIS,网络为IPv6,则修改配置文件pg_hba.conf,将 IPv6 local connections的md5改为trust即可。如果是其他用户或网络,则修改相应的md5为trust。   

相关文章

文章浏览阅读601次。Oracle的数据导入导出是一项基本的技能,...
文章浏览阅读553次。开头还是介绍一下群,如果感兴趣polardb...
文章浏览阅读3.5k次,点赞3次,收藏7次。折腾了两个小时多才...
文章浏览阅读2.7k次。JSON 代表 JavaScript Object Notation...
文章浏览阅读2.9k次,点赞2次,收藏6次。navicat 连接postgr...
文章浏览阅读1.4k次。postgre进阶sql,包含分组排序、JSON解...