VB 2005のデジタル証明書を更新する


『エラー 2 SignTool はエラー (中略) の署名に失敗しました。』
 (;゚ Д゚) …?!


 以前 VB 2005 Express Editionで作成したプログラムを更新して発行しようとしたら,エラーが出て困った。

 いまどき,VB 2005なんて使っているひともいないでしょうが,少々の変更のために最新のVBをインストールなんかしたら絶対に面倒なことになるに決まっているし。

 Webで解決方法を見つけたので,ちょっと頑張ってみた。
なお,作業環境は『Microsoft WindwsXp pro. Sp3』。


 早速,次の記事を読む。

ClickOnceのデジタル証明書を更新するには?[VS 2005のみ、2.0のみ、C#VB
http://www.atmarkit.co.jp/fdotnet/dotnettips/611clickoncerenewcert/clickoncerenewcert.html

 どうやら,プログラム作成から1年後にデジタル証明書を更新しないといけないらしい。

 しかも,VB 2005のデジタル証明書を発行するためだけに,VC++ 2005をインストールしないといけないという・・・これは何かの嫌がらせですか。


 VC++をインストールして記事のとおりに『RenewCert.exe』をビルド。
簡単簡単・・・って,エラー発生。

 「windows.h」が無い・・・だと?
(((;゜Д゜)))



 次の記事を参考に『WindowsR Server 2003 SP1 Platform SDK Web Install』より『PSDK-x86.exe』をインストール。

Visual C++ 2005 Express Edition と Microsoft Platform SDK を一緒に使う
http://www.microsoft.com/japan/msdn/vstudio/express/2005/visualc/usingpsdk/

 インストール完了後,VC++ 2005を起動して,適切なサブセクションにパスを追加します。<って,相変わらず意味不明な説明文だよなぁ・・・。


 要するに,VC++2005を起動して「ツール」メニューから「オプション」を開く。
「プロジェクトおよびソリューション」の「+」を開いて「VC++ディレクトリ」を選択。
ディレクトリを表示するプロジェクト」を変更。
それぞれ「実行可能ファイル」「インクルードファイル」「ライブラリファイル」の「$(PATH)」の下の「..」を開く。
それぞれ,次のようにフォルダを指定する。


記入例
  実行可能ファイル - 「C:\Program Files\Microsoft Platform SDK\Bin」
  インクルードファイル - 「C:\Program Files\Microsoft Platform SDK\include」
  ライブラリファイル - 「C:\Program Files\Microsoft Platform SDK\lib」

と,いうことらしい。



 さらに,『corewin_express.vsprops』,『AppSettings.htm』を記事のとおり編集する必要がある。


『corewin_express.vsprops』
 C:\Program Files\Microsoft Visual Studio 8\VC\VCProjectDefaults\corewin_express.vsprops

修正する文字列

 AdditionalDependencies="kernel32.lib"

修正後の文字列

 AdditionalDependencies="kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib"


『AppSettings.htm』
 C:\Program Files\Microsoft Visual Studio 8\VC\VCWizards\AppWiz\Generic\Application\html\1041\AppSettings.htm

 441 行目から 444 行目の先頭に // を追加してコメントアウト

// WIN_APP.disabled = true;
// WIN_APP_LABEL.disabled = true;
// DLL_APP.disabled = true;
// DLL_APP_LABEL.disabled = true;



 これだけやって,ようやく『RenewCert.exe』がビルドできた。
ちなみにdebugフォルダに入ってるので,俺のようにあちこち探したりしないように注意。


 特に問題なければ,リリースに変更してビルド完了。
  メニューの「ビルド(B)」から「構成マネージャ(O)」を選択
 「アクティブソリューション構成(A)」で「Release」を選択



 RenewCert.exeの使い方

 元のデジタル証明書が入っているフォルダにRenewCert.exeをコピーしてコマンドプロンプトで次のように入力する。


 RenewCert.exe <元のデジタル証明書のファイル・パス名>.pfx <更新後のデジタル証明書のファイル・パス名>.pfx "CN=<マシン名\ログオン名>" <元の証明書で設定したパスワード>


 元のデジタル証明書はVBのプロジェクトファイルが入っているフォルダにある。
証明書のファイル名は「(プロジェクト名)_TemporaryKey.pfx」。


 ちなみにコマンドプロンプトでは,ファイルやフォルダ名の入力時に[Tab]キーを押すと適当に補完してくれるので入力作業が格段に楽。



 新しいデジタル証明書が発行されたら,対象となるプロジェクトの証明書を登録し直す必要がある。
 デジタル証明書の発行者名や有効期限の確認も次の方法で確認できる。


   対象となるプロジェクトを起動
   「プロジェクト」メニューから「〜のプロパティ」を開く
   「証明」タブを選択
   「ファイルから選択」を押して「新しいデジタル証明書」を指定して完了


 俺のように新しいデジタル証明書を登録しないうちに発行して困惑しないよう注意。
正しく更新できると有効期限が5年延びる。
どうせなら最初の更新も5年にしてくださいよ。



 と,言うわけで,デジタル証明書再発行の件で5分で終わるはずのプログラムの更新がまる1日かかったというおはなしでした。



 それにしても『RenewCert.exe』。
最初からVBに添付するとかMicrosoftで配布するとかできなかったのでしょうか。

 俺が作ったあやしい『RenewCert.exe』で良ければどうぞ。
ttp://www.geocities.co.jp/Athlete-Athene/5559/RenewCert.zip

 配布禁止だったら即消しますので連絡下さい。