Служба Windows WiX не запускается, если учетная запись не является LocalSystem

Преобразовывая приложения установки в WiX, я столкнулся со следующим явлением для приложения службы Windows, написанного на C#:

1.) При настройке основного EXE-компонента с разделом ServiceInstall, назначающим Account="LocalSystem", приложение будет успешно установлено, но не будет запущено (-start). У него нет аутентификации в базе данных, к которой он будет подключаться, так что это не удивительно.

2.) Используя установку из п.1, применяю ValidAccount и ValidPassword на вкладке "Вход" свойств для сервиса. Служба запускается и успешно работает, когда делается вручную, как и ожидалось.

3.) Возвращаясь к проекту Wix, я изменяю вышеупомянутый раздел ServiceInstall, чтобы использовать тот же Account="ValidAccount" Password="ValidPassword", что и на шаге 2, и перестраиваю файл MSI. Установка не устанавливается со следующими сообщениями журнала сразу после ServiceInstall:

InstallServices: Service: 
    Error 1923. Service 'My Service' (MyService.exe) could not be installed. Verify that you have sufficient privileges to install system services.
    MSI (s) (B4:30) [12:54:38:616]: I/O on thread 20432 could not be cancelled. Error: 1168
    MSI (s) (B4:30) [12:54:38:616]: I/O on thread 13032 could not be cancelled. Error: 1168
    MSI (s) (B4:30) [12:54:38:616]: I/O on thread 10548 could not be cancelled. Error: 1168
    MSI (s) (B4:30) [12:54:38:616]: I/O on thread 19688 could not be cancelled. Error: 1168
    MSI (s) (B4:30) [12:54:38:616]: I/O on thread 6588 could not be cancelled. Error: 1168
    MSI (s) (B4:30) [12:54:38:616]: I/O on thread 10132 could not be cancelled. Error: 1168
    MSI (s) (B4:94) [12:54:38:616]: Product: MyService -- Error 1923. Service 'My Service' (MyService.exe) could not be installed. Verify that you have sufficient privileges to install system services.

4.) Я подтвердил, что ValidAccount является членом группы локальных администраторов.

5.) Я подтвердил, что ValidAccount добавлен в политики «Вход в качестве службы».

6.) У меня нет зависимостей GAC в службе (кто-то указал, что зависимости GAC добавляются в самом конце и могут нарушить установку).

Что мне не хватает? ... даже бездействующая служба с использованием LocalSystem в порядке. Однако он не будет установлен, если я установлю учетную запись и пароль, как показано ниже.

<Fragment>
    <ComponentGroup Id = "ProductComponents" Directory = "INSTALLFOLDER">
      <Component Id = "TestService.exe" Guid = "196BB5E5-F157-4CA2-B740-0A68E1539B7C">
        <File 
          Id = "TestService.exe" 
          Source = "$(var.TestService.TargetPath)" 
          KeyPath = "yes" />
    
        <ServiceInstall 
          Id = "TestService.exe" 
          Name = "TestService.exe" 
          DisplayName = "Test Service"
          Description = "This is a test service to test installation with WiX."
          Account = "myDomain\myAccount" <!-- using myAccount without the domain yields same failure -->
          Password = "myAccountPassword"
          Arguments = "-start" 
          Start = "auto" 
          Interactive = "yes" 
          Type = "ownProcess" 
          Vital = "yes" 
          ErrorControl = "ignore" />

        <ServiceControl 
          Id = "TestService.exe" 
          Name = "TestService.exe" 
          Stop = "both" 
          Start = "install" 
          Remove = "uninstall" 
          Wait = "no" />
      </Component>
    </ComponentGroup>
  </Fragment>

Заранее спасибо,

Кент

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
0
982
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

После кучи экспериментов я пришел к ответу. На самом деле это ошибка в наборе инструментов WiX (версия 3.11.2), но я не уверен, что кто-то сделал это намеренно. Когда вы добавляете пароль в ServiceInstall, свойству Interactive ДОЛЖНО быть присвоено значение «нет».

По какой-то неизвестной причине, если вы установите значение «да», будут установлены только учетные записи, не требующие паролей.

<Fragment>
    <ComponentGroup Id = "ProductComponents" Directory = "INSTALLFOLDER">
      <Component Id = "TestService.exe" Guid = "196BB5E5-F157-4CA2-B740-0A68E1539B7C">
        <File 
          Id = "TestService.exe" 
          Source = "$(var.TestService.TargetPath)" 
          KeyPath = "yes" />
    
        <ServiceInstall 
          Id = "TestService.exe" 
          Name = "TestService.exe" 
          DisplayName = "Test Service"
          Description = "This is a test service to test installation with WiX."
          Account = "myDomain\myAccount" <!-- using myAccount without the domain yields same failure -->
          Password = "myAccountPassword"
          Arguments = "-start" 
          Start = "auto" 
          Interactive = "no" <!-- MUST BE NO WHEN PASSWORD IS USED -->
          Type = "ownProcess" 
          Vital = "yes" 
          ErrorControl = "ignore" />

        <ServiceControl 
          Id = "TestService.exe" 
          Name = "TestService.exe" 
          Stop = "both" 
          Start = "install" 
          Remove = "uninstall" 
          Wait = "no" />
      </Component>
    </ComponentGroup>
  </Fragment>

Удачи во всех начинаниях, Кент

Это наиболее вероятный ответ. Другие ответы о фактических привилегиях установки, входе в качестве службы и отсутствующих зависимостях могут быть полезными, но они, вероятно, составляют меньшинство, которое решит эту проблему.

str8ball 23.04.2021 15:46

Другие вопросы по теме