如何重新启动桌面Windows管理器? 我已经尝试过了:
For Each Proc As Process In Process.GetProcessesByName("DWM")
Proc.Kill()
Next
但它给了我一个错误: System.dll中出现未处理的“System.ComponentModel.Win32Exception”类型异常
其他信息:无法访问
如果我在记事本上使用它:
For Each Proc As Process In Process.GetProcessesByName("NOTEPAD")
Proc.Kill()
Next
工作正常 谁知道怎么做?
答案 0 :(得分:2)
除了Evan L撰写的关于权限的内容之外,你应该使用System.ServiceProcess.ServiceController类来优雅地重启,而不是仅仅杀死它。
例如,在添加对System.ServiceProcess
的引用后,以下代码将重新启动DWM(服务名称UXSMS
):
Using dwmService As New System.ServiceProcess.ServiceController("UxSMS")
dwmService.Stop()
dwmService.WaitForStatus(ServiceProcess.ServiceControllerStatus.Stopped)
dwmService.Start()
dwmService.WaitForStatus(ServiceProcess.ServiceControllerStatus.Running)
End Using
显然这是省略任何错误检查等。
EG。如果服务没有运行会发生什么?
PS。出于兴趣,你为什么要搞乱系统服务?大多数与DWM相关的东西都有actual API,而在Windows 8上你无法真正禁用桌面组合......
答案 1 :(得分:1)
由于您的错误状态为No Access
,因为您使用的帐户或权限级别不允许您在该流程上调用Kill()
。
您需要使用提升的权限运行,或者确保您的帐户是您尝试运行该邮件的计算机上的管理员。
正如它在任务管理器中所示 - DWM归SYSTEM所有,因此只有SYSTEM或管理员可以终止进程。
编辑:
如果您想提升程序本身的权限,请转到app.manifest
并更改此行:
<requestedExecutionLevel level="asInvoker" uiAccess="false" />
要:
<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />