powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Вот это номер! CreatEvent - не работает!
52 сообщений из 52, показаны все 3 страниц
Вот это номер! CreatEvent - не работает!
    #38895708
13th
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть такая известная всем функция Win32 API - CreateEvent.
https://msdn.microsoft.com/ru-ru/library/windows/desktop/ms682396(v=vs.85).aspx

Пишу код:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
	HANDLE hEvent = CreateEvent( NULL, FALSE, FALSE, L"Global\\CSAPP" );
	DWORD dwErrorCode = GetLastError();
	if( dwErrorCode == ERROR_ALREADY_EXISTS )
	{
		wcout << "exist" << endl;
	}
	else
	{
		wcout << "new" << endl;
	}


Запускаю две программы одновременно. Теоретически, первый экземпляр приложения должен вывести new, второй - exist.
Под Windows 7, в одной сессии так и есть. Но под Windows 8.1 - нет! Оба пишут new.

Таки да, с появлением терминального сервера появились правила разделения нэймспейсов именованных объектов. Вот тут написано:
https://msdn.microsoft.com/en-us/library/aa382954(v=vs.85).aspx

Но у меня-то объект с именем Global\! Т.е. должен обнаруживаться!

То же самое и терминальными сессиями. На Windows 7 - одно приложение запускаю под одним пользователем, второе - под другим. Оба пишут new.

В чём засада, подскажите, уже весь мозг сломал!
...
Рейтинг: 0 / 0
Вот это номер! CreatEvent - не работает!
    #38895749
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
13thВ чём засада, подскажите, уже весь мозг сломал!
Ты не проверяешь на другие ошибки, так что если получил ERROR_ACCESS_DENIED, выводишь "New".
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Вот это номер! CreatEvent - не работает!
    #38895807
13th
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov, ну, у меня тут уже дерево из 50 условий, в т.ч. с проверкой ERROR_ALREADY_EXISTS, ERROR_ACCESS_DENIED, ERROR_INVALID_HANDLE, с использованием OpenEvent с разными флагами и т.д.. Общая фишка такая - в рамках одной сессии ещё кое-как можно обмениваться событиями. Между сессиями - никак, даже с административными правами и включением SeDebugPrivelege.

А нужно - именно между сессиями в терминальном сервере, и что бы работало на XP, 7, 8.
...
Рейтинг: 0 / 0
Вот это номер! CreatEvent - не работает!
    #38895826
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
13thдаже с административными правами и включением SeDebugPrivelege.
А нужно - SeCreateGlobalPrivilege. Проще всего этого добиться - запустить оба приложения
"As Administrator".
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Вот это номер! CreatEvent - не работает!
    #38895832
13th
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov, Я ж написал - as administrator не помогает.
...
Рейтинг: 0 / 0
Вот это номер! CreatEvent - не работает!
    #38895857
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovПроще всего этого добиться - запустить оба приложения
"As Administrator".
это слишком сильное требование
...
Рейтинг: 0 / 0
Вот это номер! CreatEvent - не работает!
    #38895879
13th
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Задам более общий вопрос.
Как узнать, что приложение уже запущено на данном компьютере?
Метод должен работать на XP, 7, 8. В одной локальной или через несколько терминальных сессий. Должны обнаруживаться даже зависшие экземпляры приложений. Должно работать без административных прав.

Понятно, что метод "с созданием файлика" не годится, нужно что-то посерьёзнее.
...
Рейтинг: 0 / 0
Вот это номер! CreatEvent - не работает!
    #38895897
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
socket()+bind()+listen()
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Вот это номер! CreatEvent - не работает!
    #38895916
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
13thПонятно, что метод "с созданием файлика" не годится, нужно что-то посерьёзнее.
Почему не годится?
При первом запуске создавайте файлик с ID процесса.
При последующих запусках читайте файл и проверяйте существует ли процесс с таким ID.
Весь юниксовый мир использует эту технику.
...
Рейтинг: 0 / 0
Вот это номер! CreatEvent - не работает!
    #38895958
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly MoskovskyВесь юниксовый мир использует эту технику.
Не совсем. ID процесса не проверяется, файл просто лочится на запись. Но у них есть
стандарт на структуру каталогов и гарантированное место с разрешением на запись. На винде
всё хуже.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Вот это номер! CreatEvent - не работает!
    #38895992
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovНе совсем. ID процесса не проверяется, файл просто лочится на запись.
Не знал, спасибо.

