Jör*_*son 5 c# windows service process .net-3.5
首先,我并不想在任何类型的桌面交互。
我想做的是分离关注点。我有一个在本地系统帐户 (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
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
我终于找到了这个:Using Process.Start() to start a process as a different user from inside a Windows Service,它解决了我的问题。当然,答案中提供的代码需要大量的润色,但它似乎确实解决了我的问题。