VSTO」タグアーカイブ

[VS]ソフトウェア発行元証明書の作成と署名

作成物に証明書を署名するための作成方法と署名方法をメモ。

自己署名証明書とか、オレオレ証明書とかいわれるものでVSTOのインストールにClickOnceを使用する場合、必要なもの。
使用するツールはWindowsSDKに含まれている。

  • 作成方法
    
    rem 1.====
    rem CA:Certificate Authority:認証局証明書
    rem  会社名 : MoonWing
    rem  組織名 : MoonWing Authority Root CA
    rem  県  名 : Tokyo
    rem  国  名 : JP
    rem 有効期限: 2012.12.31
    "%ProgramFiles%\Microsoft SDKs\Windows\v7.1\Bin\makecert" -r -n "C=JP, S=Tokyo, OU=MoonWing Authority Root CA, O=MoonWing" -e 12/31/2012 -a sha1 -cy authority -sv moonwingCA.pvk moonwingCA.cer
    rem 秘密キーのパスワードの作成:Subject Key:rootCA
    rem 秘密キーのパスワードの入力:Subject Key:rootCA
    
    rem 2.====
    rem EE:End Entity:署名用証明書
    rem コモン名: MoonWing
    rem  会社名 : MoonWing
    rem  組織名 : MoonWing Development
    rem  県  名 : Tokyo
    rem  国  名 : JP
    rem 有効期限: 2012.12.31
    "%ProgramFiles%\Microsoft SDKs\Windows\v7.1\Bin\makecert" -n "CN=MoonWing, C=JP, S=Tokyo, O=MoonWing, OU=MoonWing Development" -e 12/31/2012 -sv moonwing.pvk -ic moonwingCA.cer -iv moonwingCA.pvk -nscp -cy end moonwing.cer
    rem 秘密キーのパスワードの作成:Subject Key:endEntity
    rem 秘密キーのパスワードの入力:Subject Key:endEntity
    rem 秘密キーのパスワードの入力:Issuer Signature:rootCA
    
    rem 3.====
    rem SPC:Software Publisher's Certificate:ソフトウェア発行元証明書
    "%ProgramFiles%\Microsoft SDKs\Windows\v7.1\Bin\Cert2SPC" moonwing.cer moonwingCA.cer moonwing.spc
    
    rem 4.====
    rem PFX:Personal Information Exchange:PKCS#12
    rem  -pi(pvkpassword):endEntity
    rem  -po(pfxpassword):SPC
    "%ProgramFiles%\Microsoft SDKs\Windows\v7.1\Bin\pvk2pfx" -pvk moonwing.pvk -pi endEntity -spc moonwing.spc -pfx moonwing.pfx -po SPC
    
  • 署名方法
    
    rem 5.====
    rem target.exeへ署名
    rem  -t(time stamp server):http://timestamp.verisign.com/scripts/timstamp.dll
    rem  -p(pfxpassword):SPC
    "%ProgramFiles%\Microsoft SDKs\Windows\v7.1\Bin\signtool" sign /f moonwing.pfx /a /t http://timestamp.verisign.com/scripts/timstamp.dll /p SPC target.exe
    

[VS]Office AddinのインストーラがVSTOのインストールに失敗する

VisuatlStudio2010 + .NetFramework3.5でOffice2007のアドインを作成し、Setupを下記のサイトを参考に作成したときのメモ。

かなり役に立つので必読です。

上記の記事を参考にすることで、AddinとSetupがパッケージぽい形になるかと思います。
自分が作成した際には熟読してないがために下記の2点が抜けていました。

  • レジストリへ登録の作成
  • Inclusion Listへの登録処理作成

ちなみに起動条件の作成時にVSTOの日本語ランゲージパックを追加しようとしたのですがうまくいきませんでした。
Oracで取得したComponentIDが正しいかどうかすら確認できず、とりあえず、必須制限からはずしました。

VM上でインストーラのテストを行ったところインストールは完了するもののうまくアドインが動作しません。
ログを出すためにユーザー環境変数に以下の2つを追加しました。

  • VSTO_SUPPRESSDISPLAYALERTS:0
  • VSTO_LOGALERTS:1

