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

news/2024/7/9 19:50:05 标签: IIS, Process, C#, postgresql

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


http://www.niftyadmin.cn/n/517407.html

相关文章

心肝脾肺肾的功能

君主之官:心 我们下棋的时候,不管是丢了车,还是丢了马,只要老帅还在,这棋就没输;但老帅被对方吃掉了,你的车马炮再多,也是输了。心在人体五脏中的地位就是棋盘中的老帅,因…

技术和管理图书【推荐3本】

NoSQL精粹 http://item.jd.com/11297782.html 从技术走向管理:李元芳履职记 http://item.jd.com/11294337.html 《从技术走向管理:李元芳履职记》以小说的形式展现了主人公李元芳从技术骨干成功转型为优秀管理者的成长过程。 远大前程:从软件新手到行业…

前端框架和库汇总

总是对前端的框架和库傻傻分不清,今天又研究了一番,看到一个图:      我的理解就是框架包含了各种类,然后我的代码可以调用类,框架调用我的代码。类库更底端,它把算法写好,我需要实现一个…

利用Chrome模拟访问移动端网页

很多网站都通过User-Agent来判断浏览器类型,如果是3G手机,显示手机页面内容,如果是普通浏览器,显示普通网页内容。  谷歌Chrome浏览器,可以很方便地用来当3G手机模拟器。在Windows的【开始】-->【运行】中输入以下…

javascript导入excel文件(IE浏览器)

由于使用了插件ActiveXObject&#xff0c;而这个插件只是IE提供的&#xff0c;因此以下所有代码都只能在IE中执行 方法一&#xff1a; 可以导入xls、xlsx文件。   固定导入文件的列数。 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" &quo…

把软件添加到文件/文件夹的右键菜单、为文件和文件夹添加复制路径的右键菜单

1 添加软件到文件的右键菜单&#xff0c;如sublime、webstorm 1、winR打开运行框 2、输入regedit打开注册表 3、按路径Computer\HKEY_CLASSES_ROOT\*\shell在左侧依次打开&#xff08;Computer也可能叫计算机&#xff09;&#xff0c;也可复制这个路径到注册表中则直接定位到该…

CSS3 Animation Cheat Sheet:实用的 CSS3 动画库

CSS3 Animation Cheat Sheet 是一组预设的动画库&#xff0c;为您的 Web 项目添加各种很炫的动画。所有你需要做的是添加样式表到你的网站&#xff0c;为你想要添加动画效果的元素应用预制的 CSS 类就可以了。 您可能感兴趣的相关文章特别推荐&#xff1a;35款精致的 CSS3 和 H…

C++:#include和using namespace

首先要明确的是&#xff1a;在C中&#xff0c;没有namespace。   在C中&#xff0c;既有#include&#xff0c;又有using namespace。前者通常定义在.h文件中&#xff0c;后者直接写在.cpp文件中。#include用于添加文件到project中&#xff0c;而namespace使对象在逻辑模块中。…