1

私は持っています(実際にコマンドに渡されるものであることを確認するために、設定にデバッガーからコピーしました):

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では、署名を機能させるにはどうすればよいでしょうか (または、少なくとも.

編集:みんなありがとう。問題は以下のとおりでした-引用符がありません。そして、質問を投稿する前に実際にそれを試しましたが(-すべてに引用符を追加)、そのときはうまくいきませんでした。引用符と実際のパラメーターの間に空白を追加していたことがわかりました。そのため、エラーが発生するようです。

4

3 に答える 3

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)
于 2012-11-20T12:02:06.773 に答える
1

これを試して、自分で ProcessStartInfo オブジェクトを作成してから、プロセスの 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;
}
于 2012-11-20T12:22:35.173 に答える
0

WorkingDirectory プロパティをデスクトップ (app.exe がある場所) に設定し、"app.exe" (パスなし) を引数プロパティに渡す必要がある場合があります。

于 2012-11-20T12:12:23.313 に答える