Jag arbetar på ett system med en server och flera klienter. Klienterna behöver ibland uppdateras på grund av förbättringar (till exempel buggar). Precis som du skriver går det ju inte att byta ut exe-filen genom att skriva över den. Jag funderar på om det skulle funka att ha huvudelen av programlogiken i en separat dll som Precis som Per skrev hade jag tänkt göra det, förutom att denna måste vara automatiserad (ett krav!). Mitt väldigt kreativa förslag: Gör en dll som uppdaterar, och den dll:en är den som skickas ut (ev. tillsammans med själva uppdateringen.) Dll:en uppdaterar sedan programmet. På så vis slipper du bry dig om att uppdateraren måste uppdateras ;) Ja det vore ju ett sätt! Alternativt då att ladda ned o köra nya klienten med någon parameter, så den kopierar sig själv och sedan kör kopian. Klockrent! Varför uppfinna hjulet igen? Titta på ClickOnce Deployment (dotnet 2.0) För att starta om programmet efter att allt laddats hem skulle man kunna låta applikationen skapa ett event i schedulern med trig strax efter nu som startar om applikationen.Klienter som uppdaterar sig själva
Klienten laddar själv ned nya versioner av klienten (sig själv), detta är inget problem.
Här kommer mitt dilemma: Klienten ska nu byta ut sig själv mot den nya klienten och sedan starta sig den nya, vilket är omöjligt då klienten måste vara avstängd under utbytet.
En lösning vore att ha ännu ett program som sköter själva utbytet. Men det är inte heller bra, eftersom då krävs ännu mer kod för att sedan uppdatera uppdateraren (ifall det behövs).
Bättre vore att låta klienten skriva ett tillfälligt skript som sedan utför bytet under tiden klienten är avstängd.
Säkerligen måste det finnas någon som vet hur man ska göra detta på bästa sätt. Detta är ju inget ovanligt problem.
Tack på förhandSv: Klienter som uppdaterar sig själva
Men däremot kan man byta namn på den.
Jag har löst detta så att klienten laddar hem den nya versionen under ett annat namn t.ex. xxx.ex_
Sedan byter jag namn på xxx.exe till xxx.old
och sedan nytt namnbyte på xxx.ex_ till xxx.exe
Sedan uppmanar jag användaren att avsluta och starta om applikationen.
Den delen kan man kanske också automatisera men så långt vill jag inte gå i min applikation.
Glöm bara inte att allra först radera en ev gammal xxx.old annars blir det problem.
[EDIT] OOps, tänkte inte på att detta var .net forumet, min lösning fungerar i vb6, har inte testat i .net.Sv: Klienter som uppdaterar sig själva
efter nedladdning blir basklassen för huvudprogrammet. Det som krävs då är väl att huvudprogrammet
har en funktion där den laddar ner denna uppdatering under unikt namn, ev. raderar föregångaren och sedan låter referensen till basklassen peka på denna nya dll. Aldrig testat detta, men borde funka!
Kan bli problem om du vill registrera den i GAC:en under gemensamt GUID.Sv:Klienter som uppdaterar sig själva
Och det är just den biten som det blir problem eftersom jag måste då ha någon kod i annat program (eller dll), vilket jag inte heller vill eftersom då måste möjlighet att uppdatera just den koden (uppdateraren) också.
Det är fullt möjligt att klienterna kommer vara helt självgående i flera dygn, och ska inte kräva någon användare som underhåller dem.Sv: Klienter som uppdaterar sig själva
Sv:Klienter som uppdaterar sig själva
Sv: Klienter som uppdaterar sig själva
Det fungerar utmärkt.Sv:Klienter som uppdaterar sig själva
I en annan tillämpning som går obevakad har jag ett skript som körs med visst interval av schedulern och som kollar att appen går, om inte startas den. Det beror ju på hur länge du kan acceptera att appen är nere vid en omstart.