2009-07-11 3 views
14

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

<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».

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

+0

Вы когда-нибудь находили ответ на этот вопрос? – Adkins

+0

Возможно, вы захотите проверить эту тему (см. Последнее сообщение): http://windows-installer-xml-wix-toolset.687559.n2.nabble.com/ServiceInstall-does-nothing-in-WiX-3-5 -td4972774.html Казалось бы, вам нужно установить KeyPath в файл и иметь файл в том же компоненте. – Jaans

ответ

10

Пытались ли вы ...

NT AUTHORITY\LocalService 

За этим doc ...

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

+0

Думаю, я попробовал это, но как «Local Service». Попробуй. –

+1

С учетной записью = «NT AUTHORITY \ LocalService», я получаю следующее: «Ошибка 1923. Не удалось установить сервис« Мое имя программы »(MyProgramAddon). Убедитесь, что у вас есть достаточно привилегий для установки системных служб». Дело в том, что установщик работает под управлением Windows XP. Я смущен :-( –

+0

Это работало для меня в Windows 7. – jcmcbeth

7

ссылка: ServiceControl Table

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

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

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

+0

Что такое «CA»? –

+1

@DanCsharpster: Custom Action, своего рода надстройка для заданий установщика Windows. Http://msdn.microsoft.com/en-us/library/aa368066%28v=vs.85%29.aspx Раньше они должны были быть написаны на C++, но теперь должно быть возможно записать их на C#. http://www.advancedinstaller.com/user-guide/qa-c-sharp-ca.html – RenniePet

+0

О, получи ... Спасибо! Да, я написал несколько пользовательских действия для установщика VS2010, и они работают очень хорошо, как только вы узнаете трюки, а что нет. Извините, я просто не думал превратить это в акроним. –

1

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

+0

Hi, Он работает под управлением OwnProcess. Я перепечатал код вручную, и, наверное, я забыл эту директиву. Спасибо хоть! –

2

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

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

+0

Спасибо. KeyPath = «да» на моем .exe и «no» на других исполняемых файлах исправил проблему! Это огромная помощь! – TamusJRoyce

3

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

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

1

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

3

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

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

+0

Кстати, другая проблемная ситуация заключается в том, что если ваша служба является.Net, и если вы устанавливаете сборки в GAC, то вы не можете запустить службу в установщике Windows, потому что GAC еще не был заполнен, когда происходит попытка запуска службы. – RenniePet

7

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

+4

+1 Ты! Я люблю тебя! Это почти то, что произошло со мной (одинаковый путь, другое отображаемое имя), но это привело меня к правильному пути. Спасибо! – TarkaDaal

10

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

+0

У меня была такая же проблема. Почему так? –

+3

О, ради Пита. Спасибо. – CindyH

+1

O M F G. Действительно? Мне нужен перерыв. – juFo

Смежные вопросы