Wix 3.11 - установщик не может запустить службу - PullRequest
0 голосов
/ 27 апреля 2020

Может кто-нибудь помочь мне выяснить, почему мой Windows сервис не запускается.

Когда я устанавливаю его с installutil, он работает отлично. Я решил использовать wix для создания установщика для конечного пользователя, но он не запустится.

Вот мой код

<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
    <Product Id="*" Name="IWErpnextPoll" Manufacturer="IWW" Language="1033" Version="1.0.0.0" UpgradeCode="ccc3c2fe-d20f-45ce-b978-4dc7c84ce6c8">
        <Package InstallerVersion="200" Compressed="yes" InstallScope="perMachine" />

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

        <Feature Id="ProductFeature" Title="IWERPNextPoll_Setup" Level="1">
            <ComponentGroupRef Id="ProductComponents" />
        </Feature>
    </Product>

    <Fragment>
        <Directory Id="TARGETDIR" Name="SourceDir">
            <Directory Id="ProgramFilesFolder">
                <Directory Id="INSTALLFOLDER" Name="IWErpnextPoll" />
            </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">
                <File Source="$(var.IWErpnextPoll.TargetPath)" />
                <ServiceInstall Id="ServiceInstaller" Name="IWErpnextPoll" Type="ownProcess" Vital="yes" DisplayName="ERPNext2Sage" Description="A background service." Start="auto" Account=".\LocalSystem" ErrorControl="normal" Interactive="no" />
                <ServiceControl Id="StartService" Name="IWErpnextPoll" Stop="both" Start="install" Remove="uninstall" Wait="yes" />
            </Component>
        </ComponentGroup>
    </Fragment>
</Wix>

Установщик выдает эту ошибку:

Service 'IWErpnextPoll' (IWErpnextPoll) failed to start. Verify that you have sufficient privileges to start system services

Я запустил в командной строке следующее:

msiexec /i IWERPNextPoll_Setup /l*v log.txt

но (мои нетренированные глаза) не нашел ничего, что показалось в самом файле журнала.

Сервис, который я написал, - мой первый опыт в C#. Я буду очень рад получить любые указатели.

Ответы [ 2 ]

0 голосов
/ 28 апреля 2020

Ответ @Christopher Painter и комментарии к моему вопросу привели меня к проблеме.

Проблема заключалась в том, что я не включил зависимости моего проекта в product.wsx. Мне пришлось добавить вот так ...

...
<Component Id="Serilog.dll">
    <File Source="$(var.IWErpnextPoll.TargetDir)Serilog.dll" />
</Component>
<Component Id="Serilog.Settings.AppSettings.dll">
    <File Source="$(var.IWErpnextPoll.TargetDir)Serilog.Settings.AppSettings.dll" />
</Component>
<Component Id="Serilog.Sinks.File.dll">
    <File Source="$(var.IWErpnextPoll.TargetDir)Serilog.Sinks.File.dll" />
</Component>
<Component Id="RestSharp.dll">
    <File Source="$(var.IWErpnextPoll.TargetDir)RestSharp.dll" />
</Component>
...

После этого все заработало как положено

0 голосов
/ 27 апреля 2020

99,99% времени это проблема с сервисом.

Пара профессиональных советов.

1) Не создавайте элемент ServiceControl для первых нескольких сборок, пока не узнаете, что это solid. Протестируйте сервис после установки.

2) Если вы делаете это автором, оставьте его в диалоговом окне «Не удалось запустить» и запустите профилирование. Запустите EXE из командной строки и посмотрите, нет ли в нем зависимостей или выдается ошибка. Имейте много регистрационного кода в сервисе, чтобы понять, что не так.

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

Об этом точно скажет только профилирование / отладка.

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