Uruchom wiele instancji dowolnej aplikacji Windows

10

Załóżmy, że jakiś autor wymusił, aby jego aplikacja Windows była pojedynczą instancją. Czy jest jakiś sposób na wykonanie wielu wystąpień tej aplikacji (poza uruchomieniem wewnątrz maszyny wirtualnej lub zażądaniem od autora przepisania aplikacji)?

Jeśli istnieje gotowe narzędzie, chciałbym to wiedzieć. (Próbowałem piaskownicy i Altiris SVS bez szczęścia).

Jeśli nic tam nie ma, chcę zaprogramować narzędzie / hack, które pozwoli mi to zrobić. Szukam wskazówek, gdzie zacząć - co będzie zaangażowane, jakie umiejętności będą potrzebne. Mam umiarkowane umiejętności programistyczne w C i Java.

Jeśli nie można tego zrobić, proszę wyjaśnić dlaczego.

EDYCJA: Wiem, że to zły pomysł, ale wciąż muszę to zrobić (z różnych powodów). Chcę ogólny sposób, który działa dla każdej aplikacji i nie wprowadza błędów.

Jus12
źródło
3
Aplikacje Windows domyślnie nie są singletami. Jeśli tak, oznacza to, że ktoś wkłada dodatkowy wysiłek, aby uczynić go singlem i prawdopodobnie ma ku temu powód.
In silico
1
Zależy od tego, jak aplikacja sprawdza wiele kopii. Różne aplikacje sprawdzają się na różne sposoby, a niektóre aplikacje sprawdzają się na wiele sposobów.
ho1
Jak mówi In Silico, prawdopodobnie nie jest to dobry pomysł. Aplikacja może uszkodzić dane, spowodować awarię lub spowodować inne problemy, jeśli uruchomionych jest wiele kopii, gdy nie są one przeznaczone.
ho1
Proces może egzekwować na wiele sposobów, uruchamiając tylko jedną instancję; Nie sądzę, aby możliwe było zbudowanie ogólnego narzędzia, które mogłoby temu zapobiec. Będziesz musiał zbadać każdą aplikację indywidualnie i napisać coś specjalnie dla niej stworzonego.
Czy znalazłeś rozwiązanie?
Tomas

Odpowiedzi:

2

Wiele aplikacji sprawdza globalną listę procesów (za pomocą EnumProcesses, OpenProcess, GetModuleBaseName i podobnych funkcji) lub listę okien (z EnumWindows, EnumChildWindows).

Możesz spróbować ustawić hak (zobacz przykłady SetWindowsHookEx, CallNextHookEx, itp.), Aby połączyć te specyficzne wywołania funkcji API z tej aplikacji i zastąpić żądane dane w odpowiedzi na swoje, aby oszukać aplikację.


źródło
Dziękuję za wszystkie odpowiedzi. Myślę, że narzędzie wymaga starannego zaprojektowania. Przewidywane narzędzie powinno być w pewnym sensie bardzo lekkim wirtualnym środowiskiem systemu operacyjnego, które nie wymaga uruchamiania pełnej kopii systemu Windows, ale oszukuje wszystkie aplikacje.
Jus12
3

Nie ma ogólnego sposobu, ponieważ różne aplikacje używają różnych metod. Niewielka liczba aplikacji robi to po prostu dla „użyteczności”, ale dla wielu innych może być dobry powód do egzekwowania singletonów. Omijanie, które może prowadzić do uszkodzenia danych lub po prostu nie działać.

Adrian McCarthy
źródło
3

Możesz uruchomić aplikację na kontach różnych użytkowników, a sprawdzanie instancji nie będzie już działać.

Tomas
źródło
2

To jest możliwe!

Oto obraz mojego okresu połowicznego rozpadu 1 4x w 4 oknach wszystkich podłączonych do tego samego serwera LAN, jedynym problemem jest to, że kontrolery nie są niezależnie połączone z każdym oknem.

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

Aby to zrobić, potrzebujesz 'Process Explorer' - programu, który pozwala ci robić tak zwany 'Close Handle' w podprocesie 'BaseNamedObjects ValveHalfLifeLauncherMutex' lub coś takiego. to nie jest takie trudne. przejdź tutaj, aby uzyskać szczegółowe instrukcje - http://am.half-lifecreations.com/forums/index.php?topic=479.0

Ale tak, to dla okresu półtrwania, ale pobierz Process Explorer i upewnij się, że będziesz w stanie znaleźć uchwyt / proces, który musisz zamknąć, aby programy były uruchamiane wielokrotnie.

Nie widzę powodu, dla którego Windows nie implementuje uruchomionych gier wielokrotnie w podziale / przyciąganiu jako funkcji! jest to oczywiste, ponieważ ludzie nie kupiliby tak wielu komputerów PC ... sprawdź również SoftXSpand naprawdę niesamowicie, pozwala na uruchamianie wielu wystąpień okien jako niezależnych użytkowników

Tonton
źródło
Zamknij mutant handle działa dla mnie. Nie jest to okres półtrwania, ale użycie muteksu po stronie programisty jest dość powszechne, więc to rozwiązanie jest rodzajowe.
AZ.
1

Blokowanie plików, nazwanych potoków i zdarzeń synchronizacji to niektóre z powszechnych sposobów sprawdzania, czy aplikacje są jedyną działającą instancją. Aby obejść pliki blokujące, trzeba albo wirtualizować system plików, zaczepić go, albo wykonać starannie zaplanowane usuwanie (a to może nie zadziałać, jeśli zablokuje również otwarty plik). Nazwane potoki i zdarzenia synchronizacji będą znacznie trudniejsze, ponieważ nie masz takiej samej kontroli spoza aplikacji, którą wykonujesz z plikami.

the_mandrill
źródło