ラベル Windows Installer の投稿を表示しています。 すべての投稿を表示
ラベル Windows Installer の投稿を表示しています。 すべての投稿を表示

2012年8月2日木曜日

ORCA入手するのめんどい……と思ったらもう入手していた

ORCAというのはマイクロソフトのインストールデータベースファイルである .msi ファイルの中身を見たり編集したりするためのツールですが(そうか?)、マイクロソフトのダウンロードセンターで検索しても単体では配布されてないようです。Windows SDKの各バージョン(全部かどうか知らないんですが)に含まれているので、SDKをインストールすればいいのですが、結構サイズも大きいし、実際ORCA使いたいだけなのに使わないツール入れるのもなんだし。
SDKのカスタムインストールで要るとこだけ入れればよさそうなんですが、オプション多すぎてどこにORCA入ってるのかわからないしw Installerとかっぽいですが未確認です。
で、ふと気がつくと(このパターン多いなw)なんかSDKもう入ってるじゃないですか。インストールした覚えないけど。
スタートメニュー見ると[Microsoft Windows SDK 6.0A]というグループがありました。念のため中を見たけど[Tools]の下にORCAは無い……。しかしそもそもORCAってSDKインストールしても一緒にインストールされるわけではなく、インストール先のbinフォルダにmsiファイルがコピーされてるのをまた自分でインストールしなきゃいけない仕様なんですよ。なのでここに無いのもわかる。
というわけで、インストールされているらしいSDK 6.0Aのフォルダを探します。[Tools]の下のショートカットをどれでもいいから右クリックして[ファイルの場所を開く]とやると、
C:\Program Files\Microsoft SDKs\Windows\v6.0A\bin
が開きました。binなのでこのフォルダを探すと……ありましたよORCA.msiが!
さっそくORCA.msiを実行してインストールします。めでたしめでたし。

ところでSDKの6.0Aというのはいつインストールされたのか?
ググってみるとこれはVisual Studio 2008に含まれているものらしいです。VS2008インストールするときに、全部入りにしたか、なんか途中で選択肢が出てきて入れたのかもしれない。覚えてないけどw
Microsoft Windows SDK - Wikipedia, the free encyclopedia

というわけで、ORCAが必要になったけど入手めんどいという人は、VS2008インストール済みだったらまずは見てみると別途入手しなくてもインストールだけですむかもしれませんよ。
他のバージョンのVisual Studioだったらどうなのか? というのは未確認なのでわかりません……。他のバージョンのVSなら他のバージョンのSDKが入りそうなので、さっきのSDKsフォルダのところにv6.0Aじゃないフォルダがあったらそっちも見てみるといいかもしれません。
しかし結局いつまでもORCA必要になってるので、マイクロソフトもORCA.msiだけを単体配布してくれてもいいと思うんですけど。どうせずっとバージョンも変わってないんでしょうにw

2010年11月2日火曜日

.msiファイルの編集をVBScriptで自動化する

Windows Installerのファイル(.msi)はVisualStudioのセットアッププロジェクト(配置プロジェクト)などで生成することができますが、後でプロパティを細かく編集したい場合があります。生成された.msiファイルをORCAなどの.msiファイル編集エディタで開いて修正すればいいのですが、ビルドのたびに毎回同じ修正をするのも面倒だし、何回もやってると修正するのを忘れてしまったりします。

自動化したいと思っていろいろ調べたところ、VBScriptのデータベース操作(SQL)による編集が可能であることがわかりました。さらにそのスクリプトがビルド完了時に実行されるようにセットアッププロジェクトで設定しておくと、.msiが生成された後に自動で編集実行できます。

1.VBScriptのファイルを作成

テキストファイルで編集して拡張子を.vbsにすればOKですが、VisualStudioのエディタ画面でも編集できるので、セットアッププロジェクトに入れておいたほうがわかりやすいかと。Exclude プロパティをTrueにしておけばインストーラには含まれません。

2.VBScriptの中身を編集

.msiファイルのPropertyテーブルをSQLクエリで検索し、当該レコードのフィールドを編集するコードを書きます。ここらへんが詳しいので参考にしてください。コマンドライン引数として編集するファイル名が渡されるようにします。

3.単体テスト

VBScriptが正しく実行されるか、ビルドされた.msiファイルを使ってコマンドプロンプトでテストします。

cscript “~.vbs” “~.msi”

.vbs, .msiファイルがあるサブフォルダに移動してから実行するか、フルパスまたは相対パスで各ファイルのパスが通るようにして実行します。

4.セットアッププロジェクトでビルド後に自動実行されるように設定

プロジェクトのプロパティ RunPostBuildEvent を「ビルドが成功したとき」に設定しておき、PostBuildEvent プロパティに実行するVBScript のコマンドを設定します。

cscript “~.vbs” “~.msi”

単体テスト時のコマンドラインと同様です。絶対パスまたは、マクロを利用したプロジェクトからの相対パスを書きます。パスを含むファイル名はリテラルで囲みます(cscript.exe に対する引数になります)。

5.セットアッププロジェクトのビルドを実行する

うまく行けば.msiファイルのビルド後にVBScriptが実行され、編集も完了しているはずです。実際に編集できているかどうかは結局ORCAなどで確認するしか……。