2011-08-12 57 views
2

我需要在機器啓動時執行我的應用程序而無需用戶交互。我需要在所有的Windows XP,Windows Vista,Windows Server 2003,Windows 7和Windows Server 2008操作系統上運行。

對於這一點,我按照這些步驟,如何在Windows服務器操作系統中獲得「活動會話ID」?

  1. 獲取使用WTSGetActiveConsoleSessionId
  2. 獲得作爲當前活動的會話中運行
  3. 獲取一個Winlogon進程的進程ID活動會話ID處理winlogon進程
  4. 使用獲取winlogon進程的訪問令牌的句柄OpenProcessToken
  5. 複製Winlogon進程DuplicateTokenEx
  6. 創建使用CreateProcessAsUser
  7. 在交互式窗口站和當前用戶的登錄會話的新進程,然後關閉所有句柄的訪問令牌。

它適用於所有工作站,並且服務器有一個活動的控制檯ID正在運行。這很明顯,因爲在第1步中,我捕獲了活動控制檯標識。在引入Windows Session 0 Isolation之前,我發現了其他一些在OS中啓動應用程序的方法。

現在我需要趕上WTSGetActiveConsoleSessionId是否返回一個有效的身份證件,如果不創建一個新的會話,並在它開始我的應用程序或趕上活動RDP會話的在其上運行我的應用程序或顯示在用戶屏幕上的記錄供用戶決定(這是理想的,因爲我的應用程序是一個捕獲屏幕的屏幕)。我相信他們應該成爲這樣做的一種方式,我需要你的幫助。

非常感謝!

+0

我相信這個問題已經在這裏問:http://stackoverflow.com/questions/5896878/running-a-program-when-windows-boots-前登錄 – Jamey

回答

0

我終於找到了解決我的問題。想出版它爲所有讀者的利益。

這裏提到的7個步驟是正確的。

添加到他們請注意,即使沒有被列爲積極

  • 控制檯會話,仍然存在。
  • 當您運行可執行文件時控制檯是無效的,它與上次會話ID它必須爲控制檯上運行,通過提供憑證給你登錄到本機的選項
  • 當您提供憑據其重新控制檯會話給出一個新的會話ID
  • 您的應用程序此時無法訪問,因爲它在前一個非活動控制檯會話中啓動。
  • 通過監測WTSGetActiveConsoleSessionId結果來檢測新的活動控制檯會話ID,如果它已更改,則在控制檯會話中重新啓動您的可執行文件。

希望它救了你的時間:)

相關問題