2014-01-09 2 views
0

Я работаю над своим первым проектом WiX, и мне сложно получить некоторые записи в реестре для правильной работы.WiX Условные записи в реестре

Мои требования состоят в том, чтобы иметь возможность в настройке выбрать, будет ли программное обеспечение установлено на настольном компьютере или на самолете. Поскольку на самом деле нет способа обнаружить его автоматически, я создал дополнительный экран пользовательского интерфейса с некоторыми переключателями. (Это в отдельном файл)

<?xml version="1.0" encoding="utf-8"?> 
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"> 
    <Fragment> 
     <UI> 
      <Dialog Id="AircraftDesktopDlg_Custom" 
        Width="370" 
        Height="270" 
        Title="!(loc.InstallDirDlg_Title)"> 
       <Control Type="RadioButtonGroup" 
         Property="InstallType_Prop" 
         Id="InstallType" 
         Width="200" 
         Height="42" 
         X="20" 
         Y="110"> 
        <RadioButtonGroup Property="InstallType_Prop"> 
         <RadioButton Text="Aircraft" 
            Height="17" 
            Value="0" 
            Width="50" 
            X="0" 
            Y="0" /> 
         <RadioButton Text="Desktop" 
            Height="17" 
            Value="1" 
            Width="200" 
            X="0" 
            Y="20" /> 
        </RadioButtonGroup> 
       </Control> 
      </Dialog> 
     </UI> 
    </Fragment> 
</Wix> 

Листинг 1 - Радио Кнопка

Тогда, в моем главном файле Product.wxs, у меня есть следующий.

<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"> 
    <Product> 
    <Property Id="InstallType_Prop" 
       Value="0"/> 
    . 
    . 
    . 
    <DirectoryRef Id="TARGETDIR"> 
     <Component Id="AircraftRegistryEntries" 
        Guid="E251C37B-2A4F-46D4-8E9F-24C66FB107E9"> 
      <Condition>InstallType_Prop = 0</Condition> 
      <RegistryKey Root="HKLM" 
         Key="Software\Company\Product\v1.0" 
         Action="createAndRemoveOnUninstall"> 
       <RegistryValue Type="integer" 
           Name="OfflineMode" 
           Value="0"/> 
       <RegistryValue Type="integer" 
           Name="Simulator" 
           Value="0"/> 
      </RegistryKey> 
     </Component> 
     <Component Id="DesktopRegistryEntries" 
        Guid="CACDBBB6-BCAA-4B71-92BE-C762325580A3"> 
      <Condition>InstallType_Prop = 1</Condition> 
      <RegistryKey Root="HKLM" 
         Key="Software\Company\Product\v1.0" 
         Action="createAndRemoveOnUninstall"> 
       <RegistryValue Type="integer" 
           Name="OfflineMode" 
           Value="1"/> 
       <RegistryValue Type="integer" 
           Name="Simulator" 
           Value="0"/> 
      </RegistryKey> 
     </Component> 
    </DirectoryRef> 
    . 
    . 
    . 
    <Feature Id='Complete' 
      Level='1'> 
     <ComponentRef Id='AircraftRegistryEntries'/> 
     <ComponentRef Id='DesktopRegistryEntries'/> 
    </Feature> 
</Product> 
</Wix> 

Листинг 2 - Свойство и реестр запись

Так как вы можете видеть, кнопка радио привязана к InstallType_Prop.

То, что я пытаюсь выполнить, - это установить соответствующую запись в реестре, в зависимости от выбранного переключателя. Я вставил эти условия в компоненты реестра, но они, похоже, ничего не делают.

Мне даже не нужно так поступать - мне нужно, чтобы параметр OfflineMode был установлен в 1, если выбран рабочий стол, и установите значение 0, если выбрано Aircraft.

Я сейчас в недоумении, и я думаю, что решение находится где-то с пользовательским действием или с порядком, в котором условия оцениваются, но я не совсем уверен.

Любая помощь приветствуется.

ответ

0

IMO Обычный способ сделать это состоит в том, чтобы сгруппировать различные компоненты в (скажем) две функции, по одному на тип системы, затем пользователи видят стандартное дерево признаков, где они выбирают подходящий. В случае записей в реестре у вас будет компонент (для записи реестра) для каждого типа установки, один из них будет в одной функции, другой - в другой.

Смежные вопросы