如何重新启动桌面 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
效果很好。
有人知道该怎么做吗?
除了 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
显然这省略了任何错误检查等。
例如。如果服务未运行会发生什么?
PS。出于兴趣,你为什么要搞乱系统服务?大多数 DWM 相关的东西都有实际的 API,并且在 Windows 8 上你无论如何都无法真正禁用桌面合成...
正如您的错误所述
No Access
是因为您使用的帐户或权限级别不允许您在该进程上调用 Kill()
。
您需要以提升的权限运行,或者确保您的帐户是尝试运行消息的计算机上的管理员。
如任务管理器中所示 - DWM 归 SYSTEM 所有,因此只有 SYSTEM 或管理员可以终止该进程。
编辑:
如果您想提升程序本身的权限,请进入您的
app.manifest
并更改此行:
<requestedExecutionLevel level="asInvoker" uiAccess="false" />
致:
<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />