昨日のヘルプファイルを統合したバージョンのインストーラを配布するためのインストーラを作成した。配布するアセンブリのバージョンも、今回からきちんと管理することにしたのだが、これまでAssemblyInfo.vbの記述は「1.0.*」で行っていたので、自動的に年月日と時刻を元にしたバージョン番号が付けられていた。これを「1.0.0.15」に変えたところ、これまで上書きインストールできていたものが出来なくなった。まぁ当然か。番号的には古い番号になるので、上書きされずに「インストーラは古いが、アセンブリのバージョンは高い前のリリース版」が生き残ってしまう。
まぁ、これについては今回のみアンインストールしてからインストールし直すように徹底することで問題ないが、今後、アセンブリのバージョンを同じにしたままロジックをなおしたい、というような場合にうまくいくのか?ということが気になったので、以下の作業を行ってみた。
- 配布するアセンブリのバージョンは同一。
- インストーラのバージョンのみ上げる。
で、上書きインストールを試してみると、一通りプログレスバーが進んだあと、つーっとバーが元に戻り、「インストーラが中断されました」なんてメッセージが。中断してないってば。
GotDotNet掲示版をあさってみたところ、以下のような情報にいきついた。
https://www.gdncom.jp/general/bbs/ShowPost.aspx?PostID=24520
インストーラをコマンドラインで実行し、ログの出力を行うことができるようだ。早速試す。書式は
msiexec /i <.msi のフルパス> /L <ログファイルパス>
出てきたログは膨大なものだが、後半、Rollbackとの記述があるあたりにこんな記録が。
操作 18:12:27: CA_BeginHelpTransaction.3643236F_FC70_11D3_A536_0090278A1BB8。 IHxRegisterSession::CreateTransaction() returned 8004036e. BeginTransaction() ERROR: Attempt failed because another transaction was running. Trying to Rollback current transaction ({A086C8CB-292A-4AA8-B1C6-E49A12AFEF0C}) IHxRegisterSession::ContinueTransaction() returned 80004005. BeginTransaction() ERROR: Could not restart current transaction. BeginTransaction() ERROR: Could not Rollback current transaction. HelpFile registration will abort. Registration session {A086C8CB-292A-4AA8-B1C6-E49A12AFEF0C} was *not* created.
別のトランザクションが動いているからトランザクション開始に失敗した?
エラーメッセージで検索してみると、
- http://www.helpware.net/mshelp2/h2reg_FAQ.htm : 「Rgstrtn.lck」というファイルが残っている場合は、前のヘルプインストールが完了していない。
たしかに、「C:\Documents and Settings\All Users\Application Data\Microsoft Help」というフォルダにそのファイルが見つかった。どうやらヘルプインストールの際のロックファイルのようだ。
いろいろやってみた結果、インストーラに、自分が追加した以外のマージモジュール(マイクロソフトのヘルプ関連のもの)が入っていることに気づいた。これを除外し、自作のマージモジュールを入れ直したら問題なくインストールできるようになった。
なんだったんだろうか?