powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Как узнать запущена ли программа терминальным сервером или "просто так" ?
10 сообщений из 10, страница 1 из 1
Как узнать запущена ли программа терминальным сервером или "просто так" ?
    #38640737
IApple
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Как узнать запущена ли программа терминальным сервером из терминальной сессии ?
...
Рейтинг: 0 / 0
Как узнать запущена ли программа терминальным сервером или "просто так" ?
    #38640806
bazile
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IApple, попробуй через переменную окружения SESSIONNAME или GetSystemMetrics(SM_REMOTESESSION) .

Зачем тебе это необходимо?
...
Рейтинг: 0 / 0
Как узнать запущена ли программа терминальным сервером или "просто так" ?
    #38640988
IApple
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
bazile, Для кустарной защиты программы. Сейчас лицензия на рабочее место для программы привязана к железу и винде. Но если ея юзать на терминальном сервере, то можно зайти под одной лицензией кучей народу из терминальных сессий...
...
Рейтинг: 0 / 0
Как узнать запущена ли программа терминальным сервером или "просто так" ?
    #38641023
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IApplebazile, Для кустарной защиты программы. Сейчас лицензия на рабочее место для программы привязана к железу и винде. Но если ея юзать на терминальном сервере, то можно зайти под одной лицензией кучей народу из терминальных сессий...
Системный мьютекс с именем, зависящим от лицензии.
Запуск одного экземпляра приложения на c#
...
Рейтинг: 0 / 0
Как узнать запущена ли программа терминальным сервером или "просто так" ?
    #38641024
bazile
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IApple, так а цель какая? Не давать запустить больше одной копии на одном компьютере? Если да, то используй глобальный мьютекс :

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
bool createdNew;
var appMutex = new Mutex(true, "Global\\MyMutex", out createdNew);
if (createdNew)
{
    // Это первый экземпляр
    
    // Код приложения
    // ........

    // Освобождаем mutex перед завершением работы
    appMutex.ReleaseMutex();
}
else
{
    // Запущен другой экземпляр
    // Выводим сообщение и завершаем приложение
    // mutex освобождать не надо!
}



Префикс Global\ обеспечивает видимость именованного мьютекса во всех терминальных сессиях. Вместо MyMutex подставь свое более уникальное имя. Например, добавь GUID.
...
Рейтинг: 0 / 0
Как узнать запущена ли программа терминальным сервером или "просто так" ?
    #38641039
bazile
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕвгенийВСистемный мьютекс с именем, зависящим от лицензии.
Хороший пример. Только надо помнить что по умолчанию для имени mutex используется префикс Local\ и значит в разных терминальных сессиях можно будет запустить свою копию приложения.
...
Рейтинг: 0 / 0
Как узнать запущена ли программа терминальным сервером или "просто так" ?
    #38641111
IApple
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо, тестирую GetSystemMetrics(SM_REMOTESESSION)
Нет, цели ограничить количество одновременно запущеных экземпляров приложения нет. Просто необходимо учесть в лицензии, позволять ли программе работать под терминалом или нет... Типа "нетерминальная" лицензия - рупь, "терминальная" - три...
...
Рейтинг: 0 / 0
Как узнать запущена ли программа терминальным сервером или "просто так" ?
    #38641708
E-doc
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть еще такое свойство : System.Windows.Forms.SystemInformation.TerminalServerSession .
Если true - то программа запущена в терминальной сессии.
...
Рейтинг: 0 / 0
Как узнать запущена ли программа терминальным сервером или "просто так" ?
    #38642021
bazile
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
E-docЕсть еще такое свойство : System.Windows.Forms.SystemInformation.TerminalServerSession .Декомплятор показывает что он вызывает GetSystemMetrics(SM_REMOTESESSION) так что мы на правильном пути.

Спасибо E-doc за напоминание о существовании этого класса.
...
Рейтинг: 0 / 0
Как узнать запущена ли программа терминальным сервером или "просто так" ?
    #38642247
IApple
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Работают оба способа, всем спасибо за советы.
Мне лично больше нравицца System.Windows.Forms.SystemInformation.TerminalServerSession,
поскольку тогда нет необходимости самому привязываться к user32.dll:
Код: c#
1.
2.
[System.Runtime.InteropServices.DllImport("user32.dll")]
public static extern int GetSystemMetrics(int nIndex);
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Как узнать запущена ли программа терминальным сервером или "просто так" ?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]