2016-10-10 5 views
1

У меня есть служба Windows, написанная на C#, с использованием Topshelf.ProcessStartInfo из службы не работает, когда пользователь не зарегистрирован

Я хочу запустить сценарий Powershell, который должен запускаться как Администратор.

var workingDirectory = Path.GetDirectoryName(psScriptPath) ?? Environment.CurrentDirectory; 

var process = new Process 
{ 
    StartInfo = new ProcessStartInfo 
    { 
     FileName = @"C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe", 
     Arguments = string.Format("-ExecutionPolicy Bypass -File \"{0}\"", psScriptPath), 
     WindowStyle = ProcessWindowStyle.Normal, 
     WorkingDirectory = workingDirectory, 
     Verb = runAsAdmin ? "runas" : null, 
     UseShellExecute = true, 
     CreateNoWindow = false 
    } 
}; 

process.Start(); 

Служба работает как учетная запись администратора.

Теперь, это странная вещь. Когда служба работает на совершенно новой машине, и я запускаю код выше, ничего не происходит. Нет исключений, кроме того, что сценарий не запускается (он использует команду Transvershell Transcript, и файл журнала не создается).

Однако, если я вошел в систему, и тот же код запускается, код успешно завершается.

Я пробовал все, что я могу придумать, - разрешения файлов, LoadUserProfile = true, отключить UAC (даже в реестре), и ничего не работает. Я не могу придумать другого способа узнать, что происходит, поскольку я не могу войти на машину.

У вас есть идеи?

ответ

0

Сервисы не могут создавать интерактивные окна, если не задано определенное разрешение политики безопасности.

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

Вы уверены, что вам нужно запустить скрипт PS в интерактивном окне?

+0

Для выполнения «runas» Verb (для запуска как администратора) вам нужно использовать shell execute - если вы используете shell execute, вы не можете сделать скрытое окно. – samjudson

+0

Вот почему я спрашиваю об альтернативных решениях. Также вы должны иметь возможность настроить пользователя службы как учетную запись уровня привилегий администратора. Имейте в виду, что «работать как» в некоторых конфигурациях требует ввода учетных данных, которые для автоматической службы нарушают ваше желаемое поведение. – toadflakz

+0

Служба работает как администратор, но если сценарий явно не повышен, он не работает (из-за требований к доступу к реестру). Это факт, что он работает, когда пользователь вошел в систему, не показывая никакого пользовательского интерфейса или не требуя согласия, меня смущает. – samjudson

Смежные вопросы