LocalSystem服务如何以用户身份运行应用程序[C#]?

时间:2009-09-14 16:19:17

标签: c# .net

在我的本地计算机上,我正在运行一个名为Serv.exe的LocalSystem管理c#服务,它执行各种任务。它需要执行的任务之一是在USER帐户(当前已登录)下启动应用程序,而不是以管理员身份启动 - 因为这违反了安全性。

显而易见的解决方案是在启动应用程序时进行简单的模拟 - 但是我遇到了一个小问题,而我没有获得用户帐户凭据(用户名和密码)的特权,因此无法以传统方式进行冒充。 / p>

因此,使用在登录到用户帐户时作为LocalSystem运行的C#服务 - 无论如何我可以作为该用户启动应用程序吗?

来自评论:
会发生什么是应用程序本身要求服务完成一项工作然后终止。当工作成功时,应用程序必须重新启动 - 我认为最好的方法是让服务在完成后重新启动...

非常感谢任何帮助。 谢谢,

2 个答案:

答案 0 :(得分:1)

您可以使用Windows Scheduler以用户身份启动应用。

看看这个包装器 - http://www.firatatagun.com/c-windows-task-scheduler-wrapper-classes-c-sharp/2010/04/22/

然后您只需创建一个计划任务即可立即运行您的软件,之后您可以在2秒后删除此冗余任务。

示例代码:

        using (TaskService ts = new TaskService())
        {
            // Create a new task
            const string taskName = "RunMyProcessNowAsUser";
            Task t = ts.AddTask(taskName,
               new TimeTrigger() { StartBoundary = DateTime.Now, Enabled = false },
               new ExecAction("YourProcess.exe");

            t.Run();

            // delete the task after 2 seconds.
            new Action(() =>
            {
                Thread.Sleep(2000);
                using (TaskService ts2 = new TaskService())
                {
                    ts2.RootFolder.DeleteTask(taskName);
                }
            }).BeginInvoke(null, null);

        }

答案 1 :(得分:0)

您可以使应用程序等待然后重新启动,而不是以这种方式破坏安全性。请参阅this SO questionthis one