Wix Toolset - нужен шаг за шагом для InstallScope = "perUser", InstallPrivileges = "limited" и AppDataFolder - PullRequest
0 голосов
/ 24 марта 2020

Я пытаюсь создать установочный пакет .msi, который не администратор может установить в AppDataFolder. Программа представляет собой простое консольное приложение Hello World. Когда я изменяю <Directory> id с ProgramFilesFolder на AppDataFolder, я получаю ICE38 об использовании ключа реестра в HKCU.

Я не нашел много об этой ошибке в документации или руководстве разработчика book.

Похоже, мне нужно добавить раздел реестра для каждого из файлов, когда я хочу установить его в AppDataFolder. Почему? И могут ли все ключи реестра быть одинаковыми (другими словами, могу ли я просто скопировать и вставить одно и то же значение ключа реестра для всех файлов, похоже, это работает таким образом, но я не уверен).

Следующее работает, но я не знаю почему или как. Есть что-то другое, что я должен сделать? Правильно ли удалена папка?

<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
  <?define ConsoleApp1_TargetDir=$(var.ConsoleApp1.TargetDir)?>
  <Product Id="*" Name="SetupProject1" Language="1033" Version="1.0.0.0" Manufacturer="rodchar mfg" UpgradeCode="c9a7b501-56f6-4f38-83c4-300a35db1262">
    <Package InstallerVersion="200" Compressed="yes" InstallScope="perUser" InstallPrivileges="limited" />

    <MajorUpgrade DowngradeErrorMessage="A newer version of [ProductName] is already installed." />
    <MediaTemplate />

    <Feature Id="ProductFeature" Title="SetupProject1" Level="1">
      <ComponentGroupRef Id="ProductComponents" />
    </Feature>
  </Product>

  <Fragment>
    <Directory Id="TARGETDIR" Name="SourceDir">
      <Directory Id="AppDataFolder">
        <Directory Id="INSTALLFOLDER" Name="SetupProject1" />
      </Directory>
    </Directory>
  </Fragment>

  <Fragment>
    <ComponentGroup Id="ProductComponents" Directory="INSTALLFOLDER">
      <Component Id="ConsoleApp1.exe" Guid="D2F84D6D-E8C7-4E4A-8F5E-D1303108CEC1">
        <RegistryValue Root='HKCU' Key='Software\[Manufacturer]\[ProductName]' Type='string' Value='' KeyPath='yes' />
        <File Id="ConsoleApp1.exe" Name="ConsoleApp1.exe" Source="$(var.ConsoleApp1_TargetDir)ConsoleApp1.exe" />
      </Component>
      <Component Id="ConsoleApp1.exe.config" Guid="0D4F339F-DEE4-4D64-BEB3-594B98989480">
        <RegistryValue Root='HKCU' Key='Software\[Manufacturer]\[ProductName]' Type='string' Value='' KeyPath='yes' />
        <File Id="ConsoleApp1.exe.config" Name="ConsoleApp1.exe.config" Source="$(var.ConsoleApp1_TargetDir)ConsoleApp1.exe.config" />
      </Component>
      <Component Id="SetupProject1" Guid="952B00C4-927D-4688-A58A-512D5C5C7055">
        <RegistryValue Root='HKCU' Key='Software\[Manufacturer]\[ProductName]' Type='string' Value='' KeyPath='yes' />
        <RemoveFolder Id='INSTALLFOLDER' On='uninstall'/>
      </Component>
    </ComponentGroup>
  </Fragment>
</Wix>
...