C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

ツリー一括表示

カスタムインストーラ MSIHANDLEのリーク /ぽんすけ (18/12/20(Thu) 10:57) #89753
Re[1]: カスタムインストーラ MSIHANDLEのリーク /とっちゃん (18/12/20(Thu) 11:52) #89754
  └ Re[2]: カスタムインストーラ MSIHANDLEのリーク /ぽんすけ (18/12/21(Fri) 12:01) #89764
    └ Re[3]: カスタムインストーラ MSIHANDLEのリーク /とっちゃん (18/12/21(Fri) 13:05) #89765
      └ Re[4]: カスタムインストーラ MSIHANDLEのリーク /ぽんすけ (18/12/27(Thu) 18:21) #89801


親記事 / ▼[ 89754 ]
■89753 / 親階層)  カスタムインストーラ MSIHANDLEのリーク
□投稿者/ ぽんすけ (56回)-(2018/12/20(Thu) 10:57:26)

分類:[インストーラ全般] 

お世話になっております。

C# VisualStudio2017でSetup Projectを利用し、インストーラ作成しております。

カスタム動作を組み込んだインストーラで、アンインストール時、以下のエラーが発生しましたが、
http://blogs.wankuma.com/tocchann/archive/2008/02/13/123023.aspxでの解説と同じ現象かと思います。

カスタム動作の中では、MSIのデータベースについての処理は特におこなっていないのですが、
なぜリークエラーが発生するのか理解できておりません。
処理の最後で「MsiCloseHandle」を呼び出せば解決するのでしょうか・・・
すみませんが、ご教示お願いいたします。

-------------------------------------------------------
エラー 1001。 Error 1001. インストールを初期化中に例外が発生しました:
System.IO.FileNotFoundException: ファイルまたはアセンブリ 'file:///C:\windows\SysWOW64\Company'、またはその依存関係の 1 つが読み込めませんでした。指定されたファイルが見つかりません。
DEBUG: Error 2769: Custom Action _808ED202_6D40_4CED_8546_AF7EFF518B8B.uninstall did not close 1 MSIHANDLEs.
このパッケージをインストールするときに予期しないエラーが検出されました。このパッケージは問題がある可能性があります。エラー コードは 2769 です。 引数: _808ED202_6D40_4CED_8546_AF7EFF518B8B.uninstall, 1,
CustomAction _808ED202_6D40_4CED_8546_AF7EFF518B8B.uninstall returned actual error code 1603 (note this may not be 100% accurate if translation happened inside sandbox)

[ □ Tree ] 返信 編集キー/

▲[ 89753 ] / ▼[ 89764 ]
■89754 / 1階層)  Re[1]: カスタムインストーラ MSIHANDLEのリーク
□投稿者/ とっちゃん (561回)-(2018/12/20(Thu) 11:52:41)
No89753 (ぽんすけ さん) に返信

> カスタム動作を組み込んだインストーラで、アンインストール時、以下のエラーが発生しましたが、
> http://blogs.wankuma.com/tocchann/archive/2008/02/13/123023.aspxでの解説と同じ現象かと思います。
>
> カスタム動作の中では、MSIのデータベースについての処理は特におこなっていないのですが、
> なぜリークエラーが発生するのか理解できておりません。
> 処理の最後で「MsiCloseHandle」を呼び出せば解決するのでしょうか・・・
> すみませんが、ご教示お願いいたします。
>
> -------------------------------------------------------
> エラー 1001。 Error 1001. インストールを初期化中に例外が発生しました:
> System.IO.FileNotFoundException: ファイルまたはアセンブリ 'file:///C:\windows\SysWOW64\Company'、またはその依存関係の 1 つが読み込めませんでした。指定されたファイルが見つかりません。
> DEBUG: Error 2769: Custom Action _808ED202_6D40_4CED_8546_AF7EFF518B8B.uninstall did not close 1 MSIHANDLEs.
> このパッケージをインストールするときに予期しないエラーが検出されました。このパッケージは問題がある可能性があります。エラー コードは 2769 です。 引数: _808ED202_6D40_4CED_8546_AF7EFF518B8B.uninstall, 1,
> CustomAction _808ED202_6D40_4CED_8546_AF7EFF518B8B.uninstall returned actual error code 1603 (note this may not be 100% accurate if translation happened inside sandbox)
>

すごく懐かしいブログ記事が。。。w

ですが、ハンドルのクローズ漏れの原因は前回( ■No88855 )も書いていますが、例外が発生していることに起因しています。
前回のやり取りはこちら。 http://bbs.wankuma.com/index.cgi?mode=al2&mo=88855&namber=88855&space=0&page=0&KLOG=153

確かに DEBUG: Error 2769 の行以降のログはクローズ漏れを表していますが、直接的な原因はその手前の Error 1001 にあります。
カスタム動作本体が例外でクラッシュしているため、そこに渡したハンドルもクローズされていない!と言ってるだけです。

なので、調査するのは「なぜ例外が発生するのか」「どこで例外が発生しているのか」という、一般的な
プログラムエラーと同じような対応となります。
以前も書いていますが、第三者から言えることは、その程度です。

ところで、この問題、前回は解決していますがその時は結局どうしたのでしょう?

強制アンインストールしてからなら問題ないとか、書いてありましたけど。。。?
古いバージョンをインストール・アンインストールは問題ない?
新しいバージョンを入れて古いのをアンインストールは問題がある?
そのあたりも情報がないままです。

[ 親 89753 / □ Tree ] 返信 編集キー/

▲[ 89754 ] / ▼[ 89765 ]
■89764 / 2階層)  Re[2]: カスタムインストーラ MSIHANDLEのリーク
□投稿者/ ぽんすけ (58回)-(2018/12/21(Fri) 12:01:29)
No89754 (とっちゃん さん) に返信

とっちゃん様

お世話になります。

例外発生→クローズ漏れ の件、理解しました。
ありがとうございます。

以前、強制アンインストールツールを実行したときには、
消えていると思い込んでいました。。。

その後、新しいバージョンをインストールし、アンインストール
しようとしたところ、エラーは出ずに終了はしますが、
フォルダがそのまま残っておりました。

C:\Program Filesの下のアプリのEXEを含むフォルダ、
またプログラム内で作成したフォルダをアンインストール時の
カスタム動作で消そうとしていますが、消えていませんでした。

カスタム動作のinstall, uninstall時の関数に、それぞれ
MessageBoxを入れてみましたところ、install時には表示されますが、
uninstall時には表示されませんでした。

アンインストール処理が実行されていないということでしょうか。。。
調査する方法があればご教示お願いします。

[ 親 89753 / □ Tree ] 返信 編集キー/

▲[ 89764 ] / ▼[ 89801 ]
■89765 / 3階層)  Re[3]: カスタムインストーラ MSIHANDLEのリーク
□投稿者/ とっちゃん (562回)-(2018/12/21(Fri) 13:05:22)
No89764 (ぽんすけ さん) に返信
> C:\Program Filesの下のアプリのEXEを含むフォルダ、
> またプログラム内で作成したフォルダをアンインストール時の
> カスタム動作で消そうとしていますが、消えていませんでした。
>
プログラム内で作成したフォルダというのはどこ作成したのでしょうか?
それによっても状況は変わります。


> カスタム動作のinstall, uninstall時の関数に、それぞれ
> MessageBoxを入れてみましたところ、install時には表示されますが、
> uninstall時には表示されませんでした。
>
> アンインストール処理が実行されていないということでしょうか。。。

どんな形で実装しているかわからないので、詳しいことはわかりませんが
「表示されない」ということは、少なくとも
「表示処理部分(MessageBox呼び出し場所)は実行されていない」
ということになります。


> 調査する方法があればご教示お願いします。
>
まずは、詳細ログをとってそれを詳しく調査ですね。
エラー発生個所だけじゃなく、その前後(というか前)も重要だったりします。
また、場合によってはインストール時のログと突き合せたほうがいい場合もあるかもしれません。

それ以外では、段取り自体が問題ないのか?という部分のレビューも重要ですね。

そしてそれ以上に重要なのがインストール処理全体の設計に間違いがないか?というあたり。

特にフォルダ作成がプログラム内ということなので、
「それはインストーラでクリーンナップするのか?」
という部分はかなり重要です。

プログラムの責務と、実行権限に起因する問題は解決不可能な問題も含むので
簡単な話ではありません。

アプリケーションのインストール条件とかいろいろなものを組み合わせた結果として
PerUsersにすれば解決するのでそっちに切り替えるという選択もあります。

まぁ、その場合インストーラから変更ですけど。。。

一応。。。
詳細ログにはマシン固有の情報も含まれています。
なので、不特定多数の人が見れるところ(わんくま掲示板を含む)に公開してはいけません。

[ 親 89753 / □ Tree ] 返信 編集キー/

▲[ 89765 ] / 返信無し
■89801 / 4階層)  Re[4]: カスタムインストーラ MSIHANDLEのリーク
□投稿者/ ぽんすけ (59回)-(2018/12/27(Thu) 18:21:05)
No89765 (とっちゃん さん) に返信

とっちゃんさま、ありがとうございます。
別件で手を取られていまして、返答が遅くなってしまいました。
申し訳ございません。

今の作業、落ち着いたらまた本件調査したいと思います、


[ 親 89753 / □ Tree ] 返信 編集キー/


管理者用

- Child Tree -