我使用QWINSTA.EXE從我們網絡上的終端服務器(我的計算機是Windows 7 Pro,TS是Windows Server 2003)獲取會話/用戶列表。我將這個函數的輸出傳遞給一個文本文件,然後處理文本文件以獲得我需要的信息。如果有更好的辦法,請原諒並跳過我冗長的帖子,並指出我的方向正確。在Windows 7上枚舉Delphi 2007中的終端服務會話
我的問題是,ShellExecute()
和ShellExecuteEx()
都不允許我在沒有提升權限的情況下執行程序。如果您轉到未升級的命令提示符,您甚至不會在目錄列表中看到EXE(無隱藏屬性)。使用「以管理員身份運行」命令提示符,你可以看到/使用它就好了。無論如何,你都可以在Windows資源管理器中看到它。
我戳了一下,發現這個寶石:RunFileAsAdminWait()
,如果我試圖直接調用QWINSTA.EXE(它失敗,錯誤消息:System Error. Code: 2. The system cannot find the file specified.
)不起作用。如果我將所有內容都包裝到批處理文件中,並在批處理文件上使用RunFileAsAdminWait()
,那麼它似乎可以正常工作。
我知道,但沒有用過,WTSEnumerateSessions()
。除了我剛剛鏈接的MSDN鏈接之外,我一直無法找到關於它的很多信息。任何人都知道從Delphi使用該API的相當一部分參考代碼?這不是提供德爾福的Windows單元2007
問題:
是否有其他/更好的方式來執行需要管理員權限到連訪問的EXE?或者,即使這裏發生了什麼?
有沒有更好的方法來獲取終端服務器上的活動會話列表,尤其是那些不需要提升權限的活動會話?
如果我使用這種方法卡住了,我是在「正確的方式」嗎?
謝謝你提供的任何幫助!
讓我看看我是否有這樣的筆直。您希望運行需要提升的流程,而不會激發UAC對話框。要做到這一點的唯一方法是啓動**您的**進程,以便它啓動的進程繼承該提升的令牌。 –
@David - 我可能應該已經離開#1了,但這是我第一次遇到這樣一種情況,即可以從資源管理器中看到文件,但在使用ShellExecute()時無法找到,甚至從非 - 升高的命令提示符。我不確定自己是否從一開始就做錯了什麼,導致了對UAC的需求。 –