Dimitry SibiryakovНа винде всё хуже.
Ну собственно, выше по топику видно, что даже более приспособленные для этого механизмы под виндой тоже не гарантировано работают. Тогда зачем усложнять когда можно проще ))
...
Рейтинг: 0 / 0
Вот это номер! CreatEvent - не работает!
    #38896011
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
13thНо у меня-то объект с именем Global\! Т.е. должен обнаруживаться!
ЕМНИП где-то в политиках терминального сервера настраивается будет ли Global глобальным для всех терминальных сессий. По дефолту это отключено, т.е. Global\ одной терминальной сессии не виден в другой.
...
Рейтинг: 0 / 0
Вот это номер! CreatEvent - не работает!
    #38896024
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly MoskovskyТогда зачем усложнять когда можно проще ))
Затем, что проще - нельзя. Нет на винде заранее известного общего каталога с
гарантированными разрешениями на создание файла любым пользователем.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Вот это номер! CreatEvent - не работает!
    #38896031
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
13thПонятно, что метод "с созданием файлика" не годится, нужно что-то посерьёзнее.
Самый надежный метод быть уверенным что прогу никто не запустит дважды. Работает как в терминале, так и по сети. При входе открываешь файлик на запись и держишь открытым, при выходе закрываешь и удаляешь. Второй открыть не сможет. Если прога вылетит - ОС файлик закроет, в следующий запуск факт наличия файлика оповестит что прога вылетела.
...
Рейтинг: 0 / 0
Вот это номер! CreatEvent - не работает!
    #38896120
13th
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima T, я проверял в обычной свежеустановленной Windows 7, там никто никаких гаек в терминальной сессии не закручивал. Созданные объекты с префиксом Global не находятся.
...
Рейтинг: 0 / 0
Вот это номер! CreatEvent - не работает!
    #38896124
13th
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Anatoly Moskovsky13thПонятно, что метод "с созданием файлика" не годится, нужно что-то посерьёзнее.
Почему не годится?
При первом запуске создавайте файлик с ID процесса.
При последующих запусках читайте файл и проверяйте существует ли процесс с таким ID.
Весь юниксовый мир использует эту технику.
А если приложение зависнет? Его сняли, и под этим ID запустился блокнот. Fail!
...
Рейтинг: 0 / 0
Вот это номер! CreatEvent - не работает!
    #38896136
13th
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima T13thПонятно, что метод "с созданием файлика" не годится, нужно что-то посерьёзнее.
Самый надежный метод быть уверенным что прогу никто не запустит дважды. Работает как в терминале, так и по сети. При входе открываешь файлик на запись и держишь открытым, при выходе закрываешь и удаляешь. Второй открыть не сможет. Если прога вылетит - ОС файлик закроет, в следующий запуск факт наличия файлика оповестит что прога вылетела.

