2014-01-16 36 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