9

マシンごとおよびx64アーキテクチャのみの設定でWiX3.6でWindowsインストーラスクリプトを作成しようとしています。私は次のプロジェクト構造を持っています(短縮):

<Directory Id="ProgramFiles64Folder" Name="PFiles">
    <Directory Id="APPLICATIONFOLDER" Name="My Company">
      <Directory Id="ProductFolder" Name="My Product">
        <Component Id="MainComponent" Guid="" Win64="yes" KeyPath="yes">
            ...
        </Component>
        <Directory Id="DataFolder" Name="Data">
          <Directory Id="Machine" Name="Machine" >
            <Directory Id="MachinesFolder" Name="Machines">
              <Component Id="Machine1" Guid="{74341536-72DF-48C3-95E8-2851D9FA8318}" Win64="yes" KeyPath="yes">
                        ...
              </Component>
            </Directory>
            <Directory Id="TemplateFolder" Name="Template">
              <Component Id="TemplateFiles" Guid="{A0D0C225-D604-4B84-971D-41687A30EC36}" Win64="yes" KeyPath="yes">
                <File Id="Template1.rsbak" Source="$(var.SolutionDir)bin\Release\File1.rsbak" />
                            ...
              </Component>
            </Directory>
          </Directory>
        </Directory>
      </Directory>
    </Directory>
</Directory>

ICE38: Component TemplateFiles installs to user profile. It must use a registry key under HKCU as its KeyPath, not a file問題は、コンパイル時にTemplateFilesコンポーネントのエラーが発生することです。私を混乱させているのは、別のプロジェクトで同様の構造を使用していて(作業中)、プロジェクトでまったく同じ設定のコンポーネントがいくつかあることです(上記には表示されていません)。他のすべてが正しくインストールされたときに、このコンポーネント(およびこれだけ)がユーザープロファイルへのインストールを要求するのはなぜですか?

4

1 に答える 1

8

とフォルダのmsi間に大きな違いがあるようです。最後はあなたの例で参照されています:Program FilesUsers\UserName\Documents

<Directory Id="DataFolder" Name="Data">

私は同様の問題に遭遇し、ブログ投稿で答えを見つけました - https://robmensching.com/blog/posts/2007/4/27/how-to-create-an-uninstall-shortcut-and-pass-all -ザ/

つまり、ルートRegistryKey上でサブ要素として定義し、要素をサブ要素として追加する必要があります。完全な例については、上記のリンクを参照してください。加えて:HKCUComponentRemoveFolderDirectory

  • 要素KeyPathから属性を削除Component
  • RemoveFolderおそらく、すべてのフォルダーに対して定義する必要があります。そのために、内部にファイルのないダミーコンポーネントを使用しました
于 2012-12-11T08:33:59.303 に答える