问题描述
尝试通过一些我不满意的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 (将#修改为@)