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.
źródło
Odpowiedzi:
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
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ć.
źródło
Możesz uruchomić aplikację na kontach różnych użytkowników, a sprawdzanie instancji nie będzie już działać.
źródło
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.
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
źródło
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.
źródło