我正在开发一个 kiosk 应用程序,它为用户提供了 Citrix 连接的选择。
这个想法是,用户选择由 kiosk 应用程序提供的连接,然后 kiosk 启动器通过运行类似于以下的命令来启动所选连接:
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
//
但是代码没有等待 Process 对象,而是继续到下一部分,该部分启动注销。结果是 Citrix 会话几乎立即终止,因为本地计算机立即注销。我最好的猜测是 wfica32.exe 的初始启动在启动新进程以实际处理会话后立即退出。但是,如果这是正在发生的事情,那么该怎么做就不清楚了,因为一旦 Citrix 会话启动,wfica32.exe 似乎仍在运行。
我正在寻找一种可靠的方法来检测以这种方式启动的 Citrix 会话何时终止。