使用CreateProcessAsUser [C#]为模拟用户运行服务

时间:2009-09-16 06:03:40

标签: c#

有一个LocalSystem服务(Job.exe)执行某个绝对必需的任务(密钥),这个服务是为所有用户运行的(至少在他们登录时)。 还有另一个LocalSystem服务(Serv.exe),它使用CreateProcessAsUser(...)作为不同的(管理员)用户启动进程。 有2个帐户,USER(登录的是一个帐户)和ADMIN。

所以这就是场景...... 用户登录到USER帐户(非管理员),LocalSystem服务(Job.exe和Serv.exe)都启动并正常工作......然后在某个时刻Serv.exe使用ADMIN帐户调用CreateProcessAsUser()为了启动管理任务(注意USER当前已登录)。

到目前为止一切正常 - 但现在出现问题 - 由ADMIN下的CreateProcessAsUser(...)运行的进程不受LocalSystem服务JOB.exe的限制 - 例如,如果JOB.exe监视文件系统更改如果我在ADMIN下使用CreateProcessAsUser(...)启动任务来更改文件,我会假设JOB.exe会记录这些 - 但它不会...

所以看起来JOB.exe在使用CreateProcessAsUser(...)启动时不会在ADMIN帐户的上下文中运行,这对我来说很重要 - 我需要确保JOB.exe LocalSystem服务绝对是绝对的运行 - 即使使用CreateProcessAsUser(...)......

我有什么办法可以解决这个问题吗?任何帮助将非常感激。 我可以加载环境吗?轮廓?什么东西可以踢入JOB.exe,以便它真正起作用?

谢谢,

1 个答案:

答案 0 :(得分:0)

您可以尝试将该进程作为管理员运行,方法是将其放入exe中,然后使用C#Process对象启动它,使用类似下面的代码:


process.StartInfo.FileName = toolFilePath;            
process.StartInfo.Arguments = parameters;            
process.StartInfo.WorkingDirectory = Path.GetDirectoryName(toolFilePath);            
process.StartInfo.Domain = domain;           
process.StartInfo.UserName = userName;            
process.StartInfo.Password = decryptedPassword;            
process.Start();           
process.WaitForExit();
process.Close();