У меня есть служба 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 (даже в реестре), и ничего не работает. Я не могу придумать другого способа узнать, что происходит, поскольку я не могу войти на машину.
У вас есть идеи?
Для выполнения «runas» Verb (для запуска как администратора) вам нужно использовать shell execute - если вы используете shell execute, вы не можете сделать скрытое окно. – samjudson
Вот почему я спрашиваю об альтернативных решениях. Также вы должны иметь возможность настроить пользователя службы как учетную запись уровня привилегий администратора. Имейте в виду, что «работать как» в некоторых конфигурациях требует ввода учетных данных, которые для автоматической службы нарушают ваше желаемое поведение. – toadflakz
Служба работает как администратор, но если сценарий явно не повышен, он не работает (из-за требований к доступу к реестру). Это факт, что он работает, когда пользователь вошел в систему, не показывая никакого пользовательского интерфейса или не требуя согласия, меня смущает. – samjudson