#c# #wix #custom-action
#c# #wix #пользовательское действие
Вопрос:
Я должен запрограммировать пользовательское действие для установщика Windows (WiX 3), чтобы проверить учетную запись Windows для использования в службе Windows, которая будет установлена.
Использовать учетную запись LocalSystem для службы здесь не вариант, потому что служба должна работать с общими файлами Windows, заданными их UNC-путями.
Это код, который я написал до сих пор:
public class CustomActions
{
[CustomAction]
public static ActionResult VerifyServiceUser(Session session)
{
try
{
session.Log("VerifyServiceUser: Begin");
PrincipalContext context = null;
if (session["SERVICE_USERNAME"].Contains("\"))
{
context = new PrincipalContext(ContextType.Domain);
}
else
{
context = new PrincipalContext(ContextType.Machine);
}
using (context)
{
if (context.ValidateCredentials(session["SERVICE_USERNAME"], session["SERVICE_PASSWORD"]))
{
// TODO: Check the user is allowed to login as a service.
session["SERVICE_USER_VALID"] = "1";
}
}
session.Log("VerifyServiceUser: End");
}
catch (Exception ex)
{
session.Log("VerifySqlConnection: exception: {0}", ex.Message);
throw;
}
return ActionResult.Success;
}
}
Я не могу найти никакой информации о том, как проверить с помощью c #, разрешено ли пользователю входить в систему как служба. Здесь это абсолютно необходимо.
Надеюсь, вы сможете помочь мне с этой проблемой.
Комментарии:
1. Есть ли у NETWORK_SERVICE требуемые разрешения?
2. @Neil Нет, к сожалению, нет. LocalSystem и NETWORK_SERVICE могут получать доступ к общим файлам Windows только в том случае, если разрешен анонимный доступ. Конечно, это не вариант по соображениям безопасности.
3. Можете ли вы создать учетную запись специально для вашего приложения с правильными разрешениями (вроде того, что Android делает для каждого приложения).
4. @Neil Технически я мог бы это сделать, но использование уже существующего пользователя для доступа к общим файлам является жестким требованием наших клиентов. так что, к сожалению, это тоже не вариант.