Установщик не может запустить службу под пользователем - PullRequest
0 голосов
/ 14 июля 2011

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

  1. Местная служба
  2. Локальная система
  3. Сетевая система
  4. Аккаунт пользователя

Когда я выбираю пользователя и во время установки ввожу домен \ учетная запись администратора + pwd, служба не может быть запущена.

Когда я выбираю Local Service, все начиналось нормально После этого я могу вручную изменить учетную запись на ту же учетную запись домена \ администратора, и все началось нормально. Почему такое разное поведение? Как запустить сервис во время установки под учетной записью любого пользователя?

Ответы [ 3 ]

2 голосов
/ 14 июля 2011

Посмотрите на пользовательский элемент Util Extensions. Вы можете установить для атрибута CreateUser значение no, для атрибута Name - значение [PROPERTY], которое вы используете в своем пользовательском интерфейсе для ввода имени пользователя, а для атрибута LogonAsService - yes. Это заставит WiX предоставить вашему пользователю право LogOnAsService без необходимости написания специального действия для вызова ntrights.exe.

Вот образец по запросу:

<?xml version="1.0" encoding="utf-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi" xmlns:util="http://schemas.microsoft.com/wix/UtilExtension">
  <Product Id="*" Name="Setup" Language="1033" Version="1.0.0.0" Manufacturer="test" UpgradeCode="5c6b0f52-d024-4f1b-bfae-2dbb96b3ef15">
    <Package InstallerVersion="200" Compressed="yes" InstallScope="perMachine" />
    <MajorUpgrade DowngradeErrorMessage="A newer version of [ProductName] is already installed." />
    <MediaTemplate EmbedCab="yes" />
    <UIRef Id="WixUI_Minimal" />
    <Feature Id="ProductFeature" Title="Setup" Level="1">
      <ComponentRef Id="serviceComponent" />
    </Feature>
    <Directory Id="TARGETDIR" Name="SourceDir">
      <Directory Id="ProgramFilesFolder">
        <Directory Id="INSTALLFOLDER" Name="Setup">
          <Component Id="serviceComponent" Guid="380bbddd-daa7-0744-517b-37da768f5570">
            <File Id="serviceFile" Source="$(var.WindowsService.TargetPath)" KeyPath="yes" />
            <ServiceInstall Id="serviceInstall" Name="WindowsService" DisplayName="WindowsService" Start="auto" Type="ownProcess" ErrorControl="ignore" Account=".\serviceaccount" Password="p2Ekutrekac34ph2" />
            <ServiceControl Id="serviceControl" Name="WindowsService" Start="install" Stop="both" Remove="both" Wait="no" />
              <util:User Id="user" CreateUser ="yes" Name ="serviceaccount" Password="p2Ekutrekac34ph2" LogonAsService="yes" UpdateIfExists="yes" RemoveOnUninstall="yes" PasswordNeverExpires="yes" FailIfExists="no" Domain="[ComputerName]" CanNotChangePassword="yes" Disabled="no" PasswordExpired="no"/> 
          </Component>
        </Directory>
      </Directory>
    </Directory>
  </Product>
</Wix>
1 голос
/ 12 декабря 2016

В случае, если кто-то задается вопросом, почему код от @Christopher Painter, его ответ не сработал.У меня был похожий код, который не работал с ошибкой 1923.

Ошибка 1923. Не удалось установить службу '' ().Убедитесь, что у вас достаточно прав для установки системных служб.MSI (s) (10:08) [15: 55: 00: 161]: Продукт: '' (64 бит) - Ошибка 1923. Не удалось установить службу '' ().Убедитесь, что у вас достаточно прав для установки системных служб.

Пока я не обнаружил, что диалоговое окно services.msc необходимо закрыть во время установки .

Не знаю, почему, но это работает.Во время разработки services.msc был открыт все время, поэтому я никогда не замечал.

1 голос
/ 14 июля 2011

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

Если настройка этой политики работает, вам также нужно сделать это динамически во время установки. Решением является использование ntrights.exe в качестве настраиваемого действия. Это пользовательское действие может использовать ваши пользовательские свойства, которые содержат информацию об учетной записи пользователя.

...