Определить citrix "режим приложения"?

Простите, что, возможно, я использовал неправильный термин для этого "режима приложения".

У нашего приложения во время запуска возникает проблема, заключающаяся в том, что оно не отображает значок панели задач до тех пор, пока не откроется главное окно, даже если до этого на экране присутствовали окна выполнения загрузки, окна входа в систему и т. Д.

Мы изменили код, чтобы исправить это, но, к сожалению, это исправление, при запуске приложения через citrix, теперь показывает две иконки, одна с иконкой и без текста.

Есть ли способ для меня, чтобы обнаружить, что приложение работает через Citrix? Я не знаю правильного термина для этого, но на рабочий стол пользователя выводится только окно приложения, а не весь удаленный рабочий стол.

Если это имеет значение, приложение написано на Delphi.

3 ответа

Решение

Не уверен, как именно это сделать в Delphi, но если вы можете вызвать user32.dll и вызвать функцию:

if (GetSystemMetrics(SM_REMOTESESSION) != 0)
{
   // We are in a remote session
}

Это должно сказать вам, если вы работаете в среде Citrix или Terminal Services. SM_REMOTESESSION определяется как:

#define SM_REMOTESESSION        0x1000

Больше информации о API GetSystemMetrics здесь: Ссылка на msdn

Редактировать На следующей странице описано, как сделать именно то же самое в Delphi. То, что работает для служб терминалов, должно также работать для Citrix:

Ваше приложение Delphi работает под терминальными службами как удаленный сеанс

Это работает для меня:

return System.Windows.Forms.SystemInformation.TerminalServerSession;

Заметка для любопытных: решение, предложенное open-collar, - это просто оболочка.NET для решения, предложенного Джоном Сибли. Они должны возвращать один и тот же результат в каждом случае. Я подтвердил это, разобрав класс System.Windows.Forms.SystemInformation.

Другие вопросы по тегам