2016-04-15 8 views
0

У меня есть 64-разрядная машина, в которой мне нужно установить службу Windows. Эта служба была создана с использованием Apache procrun, поэтому мне нужно создать определенные ключи реестра. Они должны войти в узел wow64, как я их ожидаю, но они создаются в HKLM/SOFTWARES, вложенных в узел HKLM/SOFTWARE/Wow64. Ниже представлен файл Product.wxs.Wix-ключи реестра установщика не создаются в узле Wow64

<?xml version="1.0" encoding="UTF-8"?> 
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"> 

    <Product Id="*" Name="DummyInstaller" Language="1033" Version="1.0.0.0" Manufacturer="Bryan" UpgradeCode="94D1BC64-7CC1-45DA-BD5F-8ED40980E75C"> 
    <Package InstallerVersion="200" Compressed="yes" InstallScope="perMachine" /> 

    <Property Id="JAVA_CURRENT_VERSION64"> 
     <RegistrySearch Id="JRE_CURRENT_VERSION_REGSEARCH64" Root="HKLM" Key="SOFTWARE\JavaSoft\Java Runtime Environment" Name="CurrentVersion" Type="raw" Win64="yes" /> 
    </Property> 

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

    <Feature Id="ProductFeature" Title="DummyInstaller" Level="1" > 
     <!--<ComponentGroupRef Id="NewFilesGroup" />--> 
     <ComponentRef Id="REGISTRY_A" /> 
     <ComponentRef Id="PROCRUN.EXE"/> 
    </Feature> 
    </Product> 

    <Fragment> 
    <Directory Id="TARGETDIR" Name="SourceDir"> 
     <Directory Id="ProgramFiles64Folder"> 
     <Directory Id="DummyDir" Name="DummyInstaller"> 
      <!--<Directory Id="MyProgramDir" Name="MosquittoNew" />--> 
      <Directory Id="SERVERDIR" Name="UpdaterService" > 
      <Component Id="REGISTRY_A" DiskId="1" Guid="*" Win64="yes"> 
       <RegistryKey Root="HKLM" Key="SOFTWARE\Apache Software Foundation\Procrun 2.0\UpdaterService\Parameters\Java" Action="createAndRemoveOnUninstall"> 
       <RegistryValue Type="string" Name="Classpath" Value="E:\Service\Update_Service-1.0.jar" KeyPath="yes" /> 
       <RegistryValue Type="string" Name="Jvm"  Value="C:\Program Files\Java\jdk1.8.0_25\jre\bin\server\jvm.dll" /> 
       <RegistryValue Type="multiString" Action="append" Name="Options"> 
        <MultiStringValue Type="multiString" Name="Options" Action="append">-Duser.language=en</MultiStringValue> 
        <MultiStringValue Type="multiString" Name="Options" Action="append">-Duser.region=US</MultiStringValue> 
       </RegistryValue> 
       <RegistryValue Type="integer" Name="JvmMs" Value="256" /> 
       <RegistryValue Type="integer" Name="JvmMx" Value="1024" /> 
       <RegistryValue Type="integer" Name="JvmSs" Value="4000" /> 
       </RegistryKey> 
       <RegistryKey Root="HKLM" Key="SOFTWARE\Apache Software Foundation\Procrun 2.0\UpdaterService\Parameters\Log" Action="createAndRemoveOnUninstall"> 
       <RegistryValue Type="string" Name="Path" Value="c:\logs" /> 
       <RegistryValue Type="string" Name="Level" Value="Error" /> 
       <RegistryValue Type="string" Name="Prefix" Value="UpdaterService" /> 
       <RegistryValue Type="string" Name="StdError" Value="c:\logs\stderr.txt" /> 
       <RegistryValue Type="string" Name="StdOutput" Value="c:\logs\stdout.txt" /> 
       </RegistryKey> 
       <RegistryKey Root="HKLM" Key="SOFTWARE\Apache Software Foundation\Procrun 2.0\UpdaterService\Parameters\Start" Action="createAndRemoveOnUninstall"> 
       <RegistryValue Type="string" Name="Mode" Value="jvm" /> 
       <RegistryValue Type="string" Name="Class" Value="com.kohls.kube.services.updater.UpdaterServiceMain" /> 
       <RegistryValue Type="string" Name="Params" Value="start" /> 
       </RegistryKey> 
       <RegistryKey Root="HKLM" Key="SOFTWARE\Apache Software Foundation\Procrun 2.0\UpdaterService\Parameters\Stop" Action="createAndRemoveOnUninstall"> 
       <RegistryValue Type="string" Name="Mode" Value="jvm" /> 
       <RegistryValue Type="string" Name="Class" Value="com.kohls.kube.services.updater.UpdaterServiceMain" /> 
       <RegistryValue Type="string" Name="Method" Value="stop" /> 
       <RegistryValue Type="string" Name="Params" Value="stop" /> 
       <RegistryValue Type="string" Name="StdOutput" Value="auto" /> 
       </RegistryKey> 
       <RegistryKey Root="HKLM" Key="SYSTEM\CurrentControlSet\Services\UpdaterService" Action="createAndRemoveOnUninstall"> 
       <RegistryValue Type="string" Name="Description" Value="Kube updater service performing updates and installation" /> 
       <RegistryValue Type="string" Name="DisplayName" Value="UpdaterService" /> 
       <RegistryValue Type="string" Name="ImagePath" Value="E:\Service\prunsrv.exe.exe //RS//UpdaterService" /> 
       <RegistryValue Type="string" Name="DependsOnService" Value="Tcpip Afd" /> 
       <RegistryValue Type="string" Name="ObjectName" Value="LocalSystem" /> 
       <RegistryValue Type="integer" Name="ErrorControl" Value="1" /> 
       <RegistryValue Type="integer" Name="Start" Value="2" /> 
       <RegistryValue Type="integer" Name="Type" Value="16" /> 
       </RegistryKey> 
       <RegistryKey Root="HKLM" Key="SYSTEM\CurrentControlSet\Services\UpdaterService\Parameters" Action="createAndRemoveOnUninstall"> 
       <RegistryValue Type="string" Name="Test" Value="Pass" /> 
       </RegistryKey> 
      </Component> 


      <Component Id="PROCRUN.EXE" DiskId="1" Guid="*" Win64="yes"> 
       <!-- this is the renamed procrun 64 bit executable --> 
       <File Id="prunsrv.exe" Name="prunsrv.exe" Source="E:\Service\prunsrv.exe" /> 
       <ServiceInstall Id="PROCRUN" Type="ownProcess" Name="UpdaterService" DisplayName="UpdaterService" Description="Kube 2.0 Updater Service" Start="auto" Account="LocalService" ErrorControl="normal" Arguments=" //RS//UpdaterService" /> 
       <ServiceControl Id="StartPRUNSRV" Start="install" Stop="both" Remove="uninstall" Name="UpdaterService" Wait="no" /> 
      </Component> 
      </Directory> 
     </Directory> 
     </Directory> 
    </Directory> 
    </Fragment> 


</Wix> 

Я указал параметр Win64 = yes. Для проекта установки WIX я также указал «-arch x64» в настройках проекта -> Toolset-> Additional Parameters. Тем не менее я получаю ключи реестра, созданные в обычных HKLM/SOFTWARES, а не в узле wow64. Почему это происходит? Пожалуйста посоветуй.

ответ

4

Для ключей, которые должны идти в 32 битном реестра (Wow6432Node) в 64-битном монтажником в вам необходимо указать Win64 = «нет»

Это немного сбивает с толку, но Wow6432Node на самом деле 32- разрядной части реестра на 64-разрядной машине, а НЕ 64-разрядной части.

+1

Да, WOW64 читается как (32-разрядная версия) Windows на 64-битной Windows. (Машина не имеет значения, если она может запускать 64-битные Windows.) –