Как исправить установку ICE57.Per-User

Наше приложение записывает некоторые настройки в реестр в куст HKCU во время выполнения. Я хочу удалить эти настройки во время удаления. Вот код:

  <Fragment>
    <DirectoryRef Id="INSTALLLOCATION" DiskId="1" FileSource="$(var.SourceDirProject)\">
      <Component Id="DeleteHkcuManufacturerHive" Guid="GUID">
        <Condition>REMOVE="ALL" AND NOT UPGRADINGPRODUCTCODE</Condition>
        <CreateFolder/>
        <RemoveRegistryKey Action="removeOnUninstall"
 Id="HKCUkey" Root="HKCU" Key="Software\$(var.Manufacturer)"/>
      </Component>
    </DirectoryRef>
  </Fragment>

ICE57: Компонент "DeleteHkcuManufacturerHive" содержит данные как для пользователя, так и для компьютера с KeyPath для каждого компьютера.
Почему я получаю ICE57? Установка для каждого пользователя. Заранее спасибо.

UPD: Где здесь элемент для каждой машины? Может быть, это INSTALLLOCATION=Program Files\ManufacturerDirectory?

2 ответа

Решение

У меня есть ответ в списке рассылки wix-пользователей. Вот ответ Питера Ширтклиффа:

ProgramFiles is a per-machine location. You can only access it when elevated. 
If you want to install program code in a per-user installation, you should 
install to %LocalAppData%\Programs. 

Remove the condition entirely. The component will be installed but will have 
no effect until you uninstall the application. At that point, when the 
component is removed, the registrykey will be removed also. 

Вы работаете с кустом HKCU, который доступен только текущему пользователю.

MSDN заявляет:

ICE57 подтверждает, что отдельные компоненты не смешивают данные для каждого компьютера и пользователя. Это настраиваемое действие ICE проверяет записи реестра, файлы, пути к ключам каталога и не объявленные ярлыки. Смешивание данных о пользователях и компьютерах в одном и том же компоненте может привести к лишь частичной установке компонента для некоторых пользователей в многопользовательской среде.

ICE - это проверки вашего установочного пакета. Как указывалось выше, ICE57 должен гарантировать, что вы не будете смешивать конструкции для каждой машины и для пользователя. Если вам необходимо удалить записи в HKCU во время удаления (и программное обеспечение установлено для каждого компьютера), вы можете отключить эту конкретную проверку в Visual Studio в Свойства> Настройки инструмента, как показано на снимке экрана ниже:

Тем не менее, вы можете подумать о коренной причине вашей проблемы. Если вы выполняете установку для каждой машины, ваш установщик или приложение, вероятно, не должны писать в HKCU, поскольку оно доступно только текущему пользователю, тогда как ваше приложение установлено для всех пользователей.

Другие вопросы по тегам