Установщик WIX сохраняет режим запуска для служб при крупном обновлении

Я пытаюсь создать установщик WiX, который для ряда служб (на данный момент 8) предлагает в CustomizeDlg возможность (функцию) для копирования и (если она включена) для установки службы на целевой машине. Одно большое требование заключается в том, что для всех "установленных" сервисов режим запуска (автоматический, ручной и т. Д.) Должен быть сохранен во время основного обновления. До сих пор я пытался расширить эти службы (exe), чтобы они принимали больше команд в командной строке. Две новые команды - "-preserve" и "-restore". Эти команды позволяют мне сохранять текущее состояние в пути реестра (не в разделе "УСЛУГИ") и восстанавливать его оттуда. Затем я добавил CustomAction в свой установщик, который использует эти команды. Это работает очень хорошо. Примите за один большой глюк:когда я (после установки) снова запускаю программу установки, она запоминает, какие службы (exe) были скопированы на машину, но не помнит, были ли установлены эти службы. Все они отмечают этот вариант знаком "X". Я умоляю головой об стену, но не могу найти решения. Конечно, я мог бы использовать ServiceInstall, но понятия не имею, как сохранить режим запуска. Кстати: остановка и запуск служб (например, до и после обновления) из соображений безопасности всегда выполняется вручную!Конечно, я мог бы использовать ServiceInstall, но понятия не имею, как сохранить режим запуска. Кстати: остановка и запуск служб (например, до и после обновления) из соображений безопасности всегда выполняется вручную!Конечно, я мог бы использовать ServiceInstall, но понятия не имею, как сохранить режим запуска. Кстати: остановка и запуск служб (например, до и после обновления) из соображений безопасности всегда выполняется вручную!

Вот урезанная "примерная версия" установщика:

<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
    <Product Id="*" Name="WiXDemoSetup" Language="1033" Version="1.0.0.0" Manufacturer="DemoCompany" UpgradeCode="455a350e-aa28-4f55-a0cf-62b3de9528da">

    <Package InstallerVersion="200" Compressed="yes" InstallScope="perMachine" />

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

    <MediaTemplate EmbedCab="yes" />

    <UIRef Id="WixUI_RBS" />

    <Feature Id="ProductFeature" Title="WiXDemoSetup" Level="1"  ConfigurableDirectory="INSTALLLOCATION" >
            <ComponentGroupRef Id="ProductComponents" />

      <Feature Id="ServiceA" Title="Install ServiceA" Level="1">
        <ComponentRef Id='cmpServiceA' />
        <Feature Id="ServiceA_Srvc" Title="Install ServiceA as Service"  Level='3'>
        </Feature>
      </Feature>

      <Feature Id="ServiceB" Title="Install ServiceB"  Level='2'>
        <ComponentRef Id='cmpServiceB' />
        <Feature Id="ServiceB_Srvc" Title="Install ServiceB as Service"  Level='3'>
        </Feature>
      </Feature>

    </Feature>

    <InstallExecuteSequence>

      <Custom Action="cua_RollbkServiceA"   Before="cua_InstalServiceA" ></Custom>
      <Custom Action="cua_RollbkServiceB"   Before="cua_InstalServiceB" ></Custom>

      <Custom Action="cua_UninstServiceA"   After="InstallInitialize">(NOT UPGRADINGPRODUCTCODE) AND (REMOVE="ALL")</Custom>
      <Custom Action="cua_UninstServiceB"   After="InstallInitialize">(NOT UPGRADINGPRODUCTCODE) AND (REMOVE="ALL")</Custom>

      <Custom Action="cua_InstalServiceA"   Before="InstallFinalize"><![CDATA[&ServiceA_Srvc=3]]></Custom>
      <Custom Action="cua_InstalServiceB"   Before="InstallFinalize"><![CDATA[&ServiceB_Srvc=3]]></Custom>

    </InstallExecuteSequence>

    <CustomAction Id="cua_RollbkServiceA"   Directory="INSTALLLOCATION" ExeCommand="&quot;[INSTALLLOCATION]ServiceA.exe&quot; -remove" Execute="rollback" Return="ignore" Impersonate="no" />
    <CustomAction Id="cua_RollbkServiceB"   Directory="INSTALLLOCATION" ExeCommand="&quot;[INSTALLLOCATION]ServiceB.exe&quot; -remove" Execute="rollback" Return="ignore" Impersonate="no" />

    <CustomAction Id="cua_UninstServiceA"   Directory="INSTALLLOCATION" ExeCommand="&quot;[INSTALLLOCATION]ServiceA.exe&quot; -preserve -remove" Execute="deferred" Return="ignore" Impersonate="no" />
    <CustomAction Id="cua_UninstServiceB"   Directory="INSTALLLOCATION" ExeCommand="&quot;[INSTALLLOCATION]ServiceB.exe&quot; -preserve -remove" Execute="deferred" Return="ignore" Impersonate="no" />

    <CustomAction Id="cua_InstalServiceA"   Directory="INSTALLLOCATION" ExeCommand="&quot;[INSTALLLOCATION]ServiceA.exe&quot; -install -restore" Execute="deferred" Return="check" Impersonate="no" />
    <CustomAction Id="cua_InstalServiceB"   Directory="INSTALLLOCATION" ExeCommand="&quot;[INSTALLLOCATION]ServiceB.exe&quot; -install -restore" Execute="deferred" Return="check" Impersonate="no" />

  </Product>

    <Fragment>
        <Directory Id="TARGETDIR" Name="SourceDir">
            <Directory Id="ProgramFiles64Folder">
                <Directory Id="INSTALLLOCATION" Name="WiXDemoSetup" />
            </Directory>
        </Directory>
    </Fragment>

    <Fragment>
        <ComponentGroup Id="ProductComponents" Directory="INSTALLLOCATION">
      <Component Id="cmpFirstDll" Guid="{33CD4A77-C0F4-4BCC-A6D2-4D5C0CD84983}">
        <File Id="filecmpFirstDll" KeyPath="yes" Source="$(var.SourceFolder)\PdfLib.dll" />
      </Component>
    </ComponentGroup>
    </Fragment>

  <Fragment>
      <Component Id="cmpServiceA" Guid="{B299F42F-DA1E-44FA-AC9E-63CDDD103DAC}" Directory="INSTALLLOCATION">
        <File Id="filecmpServiceA" KeyPath="yes" Source="$(var.SourceFolder)\ServiceA.exe" />
      </Component>
  </Fragment>

  <Fragment>
    <Component Id="cmpServiceB" Guid="{0CAFAC2F-3302-4D3E-95C1-6DC954247CE8}" Directory="INSTALLLOCATION">
      <File Id="filecmpServiceB" KeyPath="yes" Source="$(var.SourceFolder)\ServiceB.exe" />
    </Component>
  </Fragment>

</Wix>

0 ответов

Другие вопросы по тегам