我試圖從服務啓動的可執行文件中刪除Windows登錄屏幕(winlogon)。該服務將在Windows自動啓動並等待來自另一臺計算機的命令。當它收到一個命令時,它會啓動一個exe文件,它將以特定的用戶名啓動cmd.exe。通過服務刪除Windows登錄屏幕
服務已經存在。我有寫這個可執行文件的工作。目前,我已經編寫了可執行文件(CmdLogin),它通過調用LogonUserW,ImpersonateUser和CreateProcessWithLogonW來啓動不同用戶下的cmd.exe。我將lpDesktop指定爲「WinSta0 \ Default」。唯一的問題是服務必須以管理員帳戶運行(但這是一個不同的問題)。
從命令提示符(即使在Windows 7上)調用時,此功能完全正常。當用戶登錄並查看其桌面時(如同時在同一臺計算機上進行調試一樣),在服務中調用此功能時也可以使用。但是,就像我上面所說的,我的真正需求是即使在顯示Windows登錄屏幕時也能正常工作。目前,該exe提供了一個適當的退出代碼,但窗口不出現。但是,當用戶登錄時,他會在桌面上看到cmd窗口。
我發現的一個解決方案是使用「WinSta0 \ WinLogon」作爲lpDesktop而不是Default。我還沒有嘗試過。但是,這看起來像會在登錄屏幕上顯示cmd窗口。我真正需要的是真正模擬用戶登錄到winlogon並顯示他的實際桌面(和cmd窗口)。
我環顧四周,找到了GINA和Winlogon通知包。它們看起來像是一種矯枉過正,我不確定這是否能夠解決這個問題。而且,這些在Windows Vista中已被棄用,這讓我覺得有一個更好的方法可以解決這個問題。
我應該用什麼來達到這個目標的任何建議?爲了記錄,可執行文件使用P/Invoke進行API調用。我很樂意使用可以從這個C#應用程序調用的C dll。
謝謝
侯賽因
嗯,這樣做的原因是我的客戶端需要一個應用程序,他可以向用戶發出不同的用戶名和密碼,以便訪問Windows工作站而無需提供實際的用戶名和密碼。運行在工作站上的服務將遠程登錄用戶,用戶將通過VNC客戶端繼續在工作站上工作。 這對我來說似乎有點奇怪,因爲它與訪問Windows用戶差不多。但是,這是我的客戶想要的。 – 2009-07-07 11:33:18