Работа с Mutant'ами26.09.2011, 12:58. Показов 2191. Ответов 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, работа с базовой формой Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop?
Ниже её машинный перевод.
После долгих разбирательств я наконец-то вернула себе. . .
|
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод
Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод.
Thinkpad X220 Tablet —. . .
|
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта
Симптом:
После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
|
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
|
Новый ноутбук
volvo 07.12.2025
Всем привет.
По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне:
Ryzen 5 7533HS
64 Gb DDR5
1Tb NVMe
16" Full HD Display
Win11 Pro
|
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
|
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов
На странице:
https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/
нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
|
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов.
. . .
|
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
|