Как исправить предупреждение WiX: Компонент "Х" имеет как данные для каждого пользователя, так и данные для каждой машины с помощью реестра HKCU KeyPath

Я пытаюсь сохранить некоторый код Wix и получаю следующее предупреждение:

warning LGHT1076 : ICE57: Component 'FILE_MY_ASSOCIATION' has both per-user and per-machine data with an HKCU Registry KeyPath.

Из следующего кода:

<Component Id="FILE_MY_ASSOCIATION" Guid="E1DF42A5-BD00-4a80-9BE5-B66A3EF0576E" Win64="$(var.Variables_Win64)">
  <RegistryKey Root="HKCU" Key="Software\MyComany\MyProduct">
    <RegistryValue Value="" Type="string" KeyPath="yes" />
  </RegistryKey>
  <ProgId Icon="FILE_MY_FILETYPE_ICON" Id="MY_FILE_EXTENSION" Description="My Product File" >
    <Extension Id="myext" Advertise="no" >
      <Verb Id="Open" Argument="&quot;%1&quot;" TargetFile="MYUI_EXE_FILE"/>
    </Extension>
  </ProgId>
</Component>

У меня возникли проблемы с тем, что неправильно, или если это предупреждение, о котором мне действительно нужно беспокоиться.

  • Нужно ли беспокоиться и исправлять это предупреждение? Может ли код, поскольку он в настоящее время вызывает проблемы в некоторых обстоятельствах?
  • Кроме того, мне интересно, почему раздел реестра использует HKCU вместо HKLM. Если я изменю его на HKLM. предупреждение уходит, но влияет ли это на поведение установщика?

Спасибо.

Ответ 1

В предупреждении говорится, что вы пишете как данные пользователя, так и общесистемные данные в одном компоненте. Запись в реестре записывается в HKCU, который всегда будет записываться в часть реестра, зависящую от пользователя. ProgId, с другой стороны, записывает записи в HKCR, которые могли бы писать либо HKLM, либо HKCU. Если он записывает в HKLM, который является общесистемным пространством реестра, ваш единственный компонент записывает как куст реестра конкретного пользователя, так и куст системного реестра, который противоречит правилам, изложенным в Предупреждение ICE, которое вы получили.

Ответ 2

Похоже, компилятор предупреждает вас о поведении, которое может быть не таким, каким вы хотите: если вы зарегистрируете ассоциацию файлов только для пользователя, другие пользователи не будут видеть эту связь. Это необычное поведение для приложения. Таким образом, это зависит от ваших требований: хотите ли вы, чтобы приложение зарегистрировалось для обработки всех документов этого типа для всех пользователей или только для пользователя установки?