2016-11-17 6 views
1

Я создаю x64 msi. У меня есть некоторые значения реестра для установки. В Wix я использую следующий код.Запись реестра не работает правильно в Wix

<Component Id="RegistryEntries1" Guid="{GUID1}" Win64="yes"> 
    <RegistryKey Root="HKLM" 
       Key="Software\Microsoft\Windows\CurrentVersion\Authentication\Credential Providers\{FF.....}" 
       Action="createAndRemoveOnUninstall"> 
     <RegistryValue Type="string" Value="SomeName" KeyPath="yes"/> 
    </RegistryKey> 
    </Component> 


    <Component Id="RegistryEntries2" Guid="{GUID2}" Win64="yes"> 
    <RegistryKey Root="HKCR" 
        Key="CLSID\{FF.....}" 
        Action="createAndRemoveOnUninstall"> 
     <RegistryValue Type="string" Value="SomeName" KeyPath="yes"/> 
    </RegistryKey> 
    </Component> 


    <Component Id="RegistryEntries3" Guid="{GUID3}" Win64="yes"> 
    <RegistryKey Root="HKCR" 
        Key="CLSID\{{FF.....}\InprocServer32" 
        Action="createAndRemoveOnUninstall"> 
     <RegistryValue Type="string" Value="SomeName.dll" KeyPath="no"/> 
     <RegistryValue Type="string" Name="ThreadingModel" Value="Apartment" KeyPath="yes"/> 
    </RegistryKey> 
    </Component> 

Значения устанавливаются в реестре, но мое приложение работает некорректно.

Когда я установил значения реестра, используя файл reg, приложение работает правильно.

И мой SomeName.dll в System32

Windows Registry Editor Version 5.00 

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Authentication\Credential Providers\{FF.....}] 
@="SomeName" 

[HKEY_CLASSES_ROOT\CLSID\{FF.....}] 
@="SomeName" 

[HKEY_CLASSES_ROOT\CLSID\{FF.....}\InprocServer32] 
@="SomeName.dll" 
"ThreadingModel"="Apartment" 

Есть ли какие-либо проблемы в моем коде Wix.

+0

Возможно, ваше приложение работает как услуга или как другая учетная запись? – PhilDW

+0

@PhilDW Да. мое приложение является установщиком службы. –

ответ

2

Вероятно, проблема заключается в том, что HKCR является виртуальным ключом, в вашем случае - слияние HKLM \ Software \ Classes и HKCU \ Software \ Classes. Это объясняет:

https://msdn.microsoft.com/en-us/library/windows/desktop/ms724475(v=vs.85).aspx

так что-то работает с учетной записью локальной системы видит ни один из них. Если вы запустите regedit с системной учетной записью, вы не увидите своих классов HKCR, если это то, что происходит.

Так что, если вы делаете записи в HKLM \ Software \ Classes, я думаю, ваш код службы/сервис-установщика увидит их. Классы ServiceInstaller часто запускаются как пользовательские действия с системной учетной записью. Если вы используете WiX, вам не нужны классы ServiceInstaller (возможно, вы перенесли из установок Visual Studio), поскольку ServiceInstall и ServiceControl выполнит эту работу.

+0

Спасибо .... Работал ... –