Думаешь, программа, реализующая этот алгоритм получит сертификат "Windows 8-ready?" (:
...
Рейтинг: 0 / 0
Вот это номер! CreatEvent - не работает!
    #38896145
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
13thDima T, я проверял в обычной свежеустановленной Windows 7, там никто никаких гаек в терминальной сессии не закручивал. Созданные объекты с префиксом Global не находятся.
Я писал про серверные виндовсы, возможно в 7-ке все точно также по дефолту, но только настраивать негде.

Я использовал mutex с именем Global\... для синхронизации между терминальными сессиями в Win2000 Server. Все отлично работало, пока админы не решили на 2003 пересесть. Там перестало работать. Нашли какую-то настройку в политиках, отключили/переключили - заработало. Что, где - не помню.
...
Рейтинг: 0 / 0
Вот это номер! CreatEvent - не работает!
    #38896175
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
13thDima Tпропущено...

Самый надежный метод быть уверенным что прогу никто не запустит дважды. Работает как в терминале, так и по сети. При входе открываешь файлик на запись и держишь открытым, при выходе закрываешь и удаляешь. Второй открыть не сможет. Если прога вылетит - ОС файлик закроет, в следующий запуск факт наличия файлика оповестит что прога вылетела.

Думаешь, программа, реализующая этот алгоритм получит сертификат "Windows 8-ready?" (:
Зачем он нужен?

Надо отталкиваться от того какие общие ресурсы использует прога. Тебе же не прогу надо однократно запустить, а однократно выполнить какую-то обработку данных. Если это какая-то файловая база - создай там файл. Если СУБД - используй средства СУБД.
...
Рейтинг: 0 / 0
Вот это номер! CreatEvent - не работает!
    #38896177
13th
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В общем, решение, похоже, такое.
1. Делаем OpenEvent с нашим ГЛОБАЛЬНЫМ именем. Если открылось - прилага уже запущена, делаем CloseHandle, выходим.
2. Если не открылось, и код ошибки ERROR_ACCESS_DENIED - мы в 7, 8, прилага открыта в другой сессии, выходим
3. Если не открылось, и код ошибки ERROR_FILE_NOT_FOUND - мы самые первые, делаем CreateEvent, запускаемся.

Проверил в XP, Server 2003, 7, 8, 8.1 работает. Надо бы ещё в Server 2012.
...
Рейтинг: 0 / 0
Вот это номер! CreatEvent - не работает!
    #38896183
13th
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima TНадо отталкиваться от того какие общие ресурсы использует прога. Тебе же не прогу надо однократно запустить, а однократно выполнить какую-то обработку данных. Если это какая-то файловая база - создай там файл. Если СУБД - используй средства СУБД.
Общий ресурс - legacy функционал, под многопользование не заточенный. Отказаться от него - не вариант. "Создание там файла" не проходит по причине, в пятый раз пишу, "кто его удалит, если прилага зависнет?".
...
Рейтинг: 0 / 0
Вот это номер! CreatEvent - не работает!
    #38896193
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
13thОбщий ресурс - legacy функционал, под многопользование не заточенный. Отказаться от него - не вариант. "Создание там файла" не проходит по причине, в пятый раз пишу, "кто его удалит, если прилага зависнет?".
Не надо его удалять если прога зависнет. Это прочитал?
Dima TСамый надежный метод быть уверенным что прогу никто не запустит дважды. Работает как в терминале, так и по сети. При входе открываешь файлик на запись и держишь открытым, при выходе закрываешь и удаляешь. Второй открыть не сможет. Если прога вылетит - ОС файлик закроет, в следующий запуск факт наличия файлика оповестит что прога вылетела.
Не надо его к процессам привязывать. Просто назови my_proga_is_work.flg
...
Рейтинг: 0 / 0
Вот это номер! CreatEvent - не работает!
    #38896207
13th
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dima TНе надо его удалять если прога зависнет. Это прочитал?

Это я прочитал.

Dima T13thДумаешь, программа, реализующая этот алгоритм получит сертификат "Windows 8-ready?" (:
Зачем он нужен?

У нас серьёзный продукт. Сертификат - нужен. Механизм с файлом - не серьёзно, тут не unix.
...
Рейтинг: 0 / 0
Вот это номер! CreatEvent - не работает!
    #38896281
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
13thDima Tпропущено...

Самый надежный метод быть уверенным что прогу никто не запустит дважды. Работает как в терминале, так и по сети. При входе открываешь файлик на запись и держишь открытым, при выходе закрываешь и удаляешь. Второй открыть не сможет. Если прога вылетит - ОС файлик закроет, в следующий запуск факт наличия файлика оповестит что прога вылетела.

Думаешь, программа, реализующая этот алгоритм получит сертификат "Windows 8-ready?" (:
Да нормуль способ. Юниксы так делают часто. Я-бы попробовал вместо файла создавать объекты
видимые в поле зрения ОС (Mutex например).

Пыщ до кучи
http://nsis.sourceforge.net/Check_whether_your_application_is_running
...
Рейтинг: 0 / 0
Вот это номер! CreatEvent - не работает!
    #38896290
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
13thМеханизм с файлом - не серьёзно,
named pipe тогда используйте
...
Рейтинг: 0 / 0
Вот это номер! CreatEvent - не работает!
    #38896292
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
13thУ нас серьёзный продукт. Сертификат - нужен.
Так чё ж вы, такие все из себя сурьёзные, задаёте этот вопрос на форуме вместо того чтобы
обратиться прямо в техподдержку Windows?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Вот это номер! CreatEvent - не работает!
    #38896295
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton(Mutex например
мьютекс и шаред мемори - у них те же фокусы с local/global и правами на global
...
Рейтинг: 0 / 0
Вот это номер! CreatEvent - не работает!
    #38896303
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Надо смотреть в смыслы. Если они решают вопрос лицензионной чистоты - то его можно
решать на стороне сервера. Тоесть вести учёт одновременных коннектов и бить по рукам
за превышение лимита.
...
Рейтинг: 0 / 0
Вот это номер! CreatEvent - не работает!
    #38896317
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изопропилnamed pipe тогда используйте
С именованными трубками засада: серверную сторону свободно могут открыть сразу несколько
процессов. TCP сокеты, про которые я говорил выше, такого не позволят.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Вот это номер! CreatEvent - не работает!
    #38896334
13th
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry SibiryakovТак чё ж вы, такие все из себя сурьёзные, задаёте этот вопрос на форуме вместо того чтобы
обратиться прямо в техподдержку Windows?..

Пробовал. Там пц как долго всё. Спасибо что позвонили, ваш звонок очень важен для нас... и так дня на 3, пока первый чеволек хоть чтнб ответит.
...
Рейтинг: 0 / 0
Вот это номер! CreatEvent - не работает!
    #38896357
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakovсерверную сторону свободно могут открыть сразу несколько
процессов
а как же создание с FILE_FLAG_FIRST_PIPE_INSTANCE?
...
Рейтинг: 0 / 0
Вот это номер! CreatEvent - не работает!
    #38896495
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Еще маилслоты есть. Они вроде не должны открываться в нескольких экземплярах.
...
Рейтинг: 0 / 0
Вот это номер! CreatEvent - не работает!
    #38896502
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TЕще маилслоты есть. Они вроде не должны открываться в нескольких экземплярах.
Странная штука. Никогда не использовал.
...
Рейтинг: 0 / 0
Вот это номер! CreatEvent - не работает!
    #38896628
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,

да уж, мутант однозначно
этот на весь домен работать будет
авторThese messages are typically sent over a network to either a specified computer or to all computers in a specified domain. A domain is a group of workstations and servers that share a group name.

автору кажется такое не пойдёт
авторA mailslot is a mechanism for one-way interprocess communications (IPC). Applications can store messages in a mailslot.
опять мелкомягкие чудят, лучше такое не использовать
простенько сокет открыть с доступом только из локалхост и не жужжать
...
Рейтинг: 0 / 0
Вот это номер! CreatEvent - не работает!
    #38896650
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kealon(Ruslan)простенько сокет открыть с доступом только из локалхост и не жужжать

А вот это не сработает. На терминальном сервере у каждого терминала свой localhost.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Вот это номер! CreatEvent - не работает!
    #38896681
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakovу каждого терминал
winstation официально называется
...
Рейтинг: 0 / 0
Вот это номер! CreatEvent - не работает!
    #38898555
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakovkealon(Ruslan)простенько сокет открыть с доступом только из локалхост и не жужжать

А вот это не сработает. На терминальном сервере у каждого терминала свой localhost.

ну тогда формально это уже синхронизация нескольких компов и должен быть комп-диспетчер
...
Рейтинг: 0 / 0
Вот это номер! CreatEvent - не работает!
    #38898611
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну что тринадцатый? Придумал как ловить нарушителей лицензий?
...
Рейтинг: 0 / 0
Вот это номер! CreatEvent - не работает!
    #38898648
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kealon(Ruslan)mayton,

да уж, мутант однозначно
этот на весь домен работать будет
авторThese messages are typically sent over a network to either a specified computer or to all computers in a specified domain. A domain is a group of workstations and servers that share a group name.
Чего смутило? или гугл-переводчик страшно перевел?
Маилслоты это надстройка над UDP, поэтому можно слать как на конкретный комп, так и широковещательно по всей локалке. Про это написано.
kealon(Ruslan)автору кажется такое не пойдёт
Автору вобще слать ничего не надо. Он проверяет возможность создания именованного event`а как флаг того что программа запущена. Тут тоже самое.
Затестил, работает в терминале W7.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
#include <windows.h>
#include <stdio.h>

void  main(){
	HANDLE slot = CreateMailslot("\\\\.\\mailslot\\test", 424, 0, (LPSECURITY_ATTRIBUTES) NULL);
	if(slot == INVALID_HANDLE_VALUE) 
	{ 
		printf("CreateMailslot failed. Error %d\n", GetLastError());
	} else {
		printf("Mailslot open\n");
	}
	system("pause");
	CloseHandle(slot);
}
...
Рейтинг: 0 / 0
Вот это номер! CreatEvent - не работает!
    #38898650
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как устроена адресация в маилслотах
https://msdn.microsoft.com/ru-ru/library/windows/desktop/aa365147(v=vs.85).aspx ...
lpName [in]

The name of the mailslot. This name must have the following form:

\\.\mailslot\[path]name

The name field must be unique. The name may include multiple levels of pseudo directories separated by backslashes. For example, both \\.\mailslot\example_mailslot_name and \\.\mailslot\abc\def\ghi are valid names.

...

To write a message to a mailslot, a process uses the CreateFile function, specifying the mailslot name by using one of the following formats.
Format Usage
\\.\mailslot\name Retrieves a client handle to a local mailslot.
\\computername\mailslot\name Retrieves a client handle to a remote mailslot.
\\domainname\mailslot\name Retrieves a client handle to all mailslots with the specified name in the specified domain.
\\*\mailslot\name Retrieves a client handle to all mailslots with the specified name in the system's primary domain.

т.е. слушать можно только на своем компе, а отправлять на свой (считай через localhost), на конкретный комп, домен или вообще на все в локалке
...
Рейтинг: 0 / 0
Вот это номер! CreatEvent - не работает!
    #38898787
ART-CODE
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Или я не совсем понял задачу, или не совсем понял почему не рассматривается вариант
WMI запроса к списку процессов на интересующей машине.
Первая попавшаяся статья на тему WMI и процессов .
...
Рейтинг: 0 / 0
Вот это номер! CreatEvent - не работает!
    #38898816
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TЧего смутило? или гугл-переводчик страшно перевел?
Маилслоты это надстройка над UDP, поэтому можно слать как на конкретный комп, так и широковещательно по всей локалке. Про это написано.

заметь, в одну сторону и негарантировано
ну и нафига, чем напрямую UDP не катит? тож самое тока кода чуть поболе будет и админам проще
...
Рейтинг: 0 / 0
Вот это номер! CreatEvent - не работает!
    #38898823
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TМаилслоты это надстройка над UDP
Да щаззз. Эта штука, как и именно ванные трубки - более высокого уровня и может ходить по
любому протоколу. Хотя обычно ходит по TCP.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Вот это номер! CreatEvent - не работает!
    #38898899
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovDima TМаилслоты это надстройка над UDP
Да щаззз. Эта штука, как и именно ванные трубки - более высокого уровня и может ходить по
любому протоколу. Хотя обычно ходит по TCP.

Читам:

https://msdn.microsoft.com/ru-ru/library/windows/desktop/aa365130(v=vs.85).aspx The data in a mailslot message can be in any form, but cannot be larger than 424 bytes when sent between computers.
...
Mailslots can broadcast messages
...
To send messages that are larger than 424 bytes between computers, use named pipes or Windows Sockets instead.
https://msdn.microsoft.com/ru-ru/library/windows/desktop/aa365576(v=vs.85).aspx One important consideration is that mailslots broadcast messages using datagrams. A datagram is a small packet of information that the network sends along the wire. Like a radio or television broadcast, a datagram offers no confirmation of receipt; there is no way to guarantee that a datagram has been received.
Ничем UDP не напоминает? Ограниченный размер сообщения, возможность широковешательной рассылки, негарантированая доставка.
...
Рейтинг: 0 / 0
Вот это номер! CreatEvent - не работает!
    #38898910
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kealon(Ruslan)ну и нафига, чем напрямую UDP не катит? тож самое тока кода чуть поболе будет и админам проще
Мне например пригодилось , чтобы админов не напрягать открытием портов.
...
Рейтинг: 0 / 0
Вот это номер! CreatEvent - не работает!
    #38899408
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima Tkealon(Ruslan)ну и нафига, чем напрямую UDP не катит? тож самое тока кода чуть поболе будет и админам проще
Мне например пригодилось , чтобы админов не напрягать открытием портов.
т.е. ещё и дыра в безопасности?
...
Рейтинг: 0 / 0
Вот это номер! CreatEvent - не работает!
    #38899424
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kealon(Ruslan)Dima Tпропущено...

Мне например пригодилось , чтобы админов не напрягать открытием портов.
т.е. ещё и дыра в безопасности?
Ну в чем дыра-то? Про дыры там напиши, а то все какими-то мифическими дырами пугают, а конкретики никакой. Только сначала почитай, а то там уже много не в тему понаписали.
...
Рейтинг: 0 / 0
Вот это номер! CreatEvent - не работает!
    #38899684
13th
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
maytonНу что тринадцатый? Придумал как ловить нарушителей лицензий?
Я не нарушителей лицензий ищу. Но вообще - да, задачу решил. Я ж вверху написал.
...
Рейтинг: 0 / 0
Вот это номер! CreatEvent - не работает!
    #38899692
13th
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ART-CODEИли я не совсем понял задачу, или не совсем понял почему не рассматривается вариант
WMI запроса к списку процессов на интересующей машине.
Первая попавшаяся статья на тему WMI и процессов .
Без админских прав не определяются имена в соседней сессии.
...
Рейтинг: 0 / 0
Вот это номер! CreatEvent - не работает!
    #39114612
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Может пригодится кому.
Разбирался с той же проблемой. Объекты с именем Global\ работают из разных сессий, но надо дополнительно давать права доступа.

Копать в сторону параметра LPSECURITY_ATTRIBUTES lpEventAttributes.
На C# работает
Код: c#
1.
2.
3.
4.
5.
            var m_sec = new MutexSecurity();
            m_sec.AddAccessRule(new MutexAccessRule(new SecurityIdentifier(WellKnownSidType.WorldSid, null), MutexRights.FullControl, AccessControlType.Allow));

            Boolean is_new = false;
            Mutex mut = new Mutex(false, "Global\\TestMutex", out is_new, m_sec);

...
Рейтинг: 0 / 0
Вот это номер! CreatEvent - не работает!
    #39114628
Владимир2012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
13thВ общем, решение, похоже, такое.
1. Делаем OpenEvent с нашим ГЛОБАЛЬНЫМ именем. Если открылось - прилага уже запущена, делаем CloseHandle, выходим.
2. Если не открылось, и код ошибки ERROR_ACCESS_DENIED - мы в 7, 8, прилага открыта в другой сессии, выходим
3. Если не открылось, и код ошибки ERROR_FILE_NOT_FOUND - мы самые первые, делаем CreateEvent, запускаемся.

Проверил в XP, Server 2003, 7, 8, 8.1 работает. Надо бы ещё в Server 2012.
Вот потому-то в последнее время использую "Windows API замещение" в пользу сторонних библиотек, которые
работают адекватно в любой версии то-ли Windows, то-ли Linux
...
Рейтинг: 0 / 0
Вот это номер! CreatEvent - не работает!
    #39114761
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот тут пишут. Может поможет.

https://msdn.microsoft.com/en-us/library/ms682418(v=vs.85).aspx The name can have a "Global\" or "Local\" prefix to explicitly create the object in the global or session namespace. The remainder of the name can contain any character except the backslash character (\). For more information, see Kernel Object Namespaces. Fast user switching is implemented using Terminal Services sessions. Kernel object names must follow the guidelines outlined for Terminal Services so that applications can support multiple users.

The object can be created in a private namespace. For more information, see Object Namespaces.
...
Рейтинг: 0 / 0
52 сообщений из 52, показаны все 3 страниц
Форумы / C++ [игнор отключен] [закрыт для гостей] / Вот это номер! CreatEvent - не работает!
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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