Запустіть кілька примірників будь-якої програми Windows


11

Припустимо, якийсь автор примусив його додаток Windows бути єдиним екземпляром. Чи є спосіб зробити кілька примірників цього додатка (окрім запуску всередині віртуальної машини або прохання автора переписати додаток)?

Якщо є готовий інструмент, я хотів би це знати. (Я без спроби спробував пісочницю та Altiris SVS).

Якщо там нічого немає, я хочу запрограмувати інструмент / хак, який дозволить мені це зробити. Я шукаю вказівники, з чого почати - з чого буде задіяно, які навички знадобляться. У мене є вміння програмування на С та Java.

Якщо цього неможливо зробити, поясніть, чому.

EDIT: Я знаю, що це погана ідея, але мені все одно потрібно це зробити (з різних причин). Я хочу загальний спосіб, який працює для будь-якої програми та не вносить помилок.


3
Програми для Windows за замовчуванням не є однотонними. Якщо вони є, це означає, що хтось докладе додаткових зусиль, щоб зробити це синглом і, мабуть, має для цього причину.
In silico

1
Залежить від того, як програма перевіряє наявність кількох копій. Різні програми перевіряють по-різному, а деякі додатки перевіряють декількома способами.
ho1

Як каже In Silico, це, мабуть, не дуже гарна ідея. Додаток може пошкодити дані, вийти з ладу або викликати інші проблеми, якщо у вас буде запущено кілька копій, коли вони не призначені для цього.
ho1

Є багато способів, як процес може примусити працювати лише один екземпляр; Я не думаю, що можливо побудувати загальний інструмент, здатний запобігти цьому. Вам доведеться вивчити кожну програму окремо і написати щось спеціально для неї.

Ви знайшли рішення?
Томаш

Відповіді:


2

Багато додатків перевіряють глобальний перелік процесів (за допомогою EnumProcess, OpenProcess, GetModuleBaseName та подібні функції) або список вікон (за допомогою EnumWindows, EnumChildWindows).

Ви можете спробувати встановити гачок (див. Зразки SetWindowsHookEx, CallNextHookEx тощо), щоб підключити ці конкретні виклики функцій API з цієї програми та замінити запитувані дані у відповідь на ваші, щоб обдурити додаток.


Дякую за всі відповіді. Я думаю, інструмент потребує ретельної конструкції. Передбачуваний інструмент повинен бути дещо схожим на дуже легке віртуальне середовище ОС, яке не передбачає запуску повної копії вікон, але все ж обдурює всі програми.
Jus12

4

Не існує загального способу, оскільки різні програми використовують різні методи. Багато методів передбачають намагання отримати якийсь загальномашинний (або, принаймні, загальнокористувацький) ресурс (наприклад, названий об'єкт синхронізації, файл із відомим ім'ям та місцеположенням або значенням реєстру). Якщо додаток успішно, то він зберігає цей ресурс, поки він працює. Якщо це не вдається, оскільки інший екземпляр вже містить ресурс, він може спробувати подати сигнал оригіналу, щоб він міг відповісти.

У 16-розрядної Windows, коли програма запускалася, ОС передала їй унікальну ручку під назвою HINSTANCE. Також буде передано HINSTANCE поточно запущеного процесу, використовуючи той самий виконуваний файл (якщо такий є). У ті часи це був, мабуть, найпоширеніший спосіб, щоб програма дізналася, чи копія вже запущена. У 32-розрядних Windows, із захищеною пам’яттю, адресними просторами, специфічними для процесу, та кінцем спільної багатозадачності, HINSTANCE більше не мають того самого значення.

Невелика кількість додатків робить це просто для «зручності використання», але для багатьох інших може бути вагомий привід примусити синглів. Обхід цього може призвести до пошкодження даних або просто не вдається запустити.


3

Ви можете запускати програми на різних облікових записах користувачів, і перевірка примірників більше не працюватиме.


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 дійсно приголомшливий, дозволяє вам запускати кілька примірників Windows як незалежних користувачів


Закрити ручку-мутант працює для мене. Це не період напіввиведення, але використання мютексу на стороні програміста є досить поширеним, тому це рішення є загальним.
AZ.

Це не тому, що люди не купують більше ПК. Це тому, що розробники хотіли лише одиночних екземплярів.
Веслі Довгий

1

Файли блокування, названі труби та події синхронізації - це один із поширених способів використання програм для перевірки, що вони є єдиним запущеним екземпляром. Щоб обійти файли блокування, вам доведеться віртуалізувати файлову систему, підключити до неї або зробити ретельно приурочене видалення (і це може не працювати, якщо він також блокує файл відкритим). Іменовані канали та події синхронізації будуть набагато складнішими, оскільки ви не маєте такого ж контролю з-за програми, яка використовується з файлами.


0

У Windows 8 і новіших версіях ви тримаєте клавішу Shift і натискаєте на піктограму / кнопку програми на панелі завдань. Це запустить виконуваний файл знову. Якщо додаток не перевірить наявність клонів, у вас з’явиться нове вікно.

Це, звичайно, може створити конфлікти з внутрішніми файлами програми, якщо він відкриється, наприклад, внутрішнім файлом sqlite, тому ви дійсно повинні знати, що ви робите, або не байдуже, якщо щось зламається.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.