我想在Vista/Windows 7中以编程的方式终止一个进程(我不确定UAC在两者之间的实现是否存在重大问题,会导致差异)。
目前,我的代码如下:
if(killProcess){
System.Diagnostics.Process[] process = System.Diagnostics.Process.GetProcessesByName("MyProcessName");
// Before starting the new process make sure no other MyProcessName is running.
foreach (System.Diagnostics.Process p in process)
{
p.Kill();
}
myProcess = System.Diagnostics.Process.Start(psi);
}
我之所以要这样做,是因为我需要确保如果用户崩溃了程序或者突然退出了程序,这个辅助进程会在重新启动应用程序时重新启动,或者如果用户想要更改这个辅助进程的参数。
代码在XP上运行良好,但在Windows 7(我认为在Vista中也是如此)出现“访问被拒绝”的错误消息。根据伟大的谷歌所说,我需要以管理员身份运行我的结束程序以解决这个问题,但这只是一个权宜之计。另一个潜在的答案是使用LinkDemand,但我不理解与进程相关的LinkDemand的msdn页面。
我可以将代码移入线程中,但这会带来一系列其他固有的困难,我真的不想去发现。