Ask Learn
Preview
Ask Learn is an AI assistant that can answer questions, clarify concepts, and define terms using trusted Microsoft documentation.
Please sign in to use Ask Learn.
Sign inThis browser is no longer supported.
Upgrade to Microsoft Edge to take advantage of the latest features, security updates, and technical support.
Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
Visual Studio サポート チームのオオカワです。
この記事では、「MSI ファイルをインストール時にエラーが発生する場合のログ採取方法」の記事で取り上げたシナリオで MSI 詳細ログを取得したとして、解析はどのように行ったらよいかを流れを追ってご説明いたします。まずはシナリオのおさらいから。
Visual Studio 2005 でインストーラーを作成した。このインストーラーではカスタム動作を使っている。Windows XP まででは正常にインストールできていたのだが、Windows Vista 以降、インストールに失敗している。この原因を追究したい。
それでは、秘伝の(?)トラブルシュート、ご覧ください!
MSI 詳細ログにおいて、致命的なエラーが発生した場合には、ログに「戻り値 3」が残ります。
まずはこの値をログから探していきましょう。
MSI (s) (34:30) [05:30:37:135]: Leaked MSIHANDLE (12) of type 790531 for thread 7552 MSI (s) (34:30) [05:30:37:151]: Note: 1: 2769 2: _E63CD636_00E8_493B_86CE_F277981FD258.install 3: 1
MSI (s) (34:30) [05:30:37:151]: Note: 1: 2262 2: Error 3: -2147287038
DEBUG: Error 2769: Custom Action _E63CD636_00E8_493B_86CE_F277981FD258.install did not close 1 MSIHANDLEs.
このパッケージをインストールするときに予期しないエラーが検出されました。このパッケージは問題がある可能性があります。エラー コードは 2769 です。 引数: _E63CD636_00E8_493B_86CE_F277981FD258.install, 1,
CustomAction _E63CD636_00E8_493B_86CE_F277981FD258.install returned actual error code 1603 (note this may not be 100% accurate if translation happened inside sandbox)
操作終了 5:30:37: InstallFinalize。 戻り値 3。
1. で見つけたエラーログの前後関係を追ってみると、以下の一行が怪しいですね。
DEBUG: Error 2769: Custom Action _E63CD636_00E8_493B_86CE_F277981FD258.install did not close 1 MSIHANDLEs.
この行に書いてあるカスタム動作名 "E63CD636_00E8_493B_86CE_F277981FD258.install" の実行時のログを、MSI 詳細ログファイルの中から探してみましょう。
MSI (s) (34:CC) [05:29:34:372]: Executing op: ActionStart(Name=_E63CD636_00E8_493B_86CE_F277981FD258.install,,)
操作 5:29:34: _E63CD636_00E8_493B_86CE_F277981FD258.install。
MSI (s) (34:CC) [05:29:34:372]: Executing op: CustomActionSchedule(Action=_E63CD636_00E8_493B_86CE_F277981FD258.install,ActionType=1025,Source=BinaryData,Target=ManagedInstall,CustomActionData=/installtype=notransaction /action=install /LogFile= "C:\Program Files (x86)\Microsoft\20110526_installer\MSICustomAction.dll" "C:\Users\test\AppData\Local\Temp\CFGDBEF.tmp")
MSI (s) (34:30) [05:29:34:403]: Invoking remote custom action. DLL: C:\Windows\Installer\MSIECF4.tmp, Entrypoint: ManagedInstall
MSI (s) (34!80) [05:29:37:383]: Note: 1: 2262 2: Error 3: -2147287038
MSI (c) (40:B0) [05:29:37:383]: Note: 1: 2262 2: Error 3: -2147287038
DEBUG: Error 2869: The dialog ErrorDialog has the error style bit set, but is not an error dialog
MSI (c) (40:B0) [05:29:37:445]: Font created. Charset: Req=128, Ret=128, Font: Req=MS Pゴシック, Ret=MS Pゴシック
このパッケージをインストールするときに予期しないエラーが検出されました。このパッケージは問題がある可能性があります。エラー コードは 2869 です。 引数: ErrorDialog, ,
MSI (c) (40:B0) [05:30:37:119]: Note: 1: 2262 2: Error 3: -2147287038
MSI (c) (40:B0) [05:30:37:119]: 製品: 20110526_installer -- このパッケージをインストールするときに予期しないエラーが検出されました。このパッケージは問題がある可能性があります。エラー コードは 2869 です。 引数: ErrorDialog, ,エラー 1001。
やはり、エラーになっていたのはここでした。エラーコードは 2869 のようです。
自分が追加したカスタム動作 DLL の実行でエラーになっているようだ、という点までエラーメッセージからわかりました。
ここから、事例を調査していきます。こんな感じのクエリを、弊社 Bing に投げまして…。
https://www.bing.com/search?q=msi+2869+custom+action
そうすると、こんな Microsoft Connect の記事を見つけました。
Error 2869 installing MSI with Custom Action on Vista (MSI created using VS 2005 Deployment Project)
https://connect.microsoft.com/VisualStudio/feedback/details/216784/error-2869-installing-msi-with-custom-action-on-vista-msi-created-using-vs-2005-deployment-project
それによると、"NoImpersonate" という属性をカスタム動作につけなければいけないようです。
そのためには以下の 2 つの方法があるようですね…。
ポスト ビルド イベントのスクリプトは、"NoImpersonate.js" として以前は公開されていたようですが、すでに Connect からは削除されてしまっていました…。というわけで、Bing の旅もう一度、ですね。
https://www.bing.com/search?q=NoImpersonate.js
すると Microsoft に関連するドメインである、"msdn.com" 配下にこんな記事を見つけました。
Script to set NoImpersonate bit for custom actions in Visual Studio 2005 setup projects
https://blogs.msdn.com/b/astebner/archive/2007/05/28/2958062.aspx
ここにエラーに対処するための Java Script のファイルと、その組み込み方があったので、Visual Studio 2005 のセットアッププロジェクトに組み込んで、再度 MSI ファイルをビルドします。
すると、無事にインストールが完了するようになりました!やはり、NoImpersonate プロパティが設定されていないことが原因だったようです。
このフラグは、MSI ファイルに含まれるカスタム動作をどのユーザー権限で実行するかを指定するものです。この値が設定されていない場合、カスタム動作は、MSI ファイルをインストールしようとしているユーザーの権限で動作します。この値が設定されている場合、カスタム動作は、windows installer エンジンの実行ユーザーである、システム権限で動作します。
上記を踏まえ、Windows Vista 以降に導入された UAC の動作を考慮すると、以下のような構図が浮かび上がってきます。
これらは、UAC の存在しなかった世代の開発ツールである Visual Studio 2005 で作ったインストーラー固有の現象です。
Windows Vista に公式に対応している Visual Studio 2008 以降では、既定で NoImpersonate プロパティが有効化されているのでご安心ください!
さて、MSI 詳細ログからのトラブルシュートの例をご案内いたしましたが、いかがでしたでしょうか?Windows Installer によるインストール時のほかのエラーに関しても、だいたい似たような感じで大まかな原因箇所の特定は可能な場合も多いです。
是非、お困りごとの解決に有効利用いただければ幸いです。
==== Visual Studio サポート チーム オオカワ ====
Ask Learn is an AI assistant that can answer questions, clarify concepts, and define terms using trusted Microsoft documentation.
Please sign in to use Ask Learn.
Sign in