Meine Software-DLL-Patches werden unter Windows 10 nicht aktualisiert

473
sams

Ich habe auf Windows 10 bereits vorhandene Dateien (dll, .exe, .msi), die ich durch Versenden einiger Patches aktualisieren möchte. Das Problem ist jedoch während des Updates, wenn eine der Dateien verwendet wird, und ich versuche, die Datei zu aktualisieren, indem sie durch eine neue, aktualisierte Datei ersetzt wird. Windows fordert ein Fenster zum Löschen einer Datei für die vorhandene Datei an. Wenn wir "Ja" sagen, wird dies angezeigt als erfolgreich gelöscht, aber nicht gelöscht, bis der letzte Benutzer die Datei freigibt. Danach wird die neue aktualisierte Datei an dieser Stelle nicht ersetzt.

Bearbeiten: Das Poster hat in einem Kommentar darauf hingewiesen, dass sein Problem auf registrierte DLLs bezogen ist.

-1
"Ich versuche zu aktualisieren, indem ich einige Patches schicke", welche Patches bitte erklären. Moab vor 6 Jahren 0
Wie treiben Sie diese Updates genau heraus? Ramhound vor 6 Jahren 0
Patches meiner Software - eine Reihe von .exes Push-to-Client sams vor 6 Jahren 0

2 Antworten auf die Frage

2
DavidPostill

Wie ersetze ich eine verwendete DLL?

Dynamic-Link-Bibliotheksaktualisierungen

Es ist manchmal notwendig, eine DLL durch eine neuere Version zu ersetzen. Führen Sie vor dem Ersetzen einer DLL eine Versionsprüfung durch, um sicherzustellen, dass Sie eine ältere Version durch eine neuere Version ersetzen. Es ist möglich, eine verwendete DLL zu ersetzen. Die Methode, mit der Sie die verwendeten DLLs ersetzen, hängt vom verwendeten Betriebssystem ab. Unter Windows XP und höher sollten Anwendungen isolierte Anwendungen und Side-by-Side-Assemblies verwenden .

Es ist nicht erforderlich, den Computer neu zu starten, wenn Sie die folgenden Schritte ausführen:

  • Verwenden Sie die MoveFileExFunktion, um die ersetzte DLL umzubenennen. Geben Sie nicht an MOVEFILE_COPY_ALLOWEDund stellen Sie sicher, dass sich die umbenannte Datei auf demselben Volume befindet, auf dem sich die Originaldatei befindet. Sie können die Datei auch einfach im selben Verzeichnis umbenennen, indem Sie sie mit einer anderen Erweiterung versehen.
  • Kopieren Sie die neue DLL in das Verzeichnis, das die umbenannte DLL enthält. Alle Anwendungen verwenden jetzt die neue DLL.
  • Verwenden Sie MoveFileExmit MOVEFILE_DELAY_UNTIL_REBOOT, um die umbenannte DLL zu löschen.

Bevor Sie diesen Ersatz vornehmen, verwenden Anwendungen die ursprüngliche DLL, bis sie entladen wird. Nach dem Ersetzen verwenden Anwendungen die neue DLL. Wenn Sie eine DLL schreiben, müssen Sie darauf achten, dass sie auf diese Situation vorbereitet ist, insbesondere wenn die DLL Informationen zum globalen Status enthält oder mit anderen Diensten kommuniziert. Wenn die DLL nicht für eine Änderung der Informationen zum globalen Status oder der Kommunikationsprotokolle vorbereitet ist, müssen Sie beim Aktualisieren der DLL den Computer neu starten, um sicherzustellen, dass alle Anwendungen dieselbe Version der DLL verwenden.

Aktualisierungen der Source Dynamic Link Library (Windows)


So ersetzen Sie verwendete Dateien beim Neustart von Windows

Dieser Artikel beschreibt eine andere Methode, mit der Sie Dateien ersetzen können, die von Windows verwendet werden. Diese Methode verwendet die Registrierung, um eine Datei beim Start zu ersetzen, bevor Windows auf die Datei zugreift.

Die folgenden Schritte zeigen, wie die Win32k.sys-Datei in dem %SystemRoot%\System32Ordner durch die Win32k.sys-Datei ersetzt wird, die sich in dem Ordner C: \ Temp befindet. Sie können Variationen dieser Methode verwenden, um Dateien zu ersetzen, wenn Ihre Windows-Installation startfähig ist.

  1. Starten Sie den Registrierungseditor (Regedt32.exe).
  2. Suchen Sie den folgenden Schlüssel in der Windows-Registrierung:
    • HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager
  3. Erstellen Sie einen neuen Wert, indem Sie die folgenden Informationen verwenden:
    • Wertname: PendingFileRenameOperations
    • Datentyp : REG_MULTI_SZ
    • Wertdaten: \\ \ c: \ temp \ win32k.sys! \\ \ c: \ winnt \ system32 \ win32k.sys
    • Beachten Sie, dass die Wertdaten in zwei separaten Zeilen eingegeben werden.
  4. Beenden Sie den Registrierungseditor.
  5. Starte den Computer neu.

Quelle Ersetzen der verwendeten Dateien beim Neustart von Windows

Dies funktioniert nicht für registrierte DLLs. harrymc vor 6 Jahren 0
@ harrymc Dann sollte der Benutzer seine Frage aktualisieren, wobei registrierte DLLs nicht erwähnt werden. DavidPostill vor 6 Jahren 0
Es steht in den Kommentaren, aber ich habe es jetzt für ihn getan. harrymc vor 6 Jahren 0
1
harrymc

Der korrekte Weg zum Ersetzen einer DLL ist:

  • Benennen Sie die DLL-Datei um
  • Speichern Sie die neue DLL-Datei unter dem richtigen Namen
  • Die umbenannte Datei wird gelöscht, wenn sie nicht mehr verwendet wird.

Bei registrierten DLLs müssen Sie sie vor Ort abmelden und die neue Version registrieren. Der Vorgang der Abmeldung (wenn ein Installationsprogramm ausgeführt wird) erkennt in Verwendung befindliche DLLs und warnt Sie, dass Sie einen Neustart durchführen müssen. Das bedeutet auch, dass die DLLs nicht geladen werden können (sobald sie nicht registriert sind), während Sie neue Dateien kopieren oder neue Dateien registrieren.

Sie sollten Ihren Patch daher als Installationsprogramm verteilen. Sie können beispielsweise das kostenlose Inno-Setup verwenden . Als ich es zuletzt verwendet habe, mussten Sie die Attribute der zu installierenden DLLs festlegen, um die Registrierung und die erneute Registrierung durchzuführen. Der Prozess läuft dann automatisch ab, ohne dass eine spezielle Programmierung von Ihrer Seite erforderlich ist.

Wenn Sie Ihren Patch nicht als Installationsprogramm verteilen können, sollten Sie ihn beim Start als einmalig festlegen und einen Neustart erforderlich machen. Weitere Informationen finden Sie im Artikel Ausführen eines Programms nur einmal beim Booten in Windows, was einige Registrierungsarbeiten erfordert.

harrymc wir reden über die registrierten dlls sams vor 6 Jahren 0
@sams Sie haben nicht erwähnt, dass diese DLLs registriert wurden. Diese gelten ohnehin nur für COM-Bibliotheken. Ramhound vor 6 Jahren 0
@sams: Ich habe einen Teil für registrierte DLLs hinzugefügt. harrymc vor 6 Jahren 0