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]すれば表示できるようになります。

2010年3月15日月曜日

Bloggerのダッシュボードにテンプレートデザイナー

Bloggerブログのレイアウト設定で選べるテンプレートが増えたというか、デザインの設定が簡単&豊富になりました。他のブログサービスと比べてデザインがダサい、と思っていたのでこれはうれしい。Blogger in Draftで使用できます。
……と、他のブログ記事とかで見て知ったんですが、そもそも Blogger in Draft って何? そんなのあるの初めて知ったw 要は正式リリース前のお試し機能というか、GmailとかにLabsってありますが、あれと同じみたいですね。ブログでドラフトといえば下書き保存じゃないのかと。わかりにくい。Blogger Labs にしとけばいいのに。
で、どうやったら使えるのかというと、ダッシュボードの上に「Blogger in Draftをデフォルトのダッシュボードにします。」とあるので、そのチェックボックスをONにします。それで「レイアウト」のページに行くと[テンプレート デザイナー」が選べるようになってます。
テンプレートデザイナーの中身については他のブログが詳しいので、ググれw
このブログのデザインも変えてみましたよ。とりあえずテンプレート選択だけしてみた。さらに細かい設定もできるようになってます。

2010年3月4日木曜日

Thunderbirdのタイムアウト設定

Windows XPでThunderbirdを使ってますが、メールを受信しようとすると、タイムアウトエラーで受信できませんでした。ステータスバーに通数は表示されるので、メールサーバとの通信自体はできている模様。別のPC(Windows XP)では秀丸メールを使ってるのですが、こちらは普通に受信できました。見ると、添付ファイルがついていてサイズの大きいメールが来ており(15MBぐらい)、どうやらこれを受信しようとしてタイムアウトになっているっぽい。
ということで、Thunderbirdのタイムアウト時間を長く設定すれば良さそうですが、設定項目がない……。ググると[ツール]-[オプション]-[詳細]-[ネットワークとディスク領域]の[接続設定]でできるとか書いてあるのが複数ヒットするのですが、それらしい設定項目ないし……。


さらにググった結果、[ツール]-[オプション]-[詳細]-[一般]-[高度な設定]の[設定エディタ]からできるらしいことがわかりました。


[設定エディタ]ボタンをクリックすると「動作保証対象外になります!」とかちょっとビビらせてくれる警告ダイアログが出ますが、おそらくレジストリを書き換えるためだと思われます。


しょうがないので[細心の注意を払って使用する]ボタンをクリック。すると「about:config」ウィンドウが表示されます。意味不明の設定名が並んでますが、ググッた結果、メールのタイムアウト設定の設定名は「mailnews.tcptimeout」なので、それを探します(アルファベット順に見ていくか、[フィルタ]のところに "mailnews.tc" まで入力すれば絞り込まれるはず)。


デフォルトの値は60(秒)らしいですが(うちの環境では100になってた)、この数字をもっと大きくとります。とりあえず300にしてみました。
これで再度受信してみると、タイムアウトエラーも出ずに受信成功~。
探せばエディタ画面でなくGUIの設定画面が出るようなアドオンとかあるのかもしれません。
Thunderbirdのバージョンは、3.0.3です。

2010年1月29日金曜日

Thunderbirdの最小化常駐アドオン

Thunderbirdのウィンドウを閉じても終了せずに最小化してタスクトレイに常駐してくれるアドオン「MinimizeToTray」を使っていたのですが、Thunderbirdを3.0にしたら非対応で使えなくなっちゃいました。
しばらくそのまま使ってたんですがやっぱり不便なので探してみると「MinimizeToTray revived」が3.0対応でした。インストール後、設定でウィンドウ最小化のときまたは閉じるとき(またはその両方)に実行するようにできます。
寄付推奨$5.00となってますがしなくても使えます。気に入ったら寄付してあげてもいいのですがPaypalだしよくわからないからなぁ……とりあえずしばらく使ってみます。