2013-05-12 37 views
0

我有一個超級簡單的安裝測試是否安裝程序可以寫在HKCU \ Software \ Classes下注冊條目\ Wow6432Node(微星爲目標x86和我測試它在Win7 x64機器上)。維克斯:寫在HKCU 軟件註冊條目類 Wow6432Node

的問題是:它只是不希望在所有寫在Wow6432Node東西。以下是代碼:

<?xml version="1.0" encoding="UTF-8"?> 
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"> 
    <Product Id="f671ee4d-dd0a-4f7f-a4d1-1d181d2f3002" Name="TestWow" Language="1033" Version="1.0.0.0" Manufacturer="X" UpgradeCode="5d030587-0b6f-4a55-b090-c97a4fd22d13"> 
    <Package InstallerVersion="200" Compressed="yes" InstallScope="perUser" InstallPrivileges="limited"/> 

    <MajorUpgrade DowngradeErrorMessage="A newer version of [ProductName] is already installed." /> 
    <MediaTemplate /> 

    <Feature Id="ProductFeature" Title="XWix" Level="1"> 
     <ComponentRef Id="TestWow" /> 
    </Feature> 
    </Product> 

    <Fragment> 
    <Directory Id="TARGETDIR" Name="SourceDir" /> 
    </Fragment> 

    <Fragment> 
    <DirectoryRef Id="TARGETDIR"> 
     <Component Id="TestWow" Guid="f671ee4d-dd0a-4f7f-a4d1-1d181d2f3002"> 
     **<RegistryKey Root="HKCU" Key="Software\Classes\TestWow"> 
      <RegistryValue Name="Test" Value="Wow" Type="string" KeyPath="yes"/> 
     </RegistryKey>** 
     </Component> 
    </DirectoryRef> 
    </Fragment> 
</Wix> 

我甚至已經試過修改註冊表的部分,如:

<RegistryKey Root="HKCU" Key="Software\Classes\Wow6432Node\TestWow"> 
    <RegistryValue Name="Test" Value="Wow" Type="string" KeyPath="yes"/> 
</RegistryKey> 

它仍然無法正常工作。

非常感謝您的幫助!

回答

1

我不認爲在HKCU一樣HKLM被虛擬化。您需要確保您的組件被標記爲32位,並且將爲您處理任何虛擬化。

0

您可以使用自定義操作此鍵。 Dot NET Framework 4.0有一個特殊功能(RegistryView)從32位應用程序讀取64位註冊表。有關更多信息,請參閱this文檔。您需要編寫另一個自定義操作才能在卸載時刪除此密鑰。

自定義操作:

[CustomAction] 
    public static ActionResult CustomAction1(Session session) 
    { 
     RegistryKey key = RegistryKey.OpenBaseKey(RegistryHive.CurrentUser, RegistryView.Registry64); 
     key = key.OpenSubKey(@"Software\Classes\Wow6432Node", true); 
     key.CreateSubKey("TestWow").SetValue("Test", "Wow", RegistryValueKind.String); 

     return ActionResult.Success; 
    } 

威克斯:

<Binary Id="TestWow" SourceFile="CustomAction\TestProject\TestProject\bin\Release\TestProject.CA.dll" /> 
<CustomAction Id="TESTWOW" BinaryKey="TestWow" DllEntry="CustomAction1" Return="check" /> 

<Custom Action="TESTWOW" After="InstallInitialize" >Not Installed</Custom> 
+0

我測試了這種方法,它是爲我工作。這種方法有什麼問題嗎?如果是的話,讓我知道,我會糾正自己。 – Vinoth 2013-05-17 09:00:07

+0

是的,它工作。我現在正在使用自定義操作... – sunmast 2014-06-24 22:02:40