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 Explicit

    Wscript.Echo "VBScript running... Directory modified."

    Const msiOpenDatabaseModeTransact = 1
    Const msiViewModifyUpdate = 2

    ' ここにメモした NEWRETARGETABLEPROPERTY... の値を以下のようにコピーします。
    Const msiMergeModulePath1 = "NEWRETARGETABLEPROPERTY1.4CE81D2C4FC94E5B8AB14C17E77B3418"
    Const msiMergeModulePath2 = "NEWRETARGETABLEPROPERTY1.07705E1CAC524E3AA1613D8B540F90AC"

    Dim oInstaller
    Dim oDatabase
    Dim vw
    Dim rc

    Dim 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.Execute

    Set rc = vw.Fetch
    Do 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.Fetch
    Loop
  2. Visual Studio 2008 で現象が発生するプロジェクトを開きます。
  3. ソリューション エクスプローラーでセットアップ プロジェクトをクリックし、プロパティ ウィンドウの PostBuildEvent をクリックします。
  4. エディット エリアに表示される [...] ボタンをクリックします。
  5. 編集ダイアログが表示されるので、以下のコードを入力します。

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

255905 Orca データベース エディタを使用して Windows インストーラ ファイルを編集する方法

状況

マイクロソフトでは、この問題をこの資料の対象製品として記載されているマイクロソフト製品の問題として認識しています。
プロパティ

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

フィードバック