2012-03-28 54 views
1

我正在爲用戶提供Citrix連接選擇的自助服務終端應用程序。檢測由自助服務終端應用程序啓動的Citrix會話的終止

的想法是,在用戶選擇通過售貨亭應用程序呈現的連接,然後售貨亭發射發起通過運行一個類似的命令所選擇的連接:

C:\Program Files\Citrix\ICA Client\wfica32.exe \\server\path\to\icaFile.ica 

我希望用戶呆在內Citrix會話 - 不是出於任何安全原因,只是爲了使其成爲進入選定會話並最終註銷的良好用戶體驗。所以我啓動全屏會話,一切都很好,直到用戶註銷。

當用戶註銷Citrix會話時,我還想在客戶端計算機上啓動註銷。我試着通過使用類似於下面的代碼在明顯的方式做這樣的:

Process citrixProcess = new Process(); 
citrixProcess.StartInfo = new ProcessStartInfo(); 
citrixProcess.StartInfo.FileName = "C:\Program Files\Citrix\ICA Client\wfica32.exe"; 
citrixProcess.StartInfo.Arguments = "\\server\path\to\icaFile.ica"; 
citrixProcess.Start(); 
citrixProcess.WaitForExit(); 
// 
// Followed by code to initiate logoff from the local computer 
// 

但不是在等待過程對象代碼繼續沿着正確的下一節它啓動註銷。結果是Citrix會話幾乎立即終止,因爲本地計算機註銷會立即發生。我最好的猜測是啓動一個新的進程來實際處理會話後,wfica32.exe的初始啓動程序將立即退出。但是,如果發生了這種情況,不知道該怎麼做,因爲一旦Citrix會話啓動,wfica32.exe仍然會運行。

我正在尋找一種可靠的方法來檢測以這種方式啓動的Citrix會話何時終止。

回答

4

在C#應用程序中,您可以引用WFICALib.dll(位於Citrix Ica Client文件夾中),創建一個ICAClientClass對象,訂閱並調用它的Disconnect事件,並調用LoadIcaFile方法啓動連接。

在Disconnect方法的處理程序中,您需要添加代碼來啓動註銷並終止當前應用程序。

的範例:

public static void Connect() 
{ 
    // Configure the connection. 
    ICAClientClass ica = new ICAClientClass(); 
    ica.Application = string.Empty; 
    ica.InitialProgram = "#Name of Citrix application to launch"; 
    ica.Launch = true; 
    ica.Domain = Environment.UserDomainName; 
    ica.DesiredColor = ICAColorDepth.Color24Bit; 
    ica.OutputMode = OutputMode.OutputModeNormal; 
    ica.MaximizeWindow(); 
    ica.ClientAudio = true; 
    ica.AudioBandwidthLimit = ICASoundQuality.SoundQualityMedium; 
    ica.Compress = true; 
    ica.ScreenPercent = 100; 
    ica.TransportDriver = "TCP/IP"; 
    ica.WinstationDriver = "ICA 3.0"; 
    ica.SSLEnable = false; 
    ica.SSLCiphers = "ALL"; 
    ica.SSLProxyHost = "*:443"; 
    ica.EncryptionLevelSession = "EncRC5-128"; 

    // Citrix server name or IP 
    ica.Address = "x.x.x.x"; 

    // Setup handler for disconnect event. 
    ica.OnDisconnect += ica_OnDisconnect; 

    // Initiate the connection. 
    ica.Connect(); 
} 

private static void ica_OnDisconnect() 
{ 
    Console.WriteLine("ica_OnDisconnect"); 
} 
+0

太謝謝你了。我會計劃看看這個組件的文檔,並試用它,希望在接下來的幾個星期裏我可以回到這個項目。非常感激! – 2012-05-22 14:14:17

+1

該文檔是稀疏的,但我正在處理相關的應用程序,我會很樂意分享任何我可以並更新答案或相關問題。 – 2012-05-22 17:41:27

+1

這真的讓我開始了正確的道路:http://blogs.citrix.com/2010/03/02/fun-with-the-ica-client-object-ico-and-net-console-applications/ – 2012-06-05 13:48:24

相關問題