WiX: установка службы как LocalService

Я пытаюсь получить мое приложение установщиком через 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 действительно не помогает, так как все ответы "получили его работу kспасибо".

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

Ответы

Ответ 1

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

NT AUTHORITY\LocalService 

В этом doc...

... но имя учетной записи должно быть NT АВТОРИТЕТ \LocalService, когда вы звоните CreateService, независимо от локаль или неожиданные результаты могут происходят.

Ответ 2

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

Ответ 3

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

В документации MSI для ServiceControl Table указано, что "Имя" является строковым именем службы. В вашем программном snipet ваше имя 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" />

Ответ 4

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

Ответ 5

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

BTW с использованием LocalSystem, и работа с ручным запуском работает нормально. Никогда не было никаких других вариантов работы.

Ответ 6

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

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

Ответ 7

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

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

Ответ 8

Я потратил некоторое время на изучение этого и обнаружил, что это потому, что у меня был атрибут 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>

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

Ответ 9

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

Ответ 10

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