Как проверить, может ли данный пользователь Windows входить в систему как служба

#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 Технически я мог бы это сделать, но использование уже существующего пользователя для доступа к общим файлам является жестким требованием наших клиентов. так что, к сожалению, это тоже не вариант.