2014-10-29 86 views
0

我爲Enterprise Architect應用程序運行Citrix會話。Kill Citrix Session C#

我做了一些需要關閉Citrix會話的修改。

當我關閉思傑窗口,它只是似乎關閉,但在後臺仍在運行。(我可以看到它在失去了正在運行的程序)。

我怎麼能強制Citrix會話是關閉,使用C#?

+0

您是否有可能檢測到會話已結束?如果是這樣,你可以簡單地殺死相應的進程。 – 2014-10-29 11:29:40

+0

@MarkusSafar,謝謝。你是對的。但是,我希望在用戶關閉Citrix窗口時運行一個進程,完全終止它。有任何想法嗎? – user3165438 2014-10-29 11:31:08

+0

其實這是我的問題:D我很確定有一些棘手的Windows API調用可以用來監視特定窗口的狀態變化,但是如果每次會話結束特定窗口時都有其他觸發器會更容易文件被更新或類似的東西。關閉會話是否意味着用戶註銷? – 2014-10-29 11:34:19

回答

1

所以我已經閱讀了幾次,並且我仍然不能100%確定是否在運行Citrix Receiver的客戶端上運行C#服務器上的會話內部 - 所以我會回答雙向。

1)如何對從客戶端

關閉會話可以使用實時監控通過API訪問ICO。 ICO是ICA客戶端對象,一種基於COM的API來控制win32 Citrix Receiver。以下PowerShell示例顯示如何枚舉客戶端上的會話並將其註銷。在C#中執行此操作的代碼將非常相似。此示例與服務器的名稱匹配,但您可以使用不同的東西。例如。註銷所有會話,或根據發佈的應用程序的名稱進行匹配。

http://smulpuru.wordpress.com/2013/06/27/client-side-xenapp-session-enumeration-and-selective-logoff-based-on-xenapp-server-using-ica-client-object-wficalib/

注意:必須設置在PowerShell樣品頂部提到否則實時監控API將無法正常工作(由於安全原因)的兩個註冊表項。

2)如何對從服務器

關閉會話這是很容易,你需要做的僅僅是觸發註銷 - 有很多方法可以做到這一點。更常用的方法之一是使用WTSLogoffSession。您需要從C#中解壓縮,但定義非常簡單:

[DllImport("wtsapi32.dll", SetLastError = true)] 
    public static extern bool WTSLogoffSession(IntPtr hServer, int sessionId, bool bWait);