10

Предположим, что какой-то автор ввел в свое приложение Windows единый экземпляр. Есть ли способ сделать несколько экземпляров этого приложения (кроме запуска внутри виртуальной машины или запроса автора переписать приложение)?

Если есть готовый инструмент, я бы хотел это знать. (Я пробовал песочницу и Altiris SVS без удачи).

Если там ничего нет, я хочу запрограммировать инструмент / хак, который позволит мне сделать это. Я ищу указатели с чего начать - что будет задействовано, какие навыки понадобятся. У меня умеренные навыки программирования на C и Java.

Если это невозможно, пожалуйста, объясните почему.

РЕДАКТИРОВАТЬ: Я знаю, что это плохая идея, но мне все еще нужно сделать это (по разным причинам). Я хочу общий способ, который работает для любого приложения и не вносит ошибок.

5 ответов5

3

Универсального способа не существует, потому что разные приложения используют разные методы. Небольшое количество приложений делают это просто для "удобства использования", но для многих других может быть веская причина для принудительного применения синглетонов. Обход этого может привести к повреждению данных или просто к невозможности запуска.

3

Вы можете запустить приложение на разных учетных записях пользователей, и проверка экземпляров больше не будет работать.

2

Многие приложения проверяют глобальный список процессов (с EnumProcesses, OpenProcess, GetModuleBaseName и аналогичных функций) или список окон (с EnumWindows, EnumChildWindows).

Вы можете попытаться установить перехват (см. Примеры SetWindowsHookEx, CallNextHookEx и т.д.), Чтобы перехватывать эти конкретные вызовы функций API из этого приложения и заменять запрошенные данные в ответ вашими, чтобы обмануть приложение.

2

Это возможно!

Вот изображение, на котором я выполняю период полураспада 1 4x в 4 окнах, подключенных к одному и тому же серверу локальной сети, единственная проблема заключается в том, что контроллеры не связаны независимо с каждым окном.

https://web.archive.org/web/20150315150158if_/http://img29.imageshack.us/img29/5642/yc0y.jpg

Для этого вам понадобится Process Explorer - программа, которая позволяет вам выполнять то, что известно как «Закрыть дескриптор» в подпроцессе \BaseNamedObjects \ValveHalfLifeLauncherMutex или что-то в этом роде. это не так сложно. перейдите сюда для получения подробных инструкций - http://am.half-lifecreations.com/forums/index.php?topic=479.0

Но да, это для периода полураспада, но получите Process Explorer, и я уверен, что вы сможете найти, какой дескриптор / процесс вам нужно закрыть, чтобы запускать программы, которые вы хотите запускать несколько раз.

В любом случае, я не понимаю, почему Windows не реализует запуск игр несколько раз в режиме разделения / привязки! это очевидно, потому что люди не купили бы столько ПК ... также проверьте SoftXSpand действительно круто, позволяет вам запускать несколько экземпляров окон в качестве независимых пользователей

1

Файлы блокировки, именованные каналы и события синхронизации являются одними из наиболее распространенных способов, используемых приложениями для проверки того, что они являются единственным запущенным экземпляром. Чтобы обойти блокировку файлов, вам нужно либо виртуализировать файловую систему, либо подключиться к ней, либо выполнить тщательно синхронизированное удаление (и это может не сработать, если оно также блокирует открытие файла). Именованные каналы и события синхронизации будут намного сложнее, потому что вы не обладаете тем же контролем извне приложения, что и с файлами.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .