c # - omdøb et løbende program - farligt?

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg skriver et lille værktøj til at opdatere vores ansøgning.


For at opdatere opdateringsværktøjet vil jeg gerne omdøbe det selv under kørsel og kopiere den nye version fra en fjernkilde. Så næste gang du starter opdateringen, har du en ny version.


Kender du til eventuelle problemer, der kan opstå, ved hjælp af denne mekanisme?


Faktisk var jeg overrasket over det hele muligt at omdøbe et løbende program (mistet en kage der ...), mens sletning ikke er tilladt.


Med venlig hilsen


ved hjælp af Win XP, .NET 3.5

Bedste reference


Du kan omdøbe - fordi det kun ændrer metadata, men den egentlige filfordelingskæde er umodificeret, hvilket betyder, at de kan forblive hukommelseskortede i den proces (er), der bruger den.


Dette er et allestedsnærværende trick i installatører, når de skal opgradere 'live' kørende binære filer.


Det kan forårsage problemer, hvis applikationen forsøger at genåbne senere fra den oprindelige filspecifikation. Dette er ikke noget, der regelmæssigt sker med eksekverbare filer eller dll'er, selvom du bør være opmærksom på embedded ressourcer og programmer, der kan gøre nogle selvcertificering (licens checks). Det er normalt bedst at genstarte den tilsvarende applikation hurtigere end ret senere, ligesom Windows vil opfordre dig til at genstarte systemopdateringer

Andre referencer 1


Omdøbning af en .exe er normalt mulig uden problemer - omdøbning .dll er s helt anden historie.


Jeg foreslår at bruge underkataloger i stedet (mærket med datoen eller versionsnummeret) og oprette et lille launcher-program (med samme navn og ikon som dit 'rigtige' program), der læser den aktuelle version fra en tekstfil og lancerer den.


dvs.


updater.exe (the launcher)
updater.config (containing /updater\_v\_02/updater.exe)
 /updater\_v\_01/updater.exe (the real app, v 01)
 /updater\_v\_02/updater.exe (the real app, v 02)


På denne måde kan du



  • Hold flere versioner af din ansøgning rundt

  • Test en ny version (ved direkte at starte den fra underdir), mens dine brugere fortsætter med at bruge den gamle version

  • skift DLL'er osv. uden besvær