我有一个必须以管理员身份运行的应用程序。
该应用程序的一小部分是使用Process.Start启动其他应用程序
启动的应用程序也将以管理员身份运行,但我更愿意看到它们以“普通”用户身份运行。
我该如何做到这一点?
/johan/
发布于 2015-12-27 00:40:48
我也有同样的需求,于是我找到了使用Windows的任务调度服务的解决方案。
因此,首先添加the Task Scheduler Managed Wrapper
library to your project并使用此代码创建一个任务,将其配置为作为受限用户(td.Principal.RunLevel = TaskRunLevel.LUA;
)运行,注册该任务,运行该任务,完成后删除该任务。
// Get the service on the local machine
using (var ts = new TaskService())
{
const string taskName = "foo";
// Create a new task definition and assign properties
var td = ts.NewTask();
td.RegistrationInfo.Description = "start foo.exe as limited user";
// Create an action that will launch foo.exe, with argument bar in workingdir C:\\
td.Actions.Add(new ExecAction("C:\\foo.exe", "bar", "C:\\"));
td.Settings.Priority = ProcessPriorityClass.Normal;
// run with limited token
td.Principal.RunLevel = TaskRunLevel.LUA;
td.Settings.AllowDemandStart = true;
td.Settings.DisallowStartIfOnBatteries = false;
td.Settings.StopIfGoingOnBatteries = false;
// Register the task in the root folder
var ret = ts.RootFolder.RegisterTaskDefinition(taskName, td);
var fooTask = ts.FindTask(taskName, true);
if (null != fooTask )
{
if (fooTask.Enabled)
{
fooTask.Run();
Thread.Sleep(TimeSpan.FromSeconds(1));
// find process and wait for Exit
var processlist = Process.GetProcesses();
foreach(var theprocess in processlist)
{
if (theprocess.ProcessName != "foo")
continue;
theprocess.WaitForExit();
break;
}
}
}
// Remove the task we just created
ts.RootFolder.DeleteTask(taskName);
}
https://stackoverflow.com/questions/196949
复制相似问题