我有一个使用Topshelf用C#编写的Windows服务。
我想启动一个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();
该服务作为管理员帐户运行。
现在,这是奇怪的事情。当服务在一台全新的机器上运行时,我触发上面的代码没有任何反应。抛出没有例外,脚本似乎没有运行(它使用Powershell Transcript命令,并且没有创建日志文件)。
但是 - 如果我登录到计算机,并且触发了相同的代码,则代码会成功运行。
我已经尝试了我能想到的一切 - 文件权限,LoadUserProfile = true,禁用UAC(甚至在注册表中),似乎没有任何工作。我无法想到任何其他方法可以找到正在发生的事情,因为我无法登录机器。
任何想法?
答案 0 :(得分:0)
除非设置了安全策略中的特定权限,否则服务无法创建交互式Windows。
这也是一种潜在的安全风险,因为服务设计并不是互动的。
您确定需要在交互式窗口中运行PS脚本吗?