【问题标题】:Access denied cmd C#访问被拒绝 cmd C#
【发布时间】:2018-02-09 13:23:16
【问题描述】:

我试图在我的 C# 项目中创建一个备份触发器,但我一直在执行命令。我可以手动执行此操作,并且与此处相同,但不知何故,当我尝试在 C# 项目中实现它时,我无法运行它(可以但它显示“访问被拒绝”)。

string cmdKomanda = @"/k cd C:\Program Files\PostgreSQL\9.6\bin" + Environment.CurrentDirectory+ @"pg_dump -h 192.168.130.240 -p 5433 -U postgres  -F c  postgres > ""C:\Users\Marko Petričević\Documents\Radni_sati_Backup\radni_sati_15_01_18"" " + Environment.CurrentDirectory + @"password";
        ProcessStartInfo procStartInfo =new ProcessStartInfo("CMD.exe", cmdKomanda);
        Process.Start(procStartInfo);

基本上,首先我必须到 PostgreSQL bin 文件夹从那里运行 pg_dumb。运行该命令后,需要密码。

cmdKomanda 的运行时值为:

"/k cd C:\\Program Files\\PostgreSQL\\9.6\\binC:\\Users\\Marko Petričević\\Desktop\\TortoiseSVN\\Radni_sati-Dev\\Radni_sati\\bin\\Debugpg_dump -h 192.168.130.240 -p 5433 -U postgres  -F c  postgres > C:\\\\Users\\\\Marko Petričević\\\\Documents\\\\Radni_sati_Backup\\\\radni_sati_15_01_18 C:\\Users\\Marko Petričević\\Desktop\\TortoiseSVN\\Radni_sati-Dev\\Radni_sati\\bin\\Debugpassword"

【问题讨论】:

  • cmdKomanda 在运行时的值是多少? Environment.CurrentDirectory 不是你想要的。
  • 这可能不起作用的原因有很多,您至少需要向我们展示您遇到的错误。
  • @SebastianL 没有错误。只是“拒绝访问”。并返回项目所在的路径。
  • @MarkoPetričević 你试过以管理员身份运行它吗?
  • 我无法运行它。当你尝试时会发生什么?

标签: c# postgresql cmd process


【解决方案1】:

与其尝试使用cd 模拟交互式会话并输入密码,不如使用ProcessStartInfo 的工具来设置工作文件夹并传递PGPASSWORD

var cmdKomanda = @"-h 192.168.130.240 -p 5433 -U postgres  -F c  postgres > ""C:\Users\Marko Petričević\Documents\Radni_sati_Backup\radni_sati_15_01_18""";
ProcessStartInfo procStartInfo =new ProcessStartInfo("pg_dump.exe", cmdKomanda);
procStartInfo.WorkingDirectory = @"C:\Program Files\PostgreSQL\9.6\bin";
procStartInfo.EnvironmentVariables["PGPASSWORD"] = password; // pg_dump will pick it up

【讨论】:

  • 我喜欢你完成这项工作的方式,但它唯一做的就是在 cmd 中打开工作目录,就像他不执行命令一样(在文件夹中看到,没有创建的文件)。附言我不得不把procStartInfo.UseShellExecute = false; Process.Start(procStartInfo);
  • @MarkoPetričević 你可以尝试在不使用 cmd 的情况下运行 pg_dump.exe 吗?
  • 我可以,但这会为我打开 PGadmin 4。如果您知道我的意思,我不想每次要进行备份时都使用 PGadmin。
【解决方案2】:

找到了解决办法,好像不能用pg_dump.exe,命令必须以/k开头

 var cmdKomanda = @"/k pg_dump -h 192.168.130.240 -p 5433 -U postgres  -F c  postgres >""C:\Users\Marko Petričević\Documents\Radni_sati_Backup\radni_sati_proba"" ";
        ProcessStartInfo procStartInfo = new ProcessStartInfo("CMD.exe", cmdKomanda);
        procStartInfo.WorkingDirectory = @"C:\Program Files\PostgreSQL\9.6\bin";
        procStartInfo.EnvironmentVariables["PGPASSWORD"] = sifra; // pg_dump 
        procStartInfo.UseShellExecute = false;
        Process.Start(procStartInfo);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-10-31
    • 2021-09-18
    • 2012-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-15
    相关资源
    最近更新 更多