2013-05-12 1 views
0

설치 프로그램이 HKCU \ Software \ Classes \ Wow6432Node 아래에 등록 항목을 쓸 수 있는지 테스트하는 간단한 설치 프로그램이 있습니다 (msi는 대상 x86이며 테스트 중입니다). Win7 x64 시스템에서).Wix : HKCU Software Classes 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에는 32 비트 응용 프로그램에서 64 비트 레지스트리를 읽는 특수 기능 (RegistryView)이 있습니다. 자세한 내용은 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

+0

네, 효과가있었습니다. 지금 사용자 지정 작업을 사용 중입니다 ... – sunmast