(参考:アプリケーション レベルのプロジェクトのデバッグ

ログを追いかけてみてわかったことは2つありました。

  1. Setup.msiでは必須コンポーネントがインストールされない
  2. VSTO4.0ランゲージパックのダウンロードに失敗する

1つ目は、最初に示した参考サイト内にちゃんと書かれていました。

Setup.exe をダブルクリックしてソリューションをインストールする代わりに、.msi ファイルをダブルクリックしてソリューションをインストールする方法も選択できます。このモードでは、ユーザーはブートストラップを実行しません。そのため、セットアップは依存関係を検出できず、必要に応じた必須コンポーネントのインストールも行いません。

つまり、Setup.exeでインストールしないといけないということで、Setup.exeは必須コンポーネントインストール後にSetup.msiを実行すると。
といわけで、VisualStudioのSetupプロジェクトの「必須コンポーネント」プロパティはSetup.exeに作用するだけで、別途Setup.msiが必須コンポーネントの存在しない場合に起動しないようにするための起動条件は手動で作成しなければならないとのことです。しっかり読んでいたならこんなところでは引っかからなかったのでしょうが。

2つ目はインストーラのログを読んでVSTO4.0日本語ランゲージパックのダウンロードに失敗していました。
具体的には下記の2つのURLです。

  • http://go.microsoft.com/fwlink/?LinkId=158919&clcid=0x411
  • http://go.microsoft.com/fwlink/?LinkId=158920&clcid=0x411

上記のURLは確かにリダイレクト先が存在しないようで、このURLはどこで設定されているかを調べてみました。
その結果、レジストリの

  • HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\GenericBootstrapper\3.5

に記載されているPath内(多分WindowsSDK内)にあるBootstrapperと呼ばれるものの中で定義されているようです。

実際に自分の環境のBootstrapper/VSTO4.0日本語ランゲージは

  • C:\Program Files\Microsoft SDKs\Windows\v7.0A\Bootstrapper\Packages\VSTOR40\ja\package.xml

にURLが記載されていていました。

ここは、本来手を入れるべきではない場所でしたが実験でURLを下記のように書き換えてみたところ、無事インストールを成功させることができました。


--- before/package.xml
+++ after/package.xml
@@ -61,7 +61,7 @@
     Microsoft Visual Studio 2010 Tools for Office Runtime (x86 および x64) Language Pack - 日本語のインストール中にエラーが発生しました。
     http://go.microsoft.com/fwlink/?LinkId=158917
     http://go.microsoft.com/fwlink/?LinkId=158918
-    http://go.microsoft.com/fwlink/?LinkId=158919&clcid=0x411
-    http://go.microsoft.com/fwlink/?LinkId=158920&clcid=0x411
+    http://download.microsoft.com/download/8/D/1/8D139084-948F-45F7-A014-71A90E2572EC/vstor40_LP_x86_jpn.exe
+    http://download.microsoft.com/download/8/D/1/8D139084-948F-45F7-A014-71A90E2572EC/vstor40_LP_x64_jpn.exe
   
 

とりあえず、Microsoftからの修正がでるまではこの対応ではこの対応で乗り切れると思います。
たしか、VSTO3.0でも同様にv6.0A内のBootstrapperの日本語ランゲージへのURLも同じように存在しない場所を指してたような。
(参考:まなBlog)

それと、小さな注意点がありました。
Windows7で開発していたため、package.xmlを書き換えるには管理者権限が必要でした。
ふだん使っているエディタを管理者権限で起動しなおすのは手間だと思い、メモ帳を管理者権限で立ち上げ、URLを修正したのが問題となりました。
というのも、このpackage.xmlはUTF-8のBOMなし(UTF-8N)で作成されているのですが、Windows付属のメモ帳ではBOMありでUTF-8を保存してしまうようで、
Setupをリビルドした際に下記の警告が表示され、実際インストーラはランゲージパックをインストールしない挙動に変わってしまいました。


警告: カルチャ 'ja-JP' を項目 'Microsoft Visual Studio 2010 Tools for Office Runtime (x86 and x64)' に対して一致できませんでした。カルチャ 'en' を使用します。

package.xmlをUTF-8Nで保存し、BOMがないことと文字化けしていないことを確認して再ビルドしたところ警告もなくなり、ランゲージパックのインストールも主なわれるようになりました。

また、今回は必要とならなかったけれど関連のある参考サイトもメモ

[VS]VSTO対応バージョンまとめ

VSTOのバージョンとOfficeのバージョンと.NetFrameworkのバージョンの表がほしくなったので作成。
VSTOとは

  • Microsoft Visual Studio 2005 Tools for Office Second Edition Runtime
  • Microsoft Visual Studio 2005 Tools for the 2007 Microsoft Office System
  • Microsoft Visual Studio Tools for the Microsoft Office system (Version 3.0 Runtime)
  • Microsoft Visual Studio 2010 Tools for the Microsoft Office System (Version 4.0 Runtime)

と微妙に名前が変わっているOffice拡張用コンポーネントのことです。
基本的には上記の2個目を省いた以下の3つあれば問題ないはず。
(というか、3個目も省いていいかも、結局2個で2003,2007,2010に対応できることになるわけだし。)

Vsto 対応Office 対応.NetFramework 対応VisualStduio 対応Windows
2005 SE 2003,2007 2.0 2005 2000,XP,Server 2003,Vista,7,Server 2008
3.0 2007 3.5 SP1 2008 2000,XP,Server 2003,Vista,7,Server 2008
4.0 2007,2010 3.5 SP1 2010 XP,Server 2003,Vista,7,Server 2008