Я использую WiX 3.6 для создания установщика.Запись места установки в реестр из установщика
Одна из потребностей заключается в том, чтобы указать местоположение места установки в реестр в HKCU или HKLM в зависимости от свойства ALLUSERS.
Теперь на основе исследования я сделал я думаю, что должно работать
<RegistryKey Root="HKMU"
Key="Software\OpenCover"
Action="createAndRemoveOnUninstall">
<RegistryValue Name="Location"
Type="string"
Value="[APPLICATIONFOLDER]"
Action="write"
KeyPath="yes" />
</RegistryKey>
Проблема заключается в том, что работает только когда ALLUSERS = «» т.е. HKMU интерпретируется как HKCU.
Если я попробую установку perMachine, где ALLUSERS = 1, запись не будет записана в HKLM, как ожидалось, хотя, когда я смотрю на файл журнала установщика, я вижу вызов WriteRegistryValues.
MSI (s) (D4:14) [22:46:24:901]: Executing op: ActionStart(Name=WriteRegistryValues,Description=Writing system registry values,Template=Key: [1], Name: [2], Value: [3])
Action 22:46:24: WriteRegistryValues. Writing system registry values
MSI (s) (D4:14) [22:46:24:902]: Executing op: ProgressTotal(Total=2,Type=1,ByteEquivalent=13200)
MSI (s) (D4:14) [22:46:24:903]: Executing op: RegOpenKey(Root=-1,Key=Software\OpenCover,,BinaryType=0,,)
MSI (s) (D4:14) [22:46:24:903]: Executing op: RegAddValue(Name=ConsoleLocation,Value=C:\Program Files (x86)\OpenCover\,)
WriteRegistryValues: Key: \Software\OpenCover, Name: ConsoleLocation, Value: C:\Program Files (x86)\OpenCover\
MSI (s) (D4:14) [22:46:24:906]: Executing op: RegCreateKey()
WriteRegistryValues: Key: \Software\OpenCover, Name: , Value:
Может кто-нибудь объяснить, как достичь этой задачи мне нужно завершить
Это потому, что 32-битные процессы работают в виртуальной среде на 64-битной ОС: WOW64 (Windows на Windows). Не только перенаправляются ключи реестра, но и программные файлы и системный каталог: таким образом, 32-битный процесс на самом деле не знает, что он читает файлы из 'Program Files (x86)', он по-прежнему считает, что он работает с 'Program Files'. Установщик также подвергается этим перенаправлениям. Если вы устанавливаете 64-битный, используется 64-разрядный msiexec; в случае 32-битного пакета используется 32-разрядный msiexec. –