Visual Studio 2008 で生成したインストーラーを実行して、インストール先フォルダーを既定のフォルダーから任意のフォルダーに変更すると、マージ モジュールのファイルが変更したフォルダーにインストールされない

現象
Microsoft Visual Studio 2008 で、以下の条件をすべて満たすセットアップ プロジェクトをビルドし、生成されたインストーラーを実行して、インストール先フォルダーを既定のフォルダーから任意のフォルダー (たとえば、C:\Sample Folder\(会社名)\(アプリケーション名)) に変更してインストールすると、アプリケーションは、変更したフォルダー (C:\ Sample Folder\(会社名)\(アプリケーション名)) にインストールされますが、マージ モジュールのファイルは、C:\Program Files\(会社名)\(アプリケーション名)\DATA にインストールされます。

現象発生する条件 :
  • 独自に マージ モジュール プロジェクト (.msm) ファイルを、マージ ファイル プロジェクトで作成する。
  • セットアップ プロジェクトに .msm ファイルを含み、さらに、アプリケーション フォルダーに、フォルダー名 "DATA" を作成してファイルを配置する。
原因
この現象は、Visual Studio のセットアップ プロジェクトにより生成されるセットアップ プログラムに問題があるために発生します。
回避策
この現象を回避するには、以下の手順を実行してください。

ここでは、例として 2 つのマージ モジュールを使い、各モジュールのファイルを、ターゲット フォルダー化の Data と Data2 にインストールする場合の手順を説明します。

ステップ 1 : Orca データベースでの確認

  1. Orca データベースで、各マージ モジュールの Directory テーブルを確認します。
  2. NEWRETARGETABLEPROPERTY の後に続く Visual Studio が作成した任意の英数字をメモします。たとえば、1.4CE81D2C4FC94E5B8AB14C17E77B3418 のような英数字

ステップ 2 : Visual Studio への設定変更

  1. 現象が再現するプロジェクトのプロジェクト フォルダー内に ModifyMsi.vbs ファイルを新規作成し、以下のコードを入力します。

    Option ExplicitWscript.Echo "VBScript running... Directory modified."Const msiOpenDatabaseModeTransact = 1Const msiViewModifyUpdate = 2' ここにメモした NEWRETARGETABLEPROPERTY... の値を以下のようにコピーします。Const msiMergeModulePath1 = "NEWRETARGETABLEPROPERTY1.4CE81D2C4FC94E5B8AB14C17E77B3418"Const msiMergeModulePath2 = "NEWRETARGETABLEPROPERTY1.07705E1CAC524E3AA1613D8B540F90AC"Dim oInstallerDim oDatabaseDim vwDim rcDim strPath : strPath = Wscript.Arguments(0)Set oInstaller = Wscript.CreateObject("WindowsInstaller.Installer")Set oDatabase = oInstaller.OpenDatabase(strPath, msiOpenDatabaseModeTransact)Set vw = oDatabase.OpenView("SELECT * FROM Directory")vw.ExecuteSet rc = vw.FetchDo While Not rc Is Nothing  Dim strDirName : strDirName = rc.StringData(1)  ' マージモジュール1のテーブルを変更します。  If strDirName= msiMergeModulePath1 Then    rc.StringData(3) = "DATA|DATA" ' インストールしたいフォルダを指定    vw.Modify msiViewModifyUpdate, rc    oDatabase.Commit  End If  ' マージモジュール2のテーブルを変更します。  If strDirName= msiMergeModulePath2 Then    rc.StringData(3) = "DATA2|DATA2" ' インストールしたいフォルダを指定    vw.Modify msiViewModifyUpdate, rc    oDatabase.Commit  End If  ' 上記と同じようにマージモジュールが増えるごとに If 文を追加します。  Set rc = vw.FetchLoop
  2. Visual Studio 2008 で現象が発生するプロジェクトを開きます。
  3. ソリューション エクスプローラーでセットアップ プロジェクトをクリックし、プロパティ ウィンドウの PostBuildEvent をクリックします。
  4. エディット エリアに表示される [...] ボタンをクリックします。
  5. 編集ダイアログが表示されるので、以下のコードを入力します。

    cscript.exe //nologo "$(ProjectDir)ModifyMsi.vbs" "$(BuiltOuputPath)"
  6. [OK] ボタンをクリックします。
  7. プロジェクトをビルドします。
Orca データベース エディタを使用する場合の編集方法は、次のサポート技術情報をクリックしてください。

255905 Orca データベース エディタを使用して Windows インストーラ ファイルを編集する方法
状況
マイクロソフトでは、この問題をこの資料の対象製品として記載されているマイクロソフト製品の問題として認識しています。
プロパティ

文書番号:979708 - 最終更新日: 10/18/2016 07:15:00 - リビジョン: 5.0

Microsoft Visual Studio 2008 Standard Edition, Microsoft Visual Studio 2008 Professional Edition, Microsoft Visual Studio 2005 Standard Edition, Microsoft Visual Studio 2005 Professional Edition

  • kbtshoot kbexpertiseadvanced kbbug kbnofix kbharmony KB979708
フィードバック