Har gjort ett prg som jag vill ska kunna kolla om det finns en uppdatering tillgänglig. I tidigare versioner har jag kollat en textfil med hela numret (tex 1.20.0003.0023) och loopat varje tal i taget och jämfört med programmets egna ver. Kan man göra på nåt enklare sätt, får inte prg:et ett id eller nåt? Loopandet behöver du inte göra manuellt i alla fall. Du kan använda Version klassen och dess jämförelseoperatorer för att jämföra två versionsnummer. Mm... Hmm, vad är det som du vill uppnå? Har programmet "Program" som har ver 1.0.0.0. Det ska, när man väljer att söka efter uppdatering, på nåt sätt jämföra sin version mot en som finns på nätet, om det finns en nyare version av Program (tex 1.2) så ska det skickas ett shellkommando, typ "http://server/fil.exe" så att standardwebbläsaren öppnas för att ladda ner setup-filen. Jag hade använt mig av en WebService där man skickat in programnamnet/dllnamnet eller typen och sedan kollat på servern vilken version just den filen har och skickat tillbaka det nummret. Aha, den lösning som jag nämnde jobbar alltid med den senaste versionen, om du är "online" så kommer den automatiskt ta ned den senaste versionen. Hej WebService låter bra, men fallet är att servern jag ska ha filerna på antagligen inte tillåter server-skript. :-/ Den kanske inte ens är en Windowsserver... Nu finns det ett annat alternativ som du kanske borde kika på, "Updater Application Block" som finns på http://msdn.microsoft.com/library/en-us/dnbda/html/updater.asp Grejen med Updaterblocket är att den som default bara fungerar i det lokala nätet.Kontrollera versionsnummer mot uppdatering
Mr T @thomassida.cjb.netSv: Kontrollera versionsnummer mot uppdatering
MSSv: Kontrollera versionsnummer mot uppdatering
Får väl köra mot textfil så länge...
Mr T @thomassida.cjb.netSv: Kontrollera versionsnummer mot uppdatering
Ett scenario:
Du skapar en klient-applikation (WinForm) som använder en komponent (Class Library) och publicerar denna applikation på en webbserver, vilket gör att dina användare använder: http://servernsnamn/alternativkatalog/applikationen.exe för att köra applikationen. När du sedan vill publicera en ny version så kopierar du upp den nya versionen av komponenten (eller hela klienten för den delen) på webbservern och klienterna kommer automatiskt få den nya versionen när de är uppkopplade.
Klienten och komponent laddas också ned lokalt till C:\Windows\Assembly\Download cachen och möjliggör exekvering av applikationen även fast användaren inte sitter på nätverket!
Det finns dock lite att tänka på när det kommer till säkerheten, men det kan jag hjälpa till med om ovanstående scenario är vad du försöker att uppnå!
MvhSv: Kontrollera versionsnummer mot uppdatering
Problemet är kontrollen mot servern, om jag tex ska använda en textfil med versionnummer i som Program laddar ner och jämför med sin egen version...
Mr T @thomassida.cjb.netSv: Kontrollera versionsnummer mot uppdatering
Då behöver du aldrig fixa med versionnummer själv, utan det sköts helt automatiskt.
Säg att du har en fil som har versionsnummer 1.0.0.0 och den heter "test". När någon vill kontrolera om test har en nya version så skickar du ivägen en förfrågan till webservern efterversionsnummret, du skickar med namnet/typen på filen och så kollar servern efter versions nummret på den filen/typen på servern. Och så skickar du tillbaka det versionnummret. Är det nyare än det som finns på klienten så får man en fråga om man vill uppdatera.
Det betyder att om du gör om "test" till v. 1.0.1.0 så kommer din webservice känna av det själv utan att du behöver skriva något i någon text fil eller något sånt.
- MSv: Kontrollera versionsnummer mot uppdatering
Om du vill att användaren ska styra när uppdateringen ska tas ned så blir det nog till att skriva lite kod. Varför inte ha en webbservice där du ändå kommer att publicera filerna som kan svara på vilken version som är den senaste?
Här kommer lite kod som tar fram versionsnumret på den just nu exekverande koden under förutsättning att assemblyn är signerad med ett strongname.
<code>
Assembly thisAssembly = Assembly.GetExecutingAssembly();
Evidence ev = thisAssembly.Evidence;
IEnumerator enumerator = ev.GetEnumerator();
while(enumerator.MoveNext()){
if(enumerator.Current.GetType()==typeof(System.Security.Policy.StrongName)){
StrongName sn = (StrongName)enumerator.Current;
Console.WriteLine(sn.Version.ToString() + Environment.NewLine);
}
}
</code>
Som du ser i Console.WriteLine raden så kan du läsa av Version.
Kan det hjälpa dig?
MvhSv: Kontrollera versionsnummer mot uppdatering
Jag blev själv lite intresserad av detta. Hittade bland annat denna länken:
http://windowsforms.net/articles/appupdater.aspx kanske kan var nåt...
har inte testat själv...Sv: Kontrollera versionsnummer mot uppdatering
Mr T @thomassida.cjb.netSv: Kontrollera versionsnummer mot uppdatering
MvhSv: Kontrollera versionsnummer mot uppdatering
För att nå ut till andra köllor så som FTP, HTTP etc får du bygga en egen Downloader med IDownoader interfacet. Samma gäller egenvalideringsrutin. Ivalidator.
Fördelenär att du även får bygga detta block mkt bättre om du vill.
Mitt tips är att du först tar en kort titt på den särskilt den manifest xml som du skall ha på servern, se om den täcekr de behov du har.
//Johan N