Visual Basic:重新启动桌面Windowspipe理器(DWM)

我如何重新启动桌面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上,您无法真正禁用桌面组合。