Wie Sie eine assembly zu aktualisieren, die für ein ausführen von c# - Prozess (auch bekannt als hot-deploy)?
Habe ich eine .exe-assembly und eine Reihe von referenzierten Assemblys, die ich möchte in der Lage sein, zum bereitstellen von aktualisierten code für. Ich nicht brauchen, um tatsächlich das ausführen von code, aber das nächste mal, wenn ich starten Sie die ausführbare Datei, ich würde wollen, es zu Holen, die aktualisierten code. Derzeit, wenn ich versuche, kopieren Sie die Datei bekomme ich eine Fehlermeldung über die .exe wird von einem anderen Prozess verwendet.
Zu fassen; wie kann ich den code aktualisieren, während die .exe ist im Einsatz?
- Es scheint ein Projekt auf Codeplex zielt auf hot-deploy .NET. Ich habe es nicht versucht, aber: hotdeploy.codeplex.com
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ist es einfach zu tun. Sie können benennen Sie die Datei, Windows hat eine Sperre auf das handle, nicht den directory-Eintrag für die Datei. Jetzt können Sie einfach kopieren Sie das update ohne Probleme. Alles, was noch zu tun ist, um loszuwerden, die Datei umbenannt, nachdem Ihr die app wieder startet. Wenn nötig.
Ich glaube nicht, dass dies möglich ist. Zum Beispiel, wenn die Bereitstellung von asp.net Anwendungen mit null Ausfallzeit, best practice ist, um einen load balancer, so dass Sie nehmen kann, eine Instanz, update es, dann nehmen Sie die anderen für update.
Können Sie nicht aktualisieren Sie die assembly, wenn es in Gebrauch ist. Die beste option für diese Art von situation zu machen, ist eine kleine ausführbare Datei, die nicht einen Schatten Kopie Ihrer Versammlungen, und startet Sie von einem neuen Speicherort.
Diese Weise, wenn der Benutzer startet das Programm, Sie können shadow copy (lokal) von der Einsatzstelle kann jederzeit überschrieben werden.
ClickOnce gibt Ihnen einige Optionen. Es ist ein update-Strategie von "update nach dem Start der Anwendung."
Für komplexere Szenarien, da ist die System.Bereitstellung namespace. Sie können beispielsweise Abfragen in regelmäßigen Abständen für Aktualisierungen in der Anwendung.
Diese Klasse umbenennen der gegenwärtig aktiven, ausführbaren, wenn es abgeschlossen ist, ohne Ausnahme, Sie können schreiben Sie einfach die neue ausführbare Datei, dann relaunch, zB:
Einfach genug?
Nur eine Idee: Versuchen MEF und [Import["http://someRemoteResource"]]
Was über die folgenden:
überprüfen Sie die update-Ordner.
Programm
die vorhandene exe mit der man in die
update-Ordner
Die beste Idee wäre, eine der anderen Antworten schon angedeutet... wie mit der Neuzusammensetzung mit MEF und oder ClickOnce. Allerdings sind diese Lösungen nicht helfen, Sie für "das bereitstellen". Sie verlangen, dass Sie änderungen an der exe-Datei, oder erstellen Sie eine boot-strap, ausführbaren Datei, die nur Hilfe, die Sie für den nächsten bereitstellen.
Für das bereitstellen können Sie versuchen, dies zu tun (ich habe das noch nie gemacht, aber theoretisch könnte es klappen):
Den RunOnce-Schlüssel enthält Kommandozeilen-Befehle, die Ausgeführt werden, Sobald Sie auf neu starten, und dann aus der Registrierung entfernt, so dass Sie nicht erneut ausgeführt. Dies ist, wie InstallShield können Sie überschreiben bestimmte dll ' s, während Sie in Verwendung durch andere Anwendungen.