Определить citrix "режим приложения"? - PullRequest
4 голосов
/ 20 ноября 2008

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

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

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

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

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

Ответы [ 3 ]

12 голосов
/ 20 ноября 2008

Не уверен, как именно это сделать в 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 работает под терминальными службами как удаленный сеанс

6 голосов
/ 06 января 2009

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

return System.Windows.Forms.SystemInformation.TerminalServerSession;
5 голосов
/ 13 апреля 2009

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

...