2010-12-07 11 views
0

Ist es möglich, das gesamte Bild eines anderen Prozesses in den Speicher zu laden? In einigen Wochen werden unsere IT-Mitarbeiter alle "zentralen" Netzwerk-Switches ersetzen. Dies wird das Netzwerk zum Absturz bringen. Dies wird nach den normalen Geschäftszeiten geschehen. Während dieser Zeit werden mehrere Benutzer weiterhin ein Programm verwenden, das ich geschrieben habe. Es wird ein Albtraum sein, lokale Kopien meines Programms auf dem Computer jedes Benutzers zu installieren. Das Programm läuft normalerweise von einer Netzwerkfreigabe. Das Programm greift nur dann auf das Netzwerk zu, wenn das Programm seinen ausführbaren (Bild-) Code ausführt. Wie kann ich den Windows Memory Manager dazu bringen, das gesamte Bild in den Speicher zu laden und dort zu "sperren", bis das Netzwerk wieder online ist?Locking sharable memory

Antwort

1

Dies wird nicht funktionieren.

Windows lädt nicht unbedingt eine "statische" Kopie der ausführbaren Datei in den Speicher, es ist frei, Teile zu teilen und Teile ein- und auszublenden. Oft lädt es Ressourcen (Bilder, Zeichenfolgen usw.) aus der ausführbaren Datei, nachdem das Programm gestartet wurde. Es lädt oft auch externe Bibliotheken dynamisch.

Edited hinzufügen:

Es gibt nicht so etwas als "ein ganzes Bild des Prozesses". Jeder Thread erhält beispielsweise eine eigene Zuordnung.

Vielleicht sollten Sie erklären, warum das Ausführen von einem anderen Speicherort (z. B. eine lokale Kopie der Binärdatei) nicht für Sie funktioniert.

+0

Ich bin dessen bewusst. Ich möchte das Bild in den Speicher sperren. Dazu gibt es eine VirtualLock-Funktion. Aber es erfordert nur den Aufrufprozess und ich muss auch die Basisadressen und die Länge jedes Abschnitts des Bildes herausfinden. – Mike

+0

Das Kopieren des Programms auf den lokalen Datenträger würde funktionieren, wenn der Zugriff auf einige Dateien beim Start nicht erforderlich wäre, die sich auf dem Server befinden. Es tut mir leid, dass ich das nicht erwähnt habe. Ich hatte gehofft, ein kleines Programm zu schreiben, das einige System-APIs aufrufen würde, um die Code- und Datenabschnitte der EXE in den Speicher zu "sperren". – Mike

1

Sie könnten es so schreiben, dass es sich lokal in ein temporäres Verzeichnis kopiert und dann diese Kopie als separaten Prozess ausführen lässt und sich dann selbst auslöschen (die erste Kopie). Ich habe diese kleine Jonglieraktion schon einmal gemacht, aber es hängt davon ab, wie Ihr Programm funktioniert, egal ob es aus dem temporären Verzeichnis ausgeführt wird oder nicht. Netto-Option:

+0

Das könnte funktionieren, aber er scheint zu sagen, dass sein Programm "installiert" werden muss. – egrunin

+0

@egrunin Yeh, darum habe ich mich gewundert. Wenn sie es einfach aus dem Netzwerk ausführen können, ohne es zu installieren, welchen Unterschied würde es machen, wenn es direkt an einen anderen Ort kopiert würde. Deshalb habe ich gesagt, es hängt davon ab, wie es funktioniert. – AaronLS

+0

Das ist eine interessante Idee, aber mein Programm benötigt beim Start einige Dateien, die im selben Verzeichnis wie das Programm vorhanden sein sollten. Ich habe eine andere Idee. Ich denke, wenn ich meine EXE mit einem EXE-Komprimierer wie UPX komprimiere, dann würde das dekomprimierte Bild als privat betrachtet werden und würde daher von der Auslagerungsdatei und nicht von dem Bild auf dem Server "gesichert" werden. Was denken Sie? – Mike