我一直在尝试从C#调用cmd命令以下,但它没有用,我的错误路径错误。虽然我直接从CMD执行它是有效的:
CMD命令:C:\Program Files (x86)\ABC Client>xyz.exe /launch "Your Software 12.7"
我尝试了以下代码:
ProcessStartInfo processStartInfo = new ProcessStartInfo("cmd")
{
WorkingDirectory = @"C:\Windows\System32",
Arguments = "/C \"\"C:/Program Files (x86)/ABC Client/xyz.exe\"\" /launch 'Your Software 12.7'",
RedirectStandardOutput = true,
RedirectStandardError = true,
WindowStyle = ProcessWindowStyle.Normal,
UseShellExecute = false
};
Process process = Process.Start(processStartInfo);
答案 0 :(得分:1)
您需要转义引号。 This question is about escaping quotation marks
string softwareName = "\"Your Software 12.7\"";
这应该可以解决问题。
答案 1 :(得分:1)
最后修正:正确的字符串将是:
Arguments = "/C \"\"C:/Program Files (x86)/ABC Client/xyz.exe\" /launch \"Your Software 12.7\"\"";
感谢大家的意见:)
答案 2 :(得分:0)
如果问题只是要执行的字符串,我认为这会输出你想要的内容:
Arguments=@"C:\Program Files (x86)\ABC Client\xyz.exe /launch ""Your Software 12.7""";
答案 3 :(得分:0)
以下任何一种都应该有效:
Arguments = @"/C ""C:\Program Files (x86)\ABC Client\xyz.exe"" /launch ""Your Software 12.7""";
Arguments = "/C \"C:\\Program Files (x86)\\ABC Client\\xyz.exe\" /launch \"Your Software 12.7\"";
也就是说,程序位置周围有双引号(你有两次双引号而不是一次),反斜杠而不是正斜杠,以及"你的软件27.7"的双引号。
使用字符串文字(@前缀),您需要在最终字符串中的每个双引号之前使用双引号。如果没有@前缀,则需要在每个反斜杠之前使用反斜杠,并在最终字符串中使用双引号。