带有破折号的C#Process.Start参数无法执行

问题描述

尝试通过一些我不满意的C#进行工作时遇到麻烦。我的问题似乎源于传递给Process.Start()的参数之一中的连字符/连字符。在下面的代码中,参数列表是根据数据库中的数据构建的。当sRecipient有破折号时,就会出现此问题。例如 银行名称 银行名称 。不幸的是,我无法删除破折号,因为它是银行提供的公共密钥的名称

 sGPGParms = " -e ";
 if (sUseGPGASCIIArmor.toupper() == "Y")
 {
      sGPGParms += "-a ";
 }
 sGPGParms += "-r \"" + sRecipient + "\" \"" + sDestinationDir + sFileName + "\"";

代码的下一部分是似乎失败的地方。该程序正在使用Process.Start()传递路径和参数。该程序不会陷入失败状态,并说该文件已成功创建,但不执行任何操作。该代码今天早些时候起作用,之后银行提供了一个新的加密密钥,名称中带有短划线。从字面上看,破折号是唯一的变化。该代码自2008年以来一直有效,因此我将其隔离到Process.Start()中的arguments参数,以及破折号如何影响罪魁祸首。

Process myCmd;
               
if ((myCmd = Process.Start(Path,sGPGParms)) == null)
{
      LogEvent(sServerLogPath,"ERROR: GPG.exe Failed to start",sUserName);
      sqlContext.Pipe.Send("GPG.exe Failed to start");
}
else
{
      LogEvent(sServerLogPath,"Bank file created successfully",sUserName);
      sqlContext.Pipe.Send("Bann file created successfully");
      
}

作为旁注,我可以运行从日志记录复制的完整命令,它可以正常工作。仅在通过Process.Start()时失败。

这是手动操作的命令,但在没有公共密钥的情况下通过Process.Start()传递失败

"C:\Program Files (x86)\GNU\GnuPG\gpg2.exe" -e -r "Bank-Name" "c:\public\BankPay.txt"

有什么想法为什么这个破折号会引起问题?

更新:通过评论中的一些建议,我看到我得到的退出代码为2,但未找到错误的公钥。该键之所以存在,是因为我可以手动运行该命令,并且在--list-keys

时可以看到它

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)