最近、globalsignからauthenticode証明書を購入しましたが、展開用のファイルに署名する際に問題が発生します。プロジェクトによって生成されてから.msiに入れられる.exeファイルがいくつかあります。signtoolを使用して.exeファイルに署名すると、証明書は有効であり、正常に実行されます。問題は、(Visual Studioセットアッププロジェクトを使用して).msiをビルドすると、.exeファイルの署名が失われることです。したがって、ビルド後に.msiに署名することはできますが、インストールされた.exeファイルは「不明な発行元」のビジネス全体を継続します。クライアントマシンにインストールするために、これらのファイルの署名を保持するにはどうすればよいですか?
3 に答える
Visual Studioは、コンパイル時にobjとbinの2つのフォルダーを作成します。少なくとも私の場合、出力は常にobjフォルダーからbinフォルダーにコピーされます。binフォルダー内の実行可能ファイルに署名して、上書きしてmsiにパッケージ化するだけでした。objフォルダー内の実行可能ファイルに署名すると、問題が解決しました。
次のPostBuildEventをVSセットアッププロジェクト(プロジェクトプロパティ)に追加できます。
Windows 8.0:
"C:\Program Files (x86)\Windows Kits\8.0\bin\x86\signtool.exe" sign /a $(BuiltOuputPath)
ウインドウズ10:
"C:\Program Files (x86)\Windows Kits\10\bin\x86\signtool.exe" sign /a $(BuiltOuputPath)
signtoolの使用法については、このMSDNドキュメントを参照してください。/ fフラグを使用して署名証明書を指定したり、/pを使用して証明書のパスワードを指定したりできます。
また、$(BuildOuputPath)のスペルが間違っていることに注意してください。これは意図的なものです。ありがとうマイクロソフト...
他のオプション(私が行っているオプション)は、最初に.msiを作成してから、pfx(証明書)を使用して署名することです。
(globalsign.comで購入したコード署名証明書を使用しています)
CMDを開きます:実行-> powershell
証明書がある場所で実行し、指紋を保存します。
PS C:\ Windows \ system32>Get-PfxCertificate-FilePath。\CompanyCertificate.pfx
このABCFEDRABF229B78BF9C40EC47007C1234567890のようなものが得られます。次の実行行で、値を置き換える必要があります。
次に、singtool.exeが配置されている場所を見つけてそこに移動し(私の場合はWin 10、msiも同じパスにある必要があります)、次の手順を実行します。
PS C:\Program Files (x86)\Windows Kits\10\App Certification Kit> .\signtool.exe sign /f CompanyCertificate.pfx /d "App Description" /p pfxPasswordHere /v /sha1 ABCFEDRABF229B78BF9C40EC47007C1234567890 /t "http://timestamp.comodoca.com/authenticode" MyApplicationSetup.msi
正常に署名されたファイルの数:1
警告の数:0
エラー数:0
おめでとうございます!
.msiプロパティの下に次の新しいタブが表示されます。
そして最後にそれをインストールしてみてください: