2012-12-21 30 views
4

我有一個windows服務,可以通過調用「CreateProcessAsUser」函​​數在用戶windows會話中創建一個可執行文件。只要有一個Windows會話已經存在,這工作正常。如果沒有一個,我希望能夠以編程方式創建一個。這是可能的嗎?似乎無法找到一個功能來做到這一點。通過Win32 API從服務創建Windows會話

回答

0
+0

不幸的是,「會話」是Windows中的一個超載的術語。在這種情況下,我認爲OP在談論遠程桌面(又名Windows終端服務)會話而不是登錄會話。羅伯特,你能澄清一下嗎? –

+0

我不確定我是否理解這裏的差異,它本身不需要是遠程桌面會話,但它需要具有sessionid> 0,以便它可以使用gui執行程序。 – Robert

+1

遠程桌面服務是Windows的一部分,它允許用戶切換和會話零隔離以及實際的遠程桌面連接。你肯定在這裏談論遠程桌面會話ID,所以LogonUser不會解決你的問題。 –

4

不能創建從服務一個新的會話。會話由操作系統管理。用戶在交互式登錄時創建新的。

+0

在調用'CreateProcessAsUser()'之前,可以使用WTS API,如'WTSGetActiveSessionId()'和'WTSEnumerateSessions()'來確定用戶會話是否存在。 –

+1

備案:Windows Server 2012支持遠程桌面協議提供程序API,您可以使用該API以編程方式創建會話。此外,至少在理論上,您可以編寫自己的遠程桌面客戶端(或修改其中一個開放源代碼客戶端),以在任何支持的Windows版本上創建新會話 - 當然,前提是啓用了遠程桌面。 –

+0

@RemyLebeau這就是我已經做的,我試圖避免會話意外關閉的問題。 – Robert

3

這不是我所問的問題的解決方案,但是如果你明白我的意思,那就是通過提出這個問題來幫助實現我試圖達到的目標的解決方案。

與其創建服務器會話的Windows服務不同,您可以配置Windows以在啓動時自動登錄。這仍然意味着有人可以進行註銷,但可以消除會話消失的主要原因:服務器正在重新啓動。使用以下步驟激活自動登錄:

  1. 按下鍵盤上的Windows鍵+ R啓動「運行」對話框。
  2. 鍵入regedit並回車,打開註冊表編輯器
  3. 然後瀏覽到HKEY_LOCAL_MACHINE \ SOFTWARE \微軟\ WindowsNT的\ CURRENTVERSION \ Winlogon中\
  4. 設置AutoAdminLogon = 1(創建它,如果不存在,它是一個字符串變量)
  5. 設置DefaultUserName =您的用戶名(創建它,如果它不存在,它是一個字符串變量)
  6. 設置DefaultPassword =您的密碼(創建它,如果它不存在,它是一個字符串變量)

說明w ^從這個職位採取: http://channel9.msdn.com/Blogs/coolstuff/Tip-Auto-Login-Your-Windows-7-User-Account