2009-09-20 29 views
0

我的系統有2個帳戶(USER和ADMIN)和一個服務(Service.exe)在LocalSystem下運行。 用戶登錄到USER帳戶後,LocalService可以以ADMIN用戶的身份啓動進程(CreateProcessAsUser(...))。CreateProcessAsUser()不顯示運行進程的CreateWindow [C#]

服務運行的進程(Tool.exe)是一個傳統的C++應用程序,它執行作業並使用CreateWindow(...)向用戶顯示信息,但當通過服務啓動它時,窗口不會顯示...

當通過服務創造的過程中,我第一次加載配置文件ADMIN用戶的&環境,以便正確的上下文中使用... (仍然希望窗口將顯示到用戶)

現在,最初我以爲這會導致一個問題,因爲管理員正在運行的過程,爲什麼CreateWindow(...)輸出在USER桌面,所以我嘗試通過一個簡單的命令行test.exe應用程序,當以ADMIN的身份啓動時,命令提示符窗口出現 - 那麼爲什麼它能正常工作,因爲CreateWindow(...)無法正確顯示?

有關如何獲取在ADMIN下運行以顯示在USER登錄會話中的狀態(使用Tool.exe中的CreateWindow)的任何線索?

我可以使用環境弄好了,我想下面想這可能工作,但沒有:

startInfo.lpDesktop = @"WinSta0\Default"; 
startInfo.dwFlags = STARTF_USESHOWWINDOW; 
startInfo.wShowWindow = SW_SHOW; 

的窗口創建爲(以Tool.exe)如下:

HWND hwnd = CreateWindow 
(
    "Tool", 
    "Tool WINDOW", 
    WS_POPUP | WS_VISIBLE, 
    0,0,uWidth,uHeight, 
    NULL, 
    NULL, 
    hInstance, 
    Text 
); 

lpDesktop是否錯誤(不完全確定這是如何工作的)?

我知道這聽起來有多瘋狂 - 我只是不想將另一個ToolDisplay.exe作爲USER與Tool.exe進行通信作爲ADMIN作爲顯示器,當Tool.exe用於處理所有內容時 - 所以檢查,看看是否有沒有處理一些這方面的好方法...

任何幫助將不勝感激...... 謝謝,

[簡體問:]

我的系統有2帳戶(USER和ADMIN),用戶始終以USER身份登錄,但在某個特定時間進程(Tool.exe)處於登錄狀態在ADMIN帳戶(通過使用CreateProcessAsUser(...)的LocalSystem服務)啓動,幾乎一切正常,除了過程(Tool.exe)應該使用CreateWindow(...)向用戶顯示狀態這一事實外, 。

當Tool.exe正在運行(如ADMIN)並且用戶以USER身份登錄時,該窗口未顯示(顯然)... 有沒有辦法顯示在ADMIN下運行的Tool.exe窗口以USER身份登錄的用戶?

任何幫助將不勝感激...... 謝謝,

+0

簡化您的問題。這沒有任何意義。 – 2009-09-20 04:28:14

回答

0

以防萬一你想通過服務催生了一個窗口/ GUI可見, 轉到TO->提示符下運行 - > SERVICES.MSC - >轉到您的服務的屬性,選中「允許服務與桌面交互」。 然後重新啓動您的服務。

請注意,在Vista中,即使在上面之後,提示仍不可見。這是由於會議問題。然而,有一項服務可以幫助支持來自服務的提示(我認爲它是交互式服務檢測服務)。

+1

對。請注意潛在的安全風險,因爲這可能會使LSA帳戶「高枕無憂」。也許你可以在「正常」帳戶下運行該服務。 – mjv 2009-09-20 04:42:20

+0

服務必須在執行管理員操作時在ADMIN帳戶下運行。並且只有USER有登錄。 該服務不是執行CreateWindow的人,在ADMIN中運行的Tool.exe是...所以「允許服務與桌面交互」不會幫助(已完成)... – Shaitan00 2009-09-20 05:20:52

+0

爲什麼要跑馬tool.exe作爲管理員?如果你只是需要管理權限,服務擁有更多的管理用戶權限。所以直接使用服務產生tool.exe(不要做runas Admin)。 也嘗試通過服務產卵測試應用程序,看看它是否工作。 – 2009-09-20 08:11:52

相關問題