Я работаю над приложением киоска, которое предоставляет пользователю выбор подключений 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
//
Но вместо ожидания объекта Process код продолжается прямо до следующего раздела, который инициирует выход из системы. В результате сеанс Citrix завершается практически сразу, поскольку выход из локального компьютера происходит немедленно. Мое лучшее предположение состоит в том, что первоначальный запуск wfica32.exe завершается сразу после запуска нового процесса, чтобы фактически обработать сеанс. Но если это именно то, что происходит, то не очевидно, что с этим делать, поскольку wfica32.exe по-прежнему работает после запуска сеанса Citrix.
Я ищу надежный способ определить, когда сеанс Citrix, запущенный таким образом, завершился.