我有(在设置之后从调试器复制,以确保实际传递给命令的内容):
process.StartInfo.FileName = "C:\\Program Files\\Microsoft SDKs\\Windows\\v7.1\\Bin\\signtool.exe"
process.StartInfo.Arguments = " sign /f \"C:\\Users\\...\\myPfx.pfx\" /p \"myPassword\" \"C:\\Users\\...\\Desktop\\app.exe\""
但是当我Start()
它没有签署应用程序时。 (当我将signtool复制到该文件夹并手动执行时 - 它可以工作。)
所以,为了调试,我尝试了:
System.Diagnostics.Process.Start(@"cmd.exe", @" /k " + "\"" + process.StartInfo.FileName + "\"" + " " + "\"" + process.StartInfo.Arguments + "\"");
但我明白了:
'C:\ Program'未被识别为内部或外部命令, 可操作程序或批处理文件。
那么我该如何让签名工作(或者至少是cmd
,这样我才能看到问题究竟是什么?)
答案 0 :(得分:3)
您的文件名需要引用
process.StartInfo.FileName = "\"C:\\Program Files\\Microsoft SDKs\\Windows\\v7.1\\Bin\\signtool.exe\""
修改强>
请尝试使用此功能,这对我来说可以使用虚拟文件
string filename = "\"C:\\Program Files\\Microsoft SDKs\\Windows\\v7.1\\Bin\\signtool.exe\""
string arguments = "sign /f \"C:\\Users\\...\\myPfx.pfx\" /p \"myPassword\" \"C:\\Users\\...\\Desktop\\app.exe\""
Process.Start("cmd.exe /k " + filename + " " + arguments)
答案 1 :(得分:1)
请尝试这个,创建一个ProcessStartInfo对象,然后将Process的StartInfo设置为新对象:
ProcessStartInfo startInfo = new ProcessStartInfo();
string filename = "\"C:\\Program Files\\Microsoft SDKs\\Windows\\v7.1\\Bin\\signtool.exe\""
string arguments = " sign /f \"C:\\Users\\...\\myPfx.pfx\" /p \"myPassword\" \"C:\\Users\\...\\Desktop\\app.exe\""
startInfo.Arguments = filename + arguments;
startInfo.FileName = "cmd.exe";
startInfo.UseShellExecute = false;
startInfo.WindowStyle = ProcessWindowStyle.Hidden;
startInfo.RedirectStandardOutput = true;
startInfo.RedirectStandardError = true;
startInfo.WorkingDirectory = "set your working directory here";
Process p = new Process();
p.StartInfo = startInfo;
p.Start();
string output = p.StandardOutput.ReadToEnd();
string error = p.StandardError.
//Instrumentation.Log(LogTypes.ProgramOutput, output);
//Instrumentation.Log(LogTypes.StandardError, error);
p.WaitForExit();
if (p.ExitCode == 0)
{
// log success;
}
else
{
// log failure;
}
答案 2 :(得分:0)
您可能需要将WorkingDirectory属性设置为桌面(app.exe所在的位置),并将“app.exe”(不带路径)传递给arguments属性。