2016-11-17 5 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は
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" 

私のウィックスコードのいずれかの問題があるのSystem32

です。

+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を使用している場合は、ServiceInstallとServiceControlがその作業を行うため、ServiceInstallerクラスは必要ありません(おそらくVisual Studioの設定から移行した)。

+0

ありがとう....働いた... –

関連する問題