在我的本地计算机上,我正在运行一个名为Serv.exe的LocalSystem管理c#服务,它执行各种任务。它需要执行的任务之一是在USER帐户(当前已登录)下启动应用程序,而不是以管理员身份启动 - 因为这违反了安全性。
显而易见的解决方案是在启动应用程序时进行简单的模拟 - 但是我遇到了一个小问题,而我没有获得用户帐户凭据(用户名和密码)的特权,因此无法以传统方式进行冒充。 / p>
因此,使用在登录到用户帐户时作为LocalSystem运行的C#服务 - 无论如何我可以作为该用户启动应用程序吗?
来自评论:
会发生什么是应用程序本身要求服务完成一项工作然后终止。当工作成功时,应用程序必须重新启动 - 我认为最好的方法是让服务在完成后重新启动...
非常感谢任何帮助。 谢谢,
答案 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 question和this one。