WiX: установка сервиса как LocalService - PullRequest
15 голосов
/ 12 июля 2009

Я пытаюсь установить приложение через WiX 3.0. Точный код:

<File Id="ServiceComponentMain" Name="$(var.myProgramService.TargetFileName)" Source="$(var.myProgramService.TargetPath)" DiskId="1" Vital="yes"/>

<!-- service will need to be installed under Local Service -->
<ServiceInstall
                        Id="MyProgramServiceInstaller"
                        Type="ownProcess"
                        Vital="yes"
                        Name="MyProgramAddon"
                        DisplayName="[removed]"
                        Description="[removed]"
                        Start="auto"
                        Account="LocalService"
                        ErrorControl="ignore"
                        Interactive="no"/>
<ServiceControl Id="StartDDService" Name="MyProgramServiceInstaller" Start="install" Wait="no" />
<ServiceControl Id="StopDDService" Name="MyProgramServiceInstaller" Stop="both" Wait="yes" Remove="uninstall" />

Дело в том, что по какой-то причине LocalService завершается ошибкой на этапе «Установка служб», и если я изменяю его на «LocalSystem», то время установки при попытке запуска службы заканчивается.

Служба запускается нормально вручную и при запуске системы, и для всех целей отлично работает. Я слышал, что есть проблемы с тем, чтобы сервисы работали прямо под LocalService, но Google не очень помогает, так как ответы всех «заставили его работать kthx».

Просто хотите настроить и запустить эту службу во время установки, вот и все. Любая помощь? Спасибо!

Ответы [ 10 ]

11 голосов
/ 01 ноября 2012

Убедитесь, что окно services.msc закрыто при установке

10 голосов
/ 12 июля 2009

Вы пробовали ...

NT AUTHORITY\LocalService 

За это документ ...

... но имя учетной записи должно быть NT AUTHORITY \ LocalService при звонке CreateService, независимо от локаль, или неожиданные результаты могут происходят.

8 голосов
/ 24 июля 2009

ссылка: Таблица ServiceControl

В документации MSI для таблицы ServiceControl указано, что «Имя» является строковым именем службы. В вашем фрагменте кода для имени ServiceControl 'Name' установлено значение 'ID' для ServiceInstall, а не его 'Name'. Итак, ваши элементы ServiceControl должны выглядеть так:

<ServiceControl Id="StartDDService" Name="MyProgramAddon" Start="install" Wait="no" />
<ServiceControl Id="StopDDService" Name="MyProgramAddon" Stop="both" Wait="yes" Remove="uninstall" />
7 голосов
/ 22 мая 2011

Вот еще один случай, когда служба локальной системы может не установить с ошибкой 1923: если у вас уже установлена ​​другая служба с тем же DisplayName (но с другим внутренним именем службы, путем и т. Д.). Я только что это случилось со мной.

3 голосов
/ 04 февраля 2011

Я просто повторю совет aristippus303: не пытайтесь запустить службу с помощью установщика Windows и не устанавливайте учетную запись, просто примите значение по умолчанию LocalSystem во время установки. Попытка сделать что-то еще слишком проблематично. Установщик Windows ожидает, что служба запустится, и есть слишком много вещей, которые могут пойти не так, как с разрешениями и правами, настройками брандмауэра, отсутствующими файлами и т. Д., Так что установщик Windows останавливается или завершается с ошибкой и ваша установка не удалась.

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

3 голосов
/ 26 мая 2010

У меня была такая же проблема. Оказывается, у меня была опечатка в <ServiceControl Id="StartService" Name="MyServiceName", где мой Name не совпадал с именем службы, которое я указал в проекте службы, когда создавал его.

Это также была проблема с моим удалением службы.

3 голосов
/ 26 июля 2009

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

Кстати, используя LocalSystem и сервис, запущенный вручную, работает нормально. Никогда не заставлял работать другие варианты.

2 голосов
/ 15 января 2010

Я потратил некоторое время на изучение этого и обнаружил, что это связано с тем, что у меня установлен атрибут keypath для компонента, а не для файла. Мой файл wix теперь выглядит так:

<Component Id="comp_WF_HOST_18" DiskId="1" KeyPath="no" Guid="3343967A-7DF8-4464-90CA-7126C555A254">
    <File Id="file_WF_HOST_18" Checksum="yes" Source="C:\Projects\GouldTechnology\Infrastructure\WorkflowHost\WorkflowHost\bin\Release\WorkflowHost.exe" KeyPath="yes"/>

      <ServiceInstall
                 Id="workflowHostInstaller"
                 Type="ownProcess"
                 Vital="yes"
                 Name="WorkflowHost"
                 DisplayName="Workflow Host"
                 Start="demand"
                 Account="[WORKFLOW_HOST_USER_ACCOUNT]"
                 Password="[WORKFLOW_HOST_USER_PASSWORD]"
                 ErrorControl="critical"
                 Interactive="no"/>
    <ServiceControl Id="StartWFService" Name="workflowHostInstaller" Start="install"  Stop="both" Remove="both" Wait="no" />

</Component>

Теперь мне просто нужно разобраться, как дать ему правильные разрешения ...

1 голос
/ 13 октября 2010

У нас была такая же проблема, возникающая только на машинах с Windows XP, где служба не могла быть установлена. В итоге мы обнаружили, что в XP настройка имени из файла WiX игнорируется и вместо этого используется имя службы, установленное в коде C #. У нас случилось имя в коде, который содержал пробел, т.е. е. «Blah Blah Service», когда ему было присвоено то же имя, что и у файла WiX, используемого в Windows 7, это работало хорошо.

1 голос
/ 10 ноября 2009

Обратите внимание, что в документации по элементу ServiceInstall написано об атрибуте Account, что «Учетная запись, под которой запускается служба. Действительно только в том случае, если ServiceType является ownProcess.». В вашем примере вы не указали тип сервиса ownProcess, который может быть проблемой.

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