Работа с Mutant'ами26.09.2011, 12:58. Показов 2197. Ответов 16
Метки нет (Все метки)
Проблема следующая:
Есть приложение, копию которого можно запустить, только если убить в нем один Mutant. Я написал консольное приложение, которое запускается, уничтожает этот Mutant и закрывается. Копия приложения открывается успешно. Задача решена. Теперь я хочу перенести свой код в программу WPF, перенес все классы, код запускается по нажатию кнопки, убивает Mutant, со стороны вроде всё нормально, проверяю ProcessExplorer'ом, действительно мутант убит, но копия приложения не открывается. Копия открывается только после завершения моей WPF программы. Создается впечатление что WPF программа, не отпускает убитый Mutant пока не завершится. Как можно исправить проблему? Нужно чтобы все нормально убивалось без завершения WPF программы. Сталкивался кто-нибудь с этим?
0
|
|
| 26.09.2011, 12:58 | |
|
Ответы с готовыми решениями:
16
Нужна летиратура, в которой бы описывались работа с событиями, работа с элементами управления Работа - проведение обучающих семинаров по C#. Работа по выходным дням ( сб-вс - 32 часа). От 30 000р. Работа с Меню. Сохранение, печать, создать новый. Работа с рисованием |
| 26.09.2011, 18:44 [ТС] | |
|
Хэндлы окна, если я не ошибаюсь то то-же самое что и Mutex Добавлено через 6 минут Есть конечно и другой вариант, из WPF Программы запускать по кнопке консольное приложение, которое будет открываться, работать, закрываться, и все счастливы. Но не хочется таскать за собой лишний экзешник, вшить в прогу можно его как-нибудь?
0
|
|
|
87 / 86 / 13
Регистрация: 21.10.2010
Сообщений: 349
|
||||||
| 26.09.2011, 19:02 | ||||||
0
|
||||||
|
|
|
| 26.09.2011, 19:03 | |
|
Можно вообще компилировать прогу из какого-то кода. То есть запускаешь свою программу и жмёшь кнопку, прога компилит определённый код и появляется эксешник, но в твоём случае это походу перебор будет, да и надо ли оно вообще. Проще наверное эксешник таскать или поместить эксешник в ресурсы программы и при нажатии извлекать его и запускать, потом наверное удалять (если нужно).
Добавлено через 55 секунд Дык надо чтобы один экземпляр приложения запускался что ли?
0
|
|
|
87 / 86 / 13
Регистрация: 21.10.2010
Сообщений: 349
|
|
| 26.09.2011, 19:03 | |
|
Кидаешь это в MainWindow в метод инициализации окна.
0
|
|
| 26.09.2011, 19:19 [ТС] | ||||
![]()
0
|
||||
|
87 / 86 / 13
Регистрация: 21.10.2010
Сообщений: 349
|
|
| 26.09.2011, 19:24 | |
|
Данный код убивает копию программы.
0
|
|
| 26.09.2011, 19:30 [ТС] | |
|
Мне не нужно убивать копии, темболее своей программы=) Прочитайте пожалуйста еще раз пост с проблемой
0
|
|
|
|
||
| 26.09.2011, 20:12 | ||
|
Ты написал консольное приложение, всё пашет, ты хочешь перенести на WPF, но там не пашет? Так покажи код консольной проги (ну думаю он не сверхсекретный, при желании и усидчивости например я сам спокойно нагуглю что к чему (если там не нужно быть супер продвинутым хакером) и напишу свою запускалку). И покажи как ты используешь этот код в WPF. Только подробнее, тупо показать 1 метод ничего не показать, покажи как и откуда ты его вызываешь например. Или вообще весь код. С этого и нужно было начинать мне кажется. А поместить консольное приложение в ресурсы конечно можно, но мне кажется надо делать не через одно место и решать проблемы, а не обходить их используя костыли.
0
|
||
| 26.09.2011, 21:14 [ТС] | ||||||
|
код нагуглить можно, но он довольно объемный (около 400 строк), с вызовом WinApi функций
да ты понял меня правильно, но - код работает и в wpf приложении и в консольном, но пока приложение открыто (и консольное и wpf мое), новая копия игры не запускается (хотя мьютекс удален). стоит только закрыть приложение , и копия игры сразу запускается, всвязи с этим складывается впечатление, что приложение не до конца мьютекс убивает, и как будто держит до закрытия. вот код основного класса, остальные опустил, но вроде интуитивно понятно немного.
0
|
||||||
| 26.09.2011, 23:42 [ТС] | |
|
Вычитал что с помощью дупликейтхэндла только и можно удалить.
Выходит проблема может быть в нем? в этой копии?
0
|
|
|
|
||
| 27.09.2011, 00:18 | ||
|
Это конечно предположение сделанное вообще наугад, но может надо второй хэндл закрывать? CloseHandle Может кто-то что-нибудь скажет, если разбирается?
1
|
||
|
Почетный модератор
|
|
| 27.09.2011, 01:02 | |
|
EatingPeopleIsFun, на самом деле всё должно быть не так сложно. Если посмотреть внутрь метода GetHandles, то Вы увидите что он использует 2 метода: getObjectTypeName и getObjectName (притом по несколько раз), и в каждом из этих методов вызывается DuplicateHandle, т.е. происходит копирование одного объекта по несколько раз, и после использования объекты не закрываются, а остаются висеть в Вашем приложении (а мьютексы, скорее всего глобальные, поэтому если он существует в каком-то приложении, то и нужное Вам приложение уже считает себя запущенным).
Вывод: закройте объекты после использования, в каждом из методов (используйте Win32Api.CloseHandle(ipHandle)). Попробуйте...
1
|
|
| 27.09.2011, 08:32 [ТС] | |
|
Проанализировал свою программу через ProcessExplorer. Когда запускаю ёё, и она ищет мьютексы, то копирует кучу хэндлов из окна игры: Key, File, Process, Thread, а также и наши Mutantы.
и Действительно они висят в проге, SSTREGG,Casper-SC, вы были правы. Пробежал по коду, в getObjectTypeName не было CloseHandle - добавил. В коде, который показывал здесь немного раньше, тоже добавил. В итоге => Мьютексы которые мне нужны высвобождаются из программы, и всё заработало! копии запускаются, спасибо большое! И один недочёт, что делать с той горой мусора которая всё таки остается висеть в программе? По хорошему её надо как то вычищать? Она возникает из-за ошибок в реализации?
0
|
|
|
Почетный модератор
|
|||
| 28.09.2011, 00:59 | |||
|
1
|
|||
| 28.09.2011, 00:59 | |
|
Помогаю со студенческими работами здесь
17
Работа формы в фоне, вне фокуса (работа с раскладкой клавиатуры) Количество подведенного и отведенного тепла, работа сжатия, работа расширения
Symfony2, работа с типом Collection, работа с базовой формой Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога
Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
|
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование
. \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json>
Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом.
# Check if. . .
|
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так:
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347
Основана на STM32F303RBT6.
На борту пять. . .
|
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
|
|
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу,
и светлой Луне.
В мире
покоя нет
и люди
не могут жить в тишине.
А жить им немного лет.
|
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила»
«Время-Деньги»
«Деньги -Пуля»
|
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога
Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
|