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

13 篇文章 1 订阅
11 篇文章 1 订阅

  我在在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。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值