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などで確認するしか……。

2010年10月6日水曜日

VistaでObjectARX 2011 Wizardsがインストールできない……と思ったら

ちゃんと説明書いたドキュメントが同梱されてましたorz 英語だけど。
AutoCAD 2011用のObjectARX SDK をダウンロードしてインストールして、さてウィザードも入れとくかと、インストール先の下の Utils/ObjARXWiz/ARXWizards.msi を実行したら、最後の最後でエラーが出てインストール失敗。ここで、Vistaのことだから管理者権限とか関係ありそうだなと思ったものの、exeではなくmsiなので、右クリックしても[管理者として実行]とか出てこないし。Webで検索してもそれらしいのが見当たらない……再起動してやり直したりしたけど駄目。そしてやっとmsiと同じフォルダの readme.txt ファイルに気づいたという。遅い。
中身は英語なんですがだいたいわかった(つもり)。表題もちゃんとそのものズバリの "How to install on Vista" だったですよ……灯台もと暗し。で、Vistaでインストールするには次のいずれかで行えばよいとのこと。

1) ユーザーアカウント制御を無効にしてからインストーラを実行
2) コマンドプロンプトを管理者として実行し、そこからインストーラを実行

やっぱり管理者権限が関係あったんですよ……惜しいところまで行ってました。てかその前にちゃんと readme.txt 読めと。普段はだいたいそれらしいドキュメントは読むほうなんですけどねー。ハマる時というのはこんなものです。
1) の方法でやったら、エラーが出ずにインストールが正常終了しました。Visual Studio 2008の新規作成からちゃんとウイザード選択できるようになってました。やれやれ。

もうインストール成功したのでテキストの続きは読んでないんですが、まだ続きがあって「それでも駄目なときは」とか「既知の制限事項」とか書いてあるので、上記の方法でもまだ駄目だった人は続きを読んでくださいね(人任せ……)。

2010年4月23日金曜日

FirefoxのアドオンPersonal Menuの仕様が微妙に変わっていた(今更)

Personal MenuでFirefoxのメニューバー非表示→必要なときだけ[Alt]キーで表示という風に使っていたのですが、気が付いたらいつの間にかメニューバーがずっと表示されたままになっていました。最近ディスプレイを替えて解像度が上がったので、メニューバーが表示されていても狭さを感じなくなっていたので別に良かったのですが、気にはなってました。
で、やっと思い出してw調べてみたら、どのバージョンからなのかわかりませんが、Personal Menuのオプション設定方法が変わっていたのですね……。
メニューバーの非表示設定は「詳細」タブの[メニューツールバーを非表示にする]で行うんですが、
WS000001
以前のバージョンでは[メニューツールバーを非表示にする]そのものがチェックボックスになっていたようです。チェックを付けると、さらにその下の[Altキー押下で一時的に表示する]のチェックボックスが選択可能になるという仕様。その[~ツールバーを非表示にする]をONにしていて非表示になっていたのですが、このオプションがなくなった(ONにできない=ここでメニューバーを非表示にする設定はできない)ので表示状態になっていたということ。非表示にするのはFirefoxのバー表示設定(コンテキストメニュー)の方で、
cap100423
[メニューバー]のチェックを外します。
以前のバージョンではここの設定に関係なくPersonal Menuの設定優先だったのか? それとも以前のバージョンのFirefoxではメニューバーを非表示にできなかったのか? 覚えてませんが……。ともかくこれで非表示にしておいて、Personal Menuの[Altキー押下で一時的に非表示にする]オプションをONにしておけば、以前のバージョンと同じ動作になりました。
なお、Personal Menuのオプション「その他」タブにも[メニューバーで非表示にするメニュー]という項目があって[設定…]ボタンを押すと「メニューを非表示」というまぎらわしいタイトルのウィンドウが表示されます。
WS000003
ここでチェックをつけると、Firefoxでメニューバーを表示する設定になっていても、そのメニューだけは非表示になるというものです。[Alt]キーで一時的に表示する場合でも、そのメニューは表示されません。ここで全部にチェックをつけて非表示にしてしまうと、Firefoxでメニューバー表示ONになっている場合でも、メニューバー全体が表示されなくなるので注意してください。なお、その場合、「緊急対応措置」のところをマウスオーバーすると表示されるホットキー[Ctrl]+[Shift]+[Alt]+Sを押すと、この設定ウィンドウが表示されるので(メニューバーが一時的に表示されるわけではない)、チェックを外して[OK]すれば表示できるようになります。