Angenommen, ein Autor hat seine Windows-Anwendung als Einzelinstanz erzwungen. Gibt es eine Möglichkeit, mehrere Instanzen dieser Anwendung zu erstellen (abgesehen von der Ausführung in einer virtuellen Maschine oder der Aufforderung an den Autor, die App neu zu schreiben)?
Wenn es ein fertiges Tool gibt, würde ich es gerne wissen. (Ich habe Sandboxie und Altiris SVS ohne Glück ausprobiert).
Wenn es da draußen nichts gibt, möchte ich ein Tool / einen Hack programmieren, mit dem ich dies tun kann. Ich suche nach Hinweisen, wo ich anfangen soll - was involviert sein wird, welche Fähigkeiten benötigt würden. Ich habe moderate Programmierkenntnisse in C und Java.
Wenn dies nicht möglich ist, erklären Sie bitte warum.
EDIT: Ich weiß, es ist eine schlechte Idee, aber ich muss es noch tun (aus verschiedenen Gründen). Ich möchte eine generische Methode, die für jede Anwendung funktioniert und keine Fehler verursacht.
quelle
Antworten:
Viele Anwendungen überprüfen die globale Liste der Prozesse (mit EnumProcesses, OpenProcess, GetModuleBaseName und ähnlichen Funktionen) oder die Liste der Fenster (mit EnumWindows, EnumChildWindows).
Sie können versuchen, den Hook festzulegen (siehe Beispiele SetWindowsHookEx, CallNextHookEx usw.), um diese spezifischen API-Funktionsaufrufe von dieser Anwendung zu verknüpfen und die angeforderten Daten als Antwort durch Ihre zu ersetzen, um die Anwendung zu täuschen.
quelle
Es gibt keinen generischen Weg, da verschiedene Anwendungen unterschiedliche Methoden verwenden. Bei vielen Methoden wird versucht, eine maschinenweite (oder zumindest benutzerweite) Ressource abzurufen (z. B. ein benanntes Synchronisationsobjekt, eine Datei mit einem bekannten Namen und Speicherort oder einen Registrierungswert). Wenn die App erfolgreich ist, enthält sie diese Ressource, solange sie ausgeführt wird. Wenn dies fehlschlägt, weil eine andere Instanz die Ressource bereits enthält, versucht sie möglicherweise, die ursprüngliche Instanz zu signalisieren, damit sie antworten kann.
In 16-Bit-Windows hat das Betriebssystem beim Start eines Programms ein eindeutiges Handle namens HINSTANCE übergeben. Es wird auch der HINSTANCE eines aktuell ausgeführten Prozesses mit derselben ausführbaren Datei (falls vorhanden) übergeben. In jenen Tagen war dies wahrscheinlich die häufigste Methode für das Programm, um festzustellen, ob bereits eine Kopie ausgeführt wurde. In 32-Bit-Windows mit geschütztem Speicher, prozessspezifischen Adressräumen und dem Ende des kooperativen Multitasking hatten die HINSTANCEs nicht mehr dieselbe Bedeutung.
Eine kleine Anzahl von Apps tut dies einfach aus Gründen der "Benutzerfreundlichkeit", aber für viele andere gibt es möglicherweise einen guten Grund, Singletons durchzusetzen. Umgehen, das zu Datenbeschädigung führen oder einfach nicht ausgeführt werden kann.
quelle
Sie können die Anwendung auf verschiedenen Benutzerkonten ausführen, und die Instanzprüfung funktioniert nicht mehr.
quelle
Es ist möglich!
Hier ist ein Bild von mir, wie ich die Halbwertszeit 1 4x in 4 Fenstern ausführe, die alle mit demselben LAN-Server verbunden sind. Das einzige Problem ist, dass die Controller nicht unabhängig mit jedem Fenster verbunden sind.
Dazu benötigen Sie 'Process Explorer' - ein Programm, mit dem Sie den so genannten 'Close Handle' für den Unterprozess '\ BaseNamedObjects \ ValveHalfLifeLauncherMutex' ausführen können. es ist nicht so schwer. Detaillierte Anweisungen finden Sie hier - http://am.half-lifecreations.com/forums/index.php?topic=479.0
Aber ja, das ist für die Halbwertszeit, aber holen Sie sich den Prozess-Explorer und ich bin sicher, dass Sie herausfinden können, welches Handle / welchen Prozess Sie schließen müssen, damit die gewünschten Programme mehrmals ausgeführt werden.
Ich verstehe nicht, warum Windows das Ausführen von Spielen nicht mehrmals in Splits / Snaps als Feature implementiert! Es ist klar, weil die Leute nicht so viele PCs kaufen würden ... Schauen Sie sich auch SoftXSpand an, das wirklich fantastisch ist und es Ihnen ermöglicht, mehrere Instanzen von Windows als unabhängige Benutzer auszuführen
quelle
Sperrdateien, Named Pipes und Synchronisationsereignisse sind einige der häufigsten Methoden, mit denen Anwendungen überprüfen, ob sie die einzige ausgeführte Instanz sind. Um Sperrdateien zu umgehen, müssten Sie entweder das Dateisystem virtualisieren, sich daran anschließen oder einen sorgfältig zeitgesteuerten Löschvorgang durchführen (und dies funktioniert möglicherweise nicht, wenn die Datei auch geöffnet wird). Named Pipes und Synchronisationsereignisse sind viel schwieriger, da Sie außerhalb der Anwendung nicht die gleiche Kontrolle haben wie mit Dateien.
quelle
In Windows 8 und höher halten Sie die Umschalttaste gedrückt und klicken auf das Programmsymbol / die Schaltfläche in der Taskleiste. Dadurch wird die ausführbare Datei erneut gestartet. Wenn die App nicht selbst nach Klonen sucht, wird ein neues Fenster angezeigt.
Dies führt natürlich möglicherweise zu Konflikten mit den internen Dateien der App, wenn beispielsweise eine interne SQLite-Datei geöffnet wird. Sie müssen also wirklich wissen, was Sie tun, oder es ist Ihnen egal, ob etwas kaputt geht.
quelle