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.
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.