Установите рабочую службу .NET Core 3.0 с WiX в качестве службы Windows - PullRequest
1 голос
/ 24 сентября 2019

В новой версии .NET Core 3 я пытаюсь создать службу Windows с новым рабочим шаблоном службы.Мне нужно иметь возможность установить это с групповой политикой, и WiX, кажется, инструмент для работы.

Я создал файл .wxs и без указания раздела ServiceInstall, он отлично устанавливается.

Вот мой файл: ОБНОВЛЕНО

<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
  <Product Id="*" Name="SystemInformationService" Language="1033" Version="1.0.0.0" Manufacturer="MyCompany" UpgradeCode="f08191cf-461e-481b-a2a1-6f54d6ae5331">
    <Package InstallerVersion="200" Compressed="yes" InstallScope="perMachine" />

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

    <!-- Embed cab files, don't include them in the output -->
    <MediaTemplate EmbedCab="yes"/>

    <!-- Default WiX dialog set -->
    <UIRef Id="WixUI_Mondo" />

    <!-- License agreement -->
    <WixVariable Id="WixUILicenseRtf" Value="LicenseAgreement.rtf" />

    <Feature Id="ProductFeature" Title="SystemInformationService.Setup" Level="1">
      <ComponentGroupRef Id="ProductComponents" />
      <ComponentGroupRef Id="HeatGenerated" />
    </Feature>
  </Product>

  <Fragment>
    <Directory Id="TARGETDIR" Name="SourceDir">
      <Directory Id="ProgramFilesFolder">
        <Directory Id="INSTALLFOLDER" Name="SystemInformationService" />
      </Directory>
    </Directory>
  </Fragment>

  <Fragment>
    <ComponentGroup Id="ProductComponents" Directory="INSTALLFOLDER">
      <!-- TODO: Remove the comments around this Component element and the ComponentRef below in order to add resources to this installer. -->
      <Component Id="ProductComponent" Guid="5BB7300D-C29F-4C87-B461-AAE3AA4EB56D">
        <CreateFolder/>
        <!--<File Source="$(var.SystemInformationService.TargetPath)" />-->
        <ServiceInstall
          Id="ServiceInstaller"
          Type="ownProcess"
          Name="SystemInformationService"
          DisplayName="System Information Service"
          Description="System Information service by MyCompany"
          Start="auto"
          Vital="no"
          Account="LocalSystem"
          Interactive="no"
          ErrorControl="normal" />
        <ServiceControl
          Id="ServiceInstaller"
          Start="install"
          Stop="both"
          Remove="uninstall"
          Name="SystemInformationService"
          Wait="yes" />
      </Component>
    </ComponentGroup>
  </Fragment>
</Wix>

Теперь я пытаюсь добавить служебные компоненты, чтобы они запускались при установке.Когда я запускаю установщик после его добавления, пользовательский интерфейс установщика зависает на «Запуск службы ...».Я попытался добавить аргументы 'start', так как увидел это в другом ответе.

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

Спасибо

ОБНОВЛЕНИЕ: Я обновил файл .wxs до того, что у меня сейчас есть, и правильно установил его при развертывании, зависящем от инфраструктуры.Моя проблема заключалась в том, чтобы указать AnyCPU вместо x86.Но ... Теперь, когда я переключаюсь на автономное развертывание, я получаю ту же ошибку, что и раньше.Так что это должно быть как-то связано с тем, как я публикую ядро ​​.net.

Это мой профиль на данный момент.Когда я переключаюсь на фреймворк, установщик работает нормально и запускает службу.This is my publish profile currently. When i switch to framework dependent the installer runs fine and starts the service.

1 Ответ

0 голосов
/ 26 сентября 2019

Разобрался.Чего мне не хватало, так это того, что .exe службы должны быть определены над тегами «ServiceInstall» и «ServiceControl» в .wxs.Поэтому мне нужно было создать фильтр .xslt для фильтрации .exe из файла, сгенерированного при нагреве, а затем добавить тег в компонент Service (с keypath = 'yes') над ServiceInstall.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...