首先,我不尝试与桌面进行任何形式的互动。
我要做的是分开顾虑。我有一个在本地系统帐户(LSA)下运行的服务。有时,我需要在不同的帐户下执行流程。
我正在使用System.Diagnostics.Process
。这是我到目前为止尝试过的:
对我不起作用的情况会引发一个“拒绝访问”的Win32Exception。我已经授予有问题的用户帐户作为服务登录的权利,但它没有任何区别。
为了好玩,我也尝试了这些场景:
Process.Exited
会立即被触发。这是我正在使用的代码:
var pi = new ProcessStartInfo {
CreateNoWindow = true,
WindowStyle = ProcessWindowStyle.Hidden,
UseShellExecute = false,
ErrorDialog = false,
RedirectStandardError = false,
RedirectStandardInput = false,
RedirectStandardOutput = false,
FileName = @"C:\Path\To\SomeApplication.exe",
Arguments = @"Some arguments",
UserName = "SomeUserName",
Domain = "SomeDomain",
Password = SecureStringUtils.Convert("SomePassword")
};
var process = new Process();
process.StartInfo = pi;
process.Start(); // Throws when run as a service
有什么想法吗?
答案 0 :(得分:4)
我终于发现了这个:Using Process.Start() to start a process as a different user from within a Windows Service,它解决了我的问题。当然,答案中提供的代码需要大量的抛光,但它似乎确实解决了我的问题。