wix: установка RegistryKey Root HKMU

Если я установил для корневого атрибута значение HKMU в RegistryKey, как мне узнать, где искать (RegistrySearch root = HKCU или HKLM) в моем реестре для моего RegistryValue. Или как я могу динамически установить корневое значение?


person TimTiTim    schedule 09.06.2011    source источник
comment
Для невежественных людей вроде меня: Wix преобразует HKMU в HKLM, если в установщик или HKCU, если вы этого не сделаете. Это не то, что вы можете найти в regedit или winreg.h   -  person Rup    schedule 09.06.2011
comment
HKMU переключается между hklm и hkcu в зависимости от установки на машине или пользователя.   -  person Bernd Ott    schedule 09.06.2011
comment
спасибо за ответы !! Но это моя проблема в зависимости от того, что выберет человек (пользователь или установка машины). Как я узнаю, когда я удаляю приложение, я должен искать свое свойство, которое было сохранено в реестре, в зависимости от того, какой режим установки был запущен. Потому что в RegistrySearch я не могу выбрать HKMU.   -  person TimTiTim    schedule 09.06.2011


Ответы (2)


Обычно для этого используются два поиска с одним и тем же свойством: один поиск HKLM, а другой - HKCU.

Тогда могут возникнуть следующие сценарии:

  • первый поиск находит значение и устанавливает свойство; в этом случае второй результат поиска игнорируется, потому что его свойство уже было установлено при первом поиске
  • второй поиск находит значение и устанавливает свойство
  • оба поиска ничего не находят, и свойство пусто
person cosmin    schedule 09.06.2011
comment
Спасибо, Космин! Это то, что я искал! - person TimTiTim; 09.06.2011
comment
возможно, это не работает в доменах с данными в роуминге. если одна система установлена ​​как машина, а другая система установлена ​​на пользователя. но это зависит от типа данных. - person Bernd Ott; 09.06.2011
comment
Что делать, если у пользователя нет разрешений на получение HKLM? Будет ли это вызывать исключение, запрос UAC или что-то еще? - person Alex Klaus; 04.07.2013
comment
Поиск HKLM приведет к запросу UAC, если пользователь не является администратором! Если пользователь отменяет запрос, установка прерывается. Это делает этот метод бесполезным для работы с perMachine / perUser в том же пакете msi. - person Andreas; 16.08.2014

моя быстрая идея, вы запрашиваете место установки этого компонента у установщика.

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

для этого вы можете использовать MsiGetComponentPathEx функции MsiGetComponentPath:

person Bernd Ott    schedule 09.06.2011