Программа + Терминал сервер
От: AndrK  
Дата: 20.07.05 15:48
Оценка:
Привет.
Есть программка, которая прописана в Net Logon.
Все замечательно работает, но есть одна проблемка.
Программа запускается 2 раза, когда пользователь входит локально и, когда на терминал сервер(W2003).
Хотелось бы, чтобы, когда программа работает на терминале, она выполняла действия, отличающиеся от действий, когда она работает локально. Можно ли это сделать?
Заранее спасибо.

P. S. Да, если кто знает, где можно скачать книжку по среде Visual Studio.Net 2003, скиньте ссылку пожалуйста. Мне не нужно по программиованию, просто описание интерфейса среды.

P.S.S.
Модераторам.
Извините если разместил тему не в том разделе. Он паказался более подходящим.
Re: Программа + Терминал сервер
От: mkopachev  
Дата: 21.07.05 06:50
Оценка:
Здравствуйте, AndrK, Вы писали:

AK>Привет.

AK>Есть программка, которая прописана в Net Logon.
AK>Все замечательно работает, но есть одна проблемка.
AK>Программа запускается 2 раза, когда пользователь входит локально и, когда на терминал сервер(W2003).
AK>Хотелось бы, чтобы, когда программа работает на терминале, она выполняла действия, отличающиеся от действий, когда она работает локально. Можно ли это сделать?
AK>Заранее спасибо.

Можно. Опередели что это терминал и сделай. Для определения того, что установлен сервер терминалов можно использовать GetVersionEx() (будет установлен флажок VER_SUITE_TERMINAL в wSuiteMask).
Определить что это втрой запуск можно создав объект ядра в глобальном пространстве имен (если нужен счетчик, то удобнее всего семафор). Чтобы объект попал в глобальное пространство имен его нужно создадвать с именем, содержащим префикс "Global\".

С уважением Михаил Копачев
... << RSDN@Home 1.1.4 @@subversion >>
Re[2]: Программа + Терминал сервер
От: RMikola  
Дата: 21.07.05 09:18
Оценка:
Здравствуйте, mkopachev, Вы писали:

M>Здравствуйте, AndrK, Вы писали:


AK>>Привет.

AK>>Есть программка, которая прописана в Net Logon.
AK>>Все замечательно работает, но есть одна проблемка.
AK>>Программа запускается 2 раза, когда пользователь входит локально и, когда на терминал сервер(W2003).
AK>>Хотелось бы, чтобы, когда программа работает на терминале, она выполняла действия, отличающиеся от действий, когда она работает локально. Можно ли это сделать?
AK>>Заранее спасибо.

M> Можно. Опередели что это терминал и сделай. Для определения того, что установлен сервер терминалов можно использовать GetVersionEx() (будет установлен флажок VER_SUITE_TERMINAL в wSuiteMask).

M> Определить что это втрой запуск можно создав объект ядра в глобальном пространстве имен (если нужен счетчик, то удобнее всего семафор). Чтобы объект попал в глобальное пространство имен его нужно создадвать с именем, содержащим префикс "Global\".

BOOL
WeAreAlone (LPSTR szName)
{
HANDLE hMutex = CreateMutex (NULL, TRUE, szName);
if (GetLastError() == ERROR_ALREADY_EXISTS)
{
CloseHandle(hMutex);
return FALSE;
}
return TRUE;
}

szName- имя мьютекса... если уже запущено, возвращает false.
M> С уважением Михаил Копачев
Re[3]: Программа + Терминал сервер
От: mkopachev  
Дата: 21.07.05 09:46
Оценка:
Здравствуйте, RMikola, Вы писали:

RM>Здравствуйте, mkopachev, Вы писали:


M>>Здравствуйте, AndrK, Вы писали:


AK>>>Привет.

AK>>>Есть программка, которая прописана в Net Logon.
AK>>>Все замечательно работает, но есть одна проблемка.
AK>>>Программа запускается 2 раза, когда пользователь входит локально и, когда на терминал сервер(W2003).
AK>>>Хотелось бы, чтобы, когда программа работает на терминале, она выполняла действия, отличающиеся от действий, когда она работает локально. Можно ли это сделать?
AK>>>Заранее спасибо.

M>> Можно. Опередели что это терминал и сделай. Для определения того, что установлен сервер терминалов можно использовать GetVersionEx() (будет установлен флажок VER_SUITE_TERMINAL в wSuiteMask).

M>> Определить что это втрой запуск можно создав объект ядра в глобальном пространстве имен (если нужен счетчик, то удобнее всего семафор). Чтобы объект попал в глобальное пространство имен его нужно создадвать с именем, содержащим префикс "Global\".

RM>BOOL

RM>WeAreAlone (LPSTR szName)
RM>{
RM> HANDLE hMutex = CreateMutex (NULL, TRUE, szName);
RM> if (GetLastError() == ERROR_ALREADY_EXISTS)
RM> {
RM> CloseHandle(hMutex);
RM> return FALSE;
RM> }
RM> return TRUE;
RM>}

RM>szName- имя мьютекса... если уже запущено, возвращает false.


В выделенной строчке глюка . Если запускаешь два процесса и оба работают некоторое время, но первый завершается раньше второго, то получаем ситуацию когда процесс работает (второй), а вот Mutext уже не существет — уничтожен при закрытии первого процесса, так что выделенную строчку лучше вообще убрать, ну и szName должно быть вроде такого "Global\My_Process_Count".

С уважением Михаил Копачев
... << RSDN@Home 1.1.4 @@subversion >>
Re[4]: Программа + Терминал сервер
От: RMikola  
Дата: 21.07.05 09:55
Оценка:
Здравствуйте, mkopachev, Вы писали:

M>Здравствуйте, RMikola, Вы писали:


RM>>Здравствуйте, mkopachev, Вы писали:




M> В выделенной строчке глюка . Если запускаешь два процесса и оба работают некоторое время, но первый завершается раньше второго, то получаем ситуацию когда процесс работает (второй), а вот Mutext уже не существет — уничтожен при закрытии первого процесса, так что выделенную строчку лучше вообще убрать.

Согласен, просто у меня процесс один, и поэтому я убиваю мьютекс. Было бы два и более — тут уже трабла

ну и szName должно быть вроде такого "Global\My_Process_Count".
С этим согласен, будет корректнее.
Re: Программа + Терминал сервер
От: AndrK  
Дата: 21.07.05 10:25
Оценка:
Всем большое спасибо.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.