2014-01-16 32 views
1

如何重新启动桌面窗口管理器? 我已经尝试:Visual Basic中:重新启动桌面窗口管理器(DWM)

For Each Proc As Process In Process.GetProcessesByName("DWM") 
Proc.Kill() 
Next 

但它给我一个错误: 型“System.ComponentModel.Win32Exception”未处理的异常发生在System.dll中

其它信息:没有访问

如果使用它的记事本IM:

For Each Proc As Process In Process.GetProcessesByName("NOTEPAD") 
Proc.Kill() 
Next 

它工作正常 任何硝酸钾如何做到这一点?

+0

由于错误说‘无法访问’,很可能是由于系统上的privleges。这个过程可能属于SYSTEM,并阻止你的'Kill()'请求。你是机器管理员吗?如果您查看TaskMgr,用户名称字段在DWM过程旁边会说什么? –

+0

运行在管理员模式帮助 – nelson2tm

+0

好,我要去发布此作为答案即可。随意标记以表明问题已得到解答。 –

回答

1

由于您的错误状态No Access是因为您使用的帐户或权限级别不允许您在该过程中调用Kill()

您需要更高权限运行,或确保您的帐户上,你试图运行邮件的计算机的管理员。

,因为它显示在任务管理器 - DWM被系统所以只属于SYSTEM或管理员可以终止该进程。

编辑:

如果你想提升程序自身的特权,进入你的app.manifest和改变这一行:

<requestedExecutionLevel level="asInvoker" uiAccess="false" /> 

要:

<requestedExecutionLevel level="requireAdministrator" uiAccess="false" /> 
+0

作为管理员,您仍然需要右键单击该程序,然后单击“在管理员模式下打开”。这可以自动完成,它会自动请求“您是否允许该程序可以在您的计算机上进行更改”? – nelson2tm

+1

我使用解决方案对您的评论进行了编辑。如果你没有应用程序。清单,只需右键单击项目 - >添加新项目 - >应用程序清单文件,即可为项目添加一个。我发布的代码是针对C#的,但它应该与Vb.net中的类似。 –

2

除什么埃文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,你不能真正禁用反正桌面组合...

+0

如果您使用我拥有的代码(或taskmanager)停止dwm,那么屏幕会变黑一会儿(0.5 - 4秒?),然后dwm启动自动操作向上。 – nelson2tm

+0

我不明白你想说什么。您是否正在努力/使屏幕短时间变黑?当我在我的机器上运行它时,我也会看到一个简短的黑屏。 – Fowl