我如何重新启动桌面Windowspipe理器? 我已经试过了:
For Each Proc As Process In Process.GetProcessesByName("DWM") Proc.Kill() Next
但它给了我一个错误:在System.dll中发生未处理的typesSystem.ComponentModel.Win32Exceptionexception
其他信息:无法访问
如果即时通讯记事本上使用它:
For Each Proc As Process In Process.GetProcessesByName("NOTEPAD") Proc.Kill() Next
它工作正常任何人都知道如何做到这一点?
由于您的错误状态No Access
是因为您正在使用的帐户或权限级别不允许您在该过程中调用Kill()
。
您需要使用提升的权限运行,或者确保您的帐户是试图运行邮件的计算机上的管理员。
正如它在任务管理器中显示的 – DWM由SYSTEM拥有,所以只有SYSTEM或管理员可以终止进程。
编辑:
如果你想提升程序本身的特权,进入你的app.manifest
并改变这一行:
<requestedExecutionLevel level="asInvoker" uiAccess="false" />
至:
<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
除了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上,您无法真正禁用桌面组合。