Update checker maken

Status
Niet open voor verdere reacties.

Rodney15

Gebruiker
Lid geworden
2 mrt 2011
Berichten
44
Hallo leden,

Ik maak een programma en het enige wat nog ontbreekt is een update checker hoe maak ik dit en zet ik het erin.

Ik gebruik visual basic 2010

Is hier een makelijke handleiding voor die ik kan volgen?

Alvast bedankt voor de reacties:thumb:
 
Ja, dat klopt. Maar er kan ook meteen op updates gecontroleerd worden. (en dan hoef je zelf dus niet moeilijk lopen doen)

Dat heb ik al eens eerder geprobeerd, alleen toen kreeg ik foutmeldingen en het werkte niet. Dus toen heb ik het zo opgelost ;).
 
Dat heb ik al eens eerder geprobeerd, alleen toen kreeg ik foutmeldingen en het werkte niet. Dus toen heb ik het zo opgelost ;).

Met ClickOnce-deployment is het allemaal echter wel eenvoudiger. Op dit moment moet je alles nog zelf handmatig doen (laatste updates bijhouden @ server en zelf installeren @ client) en dat hoeft in het geval van ClickOnce-deployment niet. Je kan de laatste versie automatisch publiceren naar je hosting en bij het starten van je software wordt er automatisch op de opgegeven locatie gekeken of er een update beschikbaar is en indien dat zo is krijgt de gebruiker netjes de vraag of hij deze wenst te installeren.
 
waarom doet niet gewoon iemand die een werkde heeft ff die code op de site posten .. probleem opgelost of zijn we allemaal zo gierig ?
 
waarom doet niet gewoon iemand die een werkde heeft ff die code op de site posten .. probleem opgelost of zijn we allemaal zo gierig ?

Ik heb een werkende code (gepost in een thread waar ik de link reeds van heb gegeven) maar CoD_NL vindt dat het moeilijk doen is. (Waar hij misschien wel gelijk in heeft ;))
 
waarom doet niet gewoon iemand die een werkde heeft ff die code op de site posten .. probleem opgelost of zijn we allemaal zo gierig ?

Omdat er verwacht mag worden dat de TS er zelf ook enige moeite voor doet? Omdat er voor de door mij genoemde oplossing geen regel code geschreven hoeft te worden? Omdat dit niet de insteek van helpmij.nl is? Omdat ... ?
 
Ik heb een werkende code (gepost in een thread waar ik de link reeds van heb gegeven) maar CoD_NL vindt dat het moeilijk doen is. (Waar hij misschien wel gelijk in heeft ;))

Persoonlijk steek ik mijn tijd liever in de dingen die WEL toegevoegde waarde hebben. Om welke reden(en) vind jij bijvoorbeeld dat het hier beter is om een eigen implementatie te gebruiken? Als je hier geen antwoord op hebt dan heeft het dus ook geen nut om een eigen implementatie te schrijven.

En ja, je code werkt, maar het is wel erg slecht ontworpen. (edit: heb het dan meer als (nette) oplossing voor hetgeen dat de TS vraagt)
 
Laatst bewerkt:
Persoonlijk steek ik mijn tijd liever in de dingen die WEL toegevoegde waarde hebben. Om welke reden(en) vind jij bijvoorbeeld dat het hier beter is om een eigen implementatie te gebruiken? Als je hier geen antwoord op hebt dan heeft het dus ook geen nut om een eigen implementatie te schrijven.

Pardon? Voor mij heeft dit wel degelijk toegevoegde waarde! Als jouw 'simpele' oplossing (met Publish) voor mij niet werkt, dan probeer ik een andere oplossing te vinden. Ik ga niet eeuwig door op één iets. Jij doet het lekker op jouw manier, maar zeg dan alsjeblieft niet dat dit nutteloos is.

En ja, je code werkt, maar het is wel erg slecht ontworpen.

Bedankt, waarom?
 
Hmmm... als dat ClickOnce gebeuren zaken als Auto Update/Check For Update makkelijker maakt, ben ik geintereseert.
Maar is het niet zo dat als je gebruik wilt maken van ClickOnce, je altijd een Setup project voor je WinForms project moet maken? Want daar hou ik niet van, van setups. Ik wil gewoon alleen de Release executable en geen gehannes met setups. Kan ik dan nog wel gebruik maken van dat ClickOnce als ik geen setup wil?
 
Met ClickOnce krijg je idd van die irritante setupjes.
De manier van JoZ1 met die code is in mijn opzicht simpeler en makkelijker aan te passen, en je hebt geen Setup nodig.
 
Lekker dan.
Dan laat ik dat ClickOnce lekker links liggen en doe ik heel dat Check For Update gebeuren zelf wel.
 
Mijn excuses voor de late reactie, maar ik had i.v.m. ziek zijn weinig zin om een volledige post te gaan schrijven.

Pardon? Voor mij heeft dit wel degelijk toegevoegde waarde! Als jouw 'simpele' oplossing (met Publish) voor mij niet werkt, dan probeer ik een andere oplossing te vinden. Ik ga niet eeuwig door op één iets. Jij doet het lekker op jouw manier, maar zeg dan alsjeblieft niet dat dit nutteloos is.

Ja, maar de vraag is natuurlijk of het nog steeds toegevoegde waarde zou hebben als je de standaard functionaliteit aan de praat zou krijgen (mits deze dus aan je behoefte voldoet). In veel gevallen voldoet de standaard functionaliteit gewoon en is er mijns inziens geen reden om een eigen implementatie te schrijven.

Bedankt, waarom?

Omdat ik van mening ben dat er een aantal nadelen aan het gekozen ontwerp zitten:

- het hergebruik van de code (gezien ik zo'n functionaliteit niet voor elk project opnieuw wil gaan schrijven):

Het gekozen ontwerp is niet geschikt voor de meeste type van software. Nu vormt dat voor jou (op dit moment) wellicht geen probleem, maar wie zegt dat dit voor de TS ook geldt? Wat nu bijvoorbeeld als de update uit meerdere bestanden bestaat? Ja, het is mogelijk om meerdere bestandsnamen te embedden in je update code, maar wat nu als de update uit meer bestanden bestaat dan tijdens het schrijven van de versie die de gebruiker nog gebruikt bekend waren?

- de nadelen voor de gebruiker:

De gebruiker wordt zelf verantwoordelijk gesteld om de update te installeren. Nu valt het kopiëren van een bestand vanaf het bureaublad naar een bepaalde directory an sich wel mee, maar vervolgens moet ie ook nog de snelkoppeling(en) wijzigen (hoe moet het programma anders gestart worden (het bureaublad als home-folder is niet echt wenselijk)?) en hij moet de overgebleven bestanden weer verwijderen. An sich geen probleem zou je denken, maar niet elke gebruiker zal daar hetzelfde over denken (ik neem aan dat je weleens familie-leden hebt moeten helpen ;)). Voor die mensen wordt het gebruik van je software dus ook omslachtig (en zo blijven ze dus bijvoorbeeld gewoon de oude versie gebruiken en blijf jij ze maar een melding geven dat er een update is...), wederom niet echt wenselijk in mijn ogen.

- bestandsnaam gebruiken om versienummer te achterhalen:

Ben je zelf werkelijk van mening dat dit een elegante oplossing is om het versienummer te achterhalen? Dat behoeft verder toch geen uitleg als je er goed over nadenkt. Maar wellicht weet je gewoon geen nettere oplossingen.


Een beter ontwerp lijkt mij (indien je, zoals bij je huidige code het geval is, zeker weet dat de software maar uit een enkel bestand bestaat):

- online tekstbestand bijhouden met daarin het laatste versienummer
- versie-informatie gewoon uit de executable zelf halen: GetModuleFileName + GetFileVersionInfo
(indien de versienummers niet gelijk zijn is er dus sprake van een update)
- bij het updaten de oude versie (de hudige versie van jouw software dus) hernoemen naar iets als "filename_old.bin" (dat is immers mogelijk onder Windows) en de nieuwe update gewoon downloaden
in de directory van jouw applicatie met de juiste bestandsnaam (zo blijven dus ook alle snelkoppelingen gewoon werken zonder dat je er iets voor hoeft te doen)
- tijdens het opstarten van je applicatie controleren of er sporen van een update aanwezig zijn en indien aanwezig deze vervolgens op te ruimen

Uiteraard komt er iets meer bij kijken dan wat ik hierboven heb opgesomd, maar het is dus goed mogelijk om het zodanig te implementeren dat de gebruiker er totaal geen hinder van hoeft te ondervinden en dat de code ook zonder problemen toepasbaar is voor andere type applicaties. Zo zou je het update bestand in een eigen formaat kunnen stoppen zodat het geen probleem is om meerdere (onbekende) bestanden te kunnen toevoegen aan je update.

Maar is het niet zo dat als je gebruik wilt maken van ClickOnce, je altijd een Setup project voor je WinForms project moet maken? Want daar hou ik niet van, van setups. Ik wil gewoon alleen de Release executable en geen gehannes met setups. Kan ik dan nog wel gebruik maken van dat ClickOnce als ik geen setup wil?

Je wordt inderdaad geforceerd om een setup te gebruiken.
 
Ja, maar de vraag is natuurlijk of het nog steeds toegevoegde waarde zou hebben als je de standaard functionaliteit aan de praat zou krijgen (mits deze dus aan je behoefte voldoet). In veel gevallen voldoet de standaard functionaliteit gewoon en is er mijns inziens geen reden om een eigen implementatie te schrijven.

Tja, ik kreeg dus problemen met de ClickOnce update. Sowieso zijn die Setups niet handig en ik heb het probleem laten rusten (toen was het niet belangrijk). Toen zag ik het topic (waar ik mijn codes heb gepost). Ik heb daarop snel een code geschreven die het probleem (voor mij in ieder geval) oploste. Het was de bedoeling dat de TS niet alleen maar mijn code naar eigen wens aan zou passen. Het is zijn keuze geweest om het naar het bureaublad te plaatsten etc. Ik heb het hier btw over de TS van dit topic.


- het hergebruik van de code (gezien ik zo'n functionaliteit niet voor elk project opnieuw wil gaan schrijven):

Je kunt de code toch bewaren en gebruiken als je hem nodig hebt? Zo veel hoeft er niet per project aangepast te worden.

Wat nu bijvoorbeeld als de update uit meerdere bestanden bestaat?

Gewoon in een .ZIP-Archief zetten en dan laten uitpakken.

De gebruiker wordt zelf verantwoordelijk gesteld om de update te installeren. Nu valt het kopiëren van een bestand vanaf het bureaublad naar een bepaalde directory an sich wel mee, maar vervolgens moet ie ook nog de snelkoppeling(en) wijzigen (hoe moet het programma anders gestart worden (het bureaublad als home-folder is niet echt wenselijk)?) en hij moet de overgebleven bestanden weer verwijderen. An sich geen probleem zou je denken, maar niet elke gebruiker zal daar hetzelfde over denken (ik neem aan dat je weleens familie-leden hebt moeten helpen ). Voor die mensen wordt het gebruik van je software dus ook omslachtig (en zo blijven ze dus bijvoorbeeld gewoon de oude versie gebruiken en blijf jij ze maar een melding geven dat er een update is...), wederom niet echt wenselijk in mijn ogen.

Dit kan de TS helemaal naar eigen keuze aanpassen. Mijn code is alleen de basis.

Ben je zelf werkelijk van mening dat dit een elegante oplossing is om het versienummer te achterhalen? Dat behoeft verder toch geen uitleg als je er goed over nadenkt. Maar wellicht weet je gewoon geen nettere oplossingen.

Tja, hier heb je wel gelijk in ;). Ik zou natuurlijk de meest recente versie kunnen laten downloaden (gewoon alle uploaddata vergelijken).

- online tekstbestand bijhouden met daarin het laatste versienummer
- versie-informatie gewoon uit de executable zelf halen: GetModuleFileName + GetFileVersionInfo
(indien de versienummers niet gelijk zijn is er dus sprake van een update)
- bij het updaten de oude versie (de hudige versie van jouw software dus) hernoemen naar iets als "filename_old.bin" (dat is immers mogelijk onder Windows) en de nieuwe update gewoon downloaden
in de directory van jouw applicatie met de juiste bestandsnaam (zo blijven dus ook alle snelkoppelingen gewoon werken zonder dat je er iets voor hoeft te doen)
- tijdens het opstarten van je applicatie controleren of er sporen van een update aanwezig zijn en indien aanwezig deze vervolgens op te ruimen

Ik zal er eens naar kijken.

Bedankt voor de tips :thumb:
 
- online tekstbestand bijhouden met daarin het laatste versienummer
- versie-informatie gewoon uit de executable zelf halen: GetModuleFileName + GetFileVersionInfo
(indien de versienummers niet gelijk zijn is er dus sprake van een update)
- bij het updaten de oude versie (de hudige versie van jouw software dus) hernoemen naar iets als "filename_old.bin" (dat is immers mogelijk onder Windows) en de nieuwe update gewoon downloaden
in de directory van jouw applicatie met de juiste bestandsnaam (zo blijven dus ook alle snelkoppelingen gewoon werken zonder dat je er iets voor hoeft te doen)
- tijdens het opstarten van je applicatie controleren of er sporen van een update aanwezig zijn en indien aanwezig deze vervolgens op te ruimen[\quote]

Zo doe ik het dus ook.

Ik heb onlangs mn eigen update functie geschreven in mijn eigen dll project. Deze dll importeer ik dan in al mn projecten die een Check For Update functie nodig hebben. Op die manier hoef ik nooit de code op te zoeken en die vervolgens kopieeren en plakken in mn andere projecten. Om de update functie te gebruiken heb ik een paar properties die je opgeeft zoals het huidige versie nummer, de bestanden die opgehaald moeten worden en de locatie. En dat allemaal door alleen die dll te importeren.
 
Een andere mogelijkheid is overigens het schrijven van een (pre-)loader die het controleren en installeren van de updates voor rekening neemt. Op die manier hoef je jezelf niet met de update functionaliteit binnen het programma zelf bezig te houden. De loader controleert gewoon alvorens het programma gestart wordt op updates en installeert deze indien nodig (oude bestanden kunnen dan zonder problemen overschreven worden). En vervolgens wordt gewoon de laatste versie opgestart.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan