WiX ServiceInstall - установка сервиса работать как текущий пользователь Windows

, Когда блокировка должна использоваться?

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

, Но действительно ли необходимо, когда приложение не отделяет никакие другие потоки?

Абсолютно нет. Это - просто игра, чтобы убить время. Однако убедитесь, что Вы неявно не используете системные потоки. Например, при использовании асинхронного ввода-вывода, можно получить обратные вызовы от случайного потока, не исходного потока.

там проблемы производительности с использованием блокировки?

Да. Они не являются очень большими в однопоточном приложении, но почему выполняют вызовы, в которых Вы не нуждаетесь?

..., если это - хороший шаблон разработки для следования в будущем [?]

, Блокировка всего волей-неволей является ужасным шаблоном разработки. Если Ваш код будет нарушен случайной блокировкой, и затем Вы действительно решаете использовать фоновый поток для некоторой работы, Вы, вероятно, столкнетесь с мертвыми блокировками. Совместное использование ресурса между несколькими потоками требует тщательного дизайна, и чем больше можно изолировать хитрую часть, тем лучше.

9
задан kjv 28 September 2009 в 15:24
поделиться

1 ответ

You need to have both the account name and password for the user you want to run the service as. I was able to accomplish this by adding a custom UI to my installer asking for a User Name and Password, and then using the supplied values for the Account and Password attributes on the ServiceInsall element.

Note that what ever account is used to run the service will need to have the Log On As Service privileged. This is not granted to users by default. I was able to use the User element from the UtilExtension schema to add this priveledge to the user. Adding the privileged to the user would only succeed if the user running the installer is an administrator.

Here's the code I used. SERVICECREDENTIALS_USERLOGIN and SERVICECREDENTIALS_PASSWORD are the properties populated from the custom UI.

<Component Id="ServiceEXE" Guid="xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx">
  <File Id="ServiceEXE" Name="YourService.exe" DiskId="1"
        Source="path\to\YourService.exe" KeyPath="yes" />
  <util:User Id="UpdateUserLogonAsService" UpdateIfExists="yes" CreateUser="no" Name="[SERVICECREDENTIALS_USERLOGIN]"
             LogonAsService="yes" />
  <ServiceInstall Id="ServiceInstall" Type="ownProcess" Vital="yes" Name="YourService"
                  DisplayName="Your Service" Description="Your Service description"
                  Start="auto" Account="[SERVICECREDENTIALS_USERLOGIN]" Password="[SERVICECREDENTIALS_PASSWORD]"
                  ErrorControl="normal" Interactive="no" />
  <ServiceControl Id="StartService" Start="install" Stop="both" Remove="uninstall" Name="YourService" Wait="yes" />
</Component>
22
ответ дан 4 December 2019 в 09:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: