Если я установил для корневого атрибута значение HKMU в RegistryKey, как мне узнать, где искать (RegistrySearch root = HKCU или HKLM) в моем реестре для моего RegistryValue. Или как я могу динамически установить корневое значение?
wix: установка RegistryKey Root HKMU
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
Спасибо, Космин! Это то, что я искал!
- person TimTiTim; 09.06.2011
возможно, это не работает в доменах с данными в роуминге. если одна система установлена как машина, а другая система установлена на пользователя. но это зависит от типа данных.
- person Bernd Ott; 09.06.2011
Что делать, если у пользователя нет разрешений на получение HKLM? Будет ли это вызывать исключение, запрос UAC или что-то еще?
- person Alex Klaus; 04.07.2013
Поиск HKLM приведет к запросу UAC, если пользователь не является администратором! Если пользователь отменяет запрос, установка прерывается. Это делает этот метод бесполезным для работы с perMachine / perUser в том же пакете msi.
- person Andreas; 16.08.2014
моя быстрая идея, вы запрашиваете место установки этого компонента у установщика.
это можно сделать через api установщика. если вы используете материалы по запросу, вам все равно придется запросить установщик.
для этого вы можете использовать MsiGetComponentPathEx функции MsiGetComponentPath:
person
Bernd Ott
schedule
09.06.2011