.NET 2.0: Eenvoudig installeren met ClickOnce
Door Michiel van Otegem
13 augustus 2008
Bij het ontwikkelen van applicaties staan twee wensen meestal lijnrecht tegenover elkaar. Aan de ene kant moet de
applicatie eenvoudig uit te rollen zijn, en aan de andere kant moet de applicatie gebruiksvriendelijk zijn. Voor het
eerste is een thin client applicatie het handigst, terwijl voor het tweede een desktop applicatie beter is. ClickOnce
kan beide wensen tegelijkertijd verwezenlijken.
Wanneer een nieuwe applicatie ontwikkeld moet worden moet er meestal een keuze gemaakt worden tussen twee typen
applicaties: een thin client (web) applicatie of een desktop applicatie. Het voordeel van een thin client applicatie
is dat deze eenvoudig uitgerold en bijgewerkt kan worden, omdat slechts de server(s) bijgewerkt moet worden. Het
nadeel van een thin client is echter dat gebruikersinterface minder mogelijkheden kent door de beperkingen van een
web browser. Verder kan een thin client ook geen gebruik maken van de mogelijkheden die de client computer biedt,
evenals de kracht van de hardware van de machine. Dat is ook meteen de kracht van een desktop applicatie, want die
maakt juist optimaal gebruik van de client computer. Het nadeel is echter weer dat een desktop applicatie
geinstalleerd moet worden op ieder werkstation. Voor een beheerder die tientallen of misschien zelfs duizenden
computers moet onderhouden niet bepaald een pretje. En dan hebben we het nog niet eens over de beveiligingsoverwegingen.
Een geïnstalleerde applicatie heeft over het algemeen namelijk toegang tot onderdelen van het systeem die mogelijk
misbruikt kunnen worden door een kwaadwillige applicatie. Om die reden hebben de meeste grote organisaties een zeer
strikt beleid met betrekking tot wat wel en niet geïnstalleerd mag worden op een computer. Alleen die reden is vaak al
genoeg om "toch maar" een web applicatie te maken. Het .NET Framework biedt met Code Access Security (CAS) dat
behandeld is in "Verfijnde beveiliging" in NetOpus nummer 6 van 2005 een beveiligingsmodel dat uitvoer van kwaadaardige
code niet mogelijk maakt op basis van de security policy die geldt voor de applicatie. Samen met ClickOnce, dat
onderdeel uitmaakt van .NET Framework 2.0, geeft CAS mogelijkheid om ondanks de eerder genoemde problematiek toch een
desktop applicatie te ontwikkelen, doordat ClickOnce een installatiemodel biedt dat zeer gebruiksvriendelijk is voor
beheerders.
Het idee van ClickOnce is dat een applicatie naar een centrale locatie gepubliceerd wordt. Dit kan een web- of ftp-
server zijn, of een share op een file server. De gebruiker krijgt een link naar deze locatie, bijvoorbeeld via email
of het intranet, en gebruikt die om de applicatie te starten. Dat is vergelijkbaar met een web applicatie, maar het
verschil is dat door de link te volgen, een desktop applicatie geïnstalleerd en gestart wordt. De gebruiker hoeft bij
de installatie niets in te stellen, want dat doet ClickOnce automatisch. Het proces van publiceren en installeren is
schematisch weergegeven in Afbeelding 1.
Afbeelding 1, Schematisch weergave van ClickOnce
Dat een applicatie meteen geïnstalleerd wordt klinkt als een vraag om problemen. Want als een applicatie zomaar
geïnstalleerd kan worden, biedt dit dan niet ook voor kwaadwilligen een geweldige manier om kwaadaardige applicaties
te installeren? ClickOnce heeft meerdere lagen van beveiliging om dit te voorkomen. De eerste laag zorgt dat een
applicatie pas geïnstalleerd na bevestiging van de gebruiker, met een personal firewall of de firewall van Windows XP
SP2 meestal zelfs meerdere keren. Om de juiste keuze te maken krijgt de gebruiker eerst informatie over de applicatie
te zien, waaronder de uitgever van de applicatie. De informatie over de uitgever wordt gegeven door het certificaat
dat aan de applicatie gekoppeld is. Wanneer een gebruiker applicaties vanaf het internet installeert is het dus
verstandig om te controleren of het een certificaat betreft dat afgegeven is door organisaties als VeriSign, DigiCert
of Thawte. Wanneer er geen certificaat gekoppeld is, krijg je een waarschuwing te zien dat de uitgever onbekend is,
zoals te zien in Afbeelding 2. In dat geval is het uiteraard niet verstandig de applicatie te installeren, hoewel dan
de tweede laag beveiliging in actie komt.

Afbeelding 2, Bevestigingsscherm van een ClickOnce applicatie
De tweede laag van beveiliging wordt gevormd door een zogenaamde sandbox, een omgeving die afgeschermd is van de rest
van het systeem, waarbinnen de applicatie wordt uitgevoerd. Een applicatie die binnen deze sandbox draait heeft
slechts beperkte rechten. Deze sandbox is gebaseerd op Code Access Security (CAS) en de precieze rechten die een
ClickOnce applicatie heeft hangt daarom af van de locatie van waar de applicatie opgehaald wordt. Applicaties die
onder de Internet security policy vallen hebben bijvoorbeeld beduidend minder mogelijkheden dan die onder de Intranet
security policy vallen. Het handige van deze methodiek is dat het ook mogelijk is een custom security policy aan te
maken die aan de hand van een hash, de uitgever van de applicatie, of de strong name van de assemblies bepaalt wat de
rechten zijn van de applicatie. Dit biedt organisaties de mogelijkheid om security policies uit te rollen naar
werkstations die (ClickOnce) applicaties meer of minder rechten geven dan de security policy waar de applicaties
standaard onder uitgevoerd zouden worden.
Hoe werkt ClickOnce?
Wanneer een ClickOnce applicatie gepubliceerd wordt, wordt een zogenaamd installatiemanifest aangemaakt en gepubliceerd
naar de publicatie locatie. Het installatiemanifest vertelt de ClickOnce Runtime die onderdeel uitmaakt van .NET 2.0
waar de applicatie vandaan geïnstalleerd moet worden. Dat hoeft niet per definitie dezelfde locatie als het
installatiemanifest te zijn. Verder biedt het informatie over de versie, de uitgever en wat er precies geïnstalleerd
moet worden. Wanneer de gebruiker de publicatie link gebruikt en ervoor kiest om de applicatie te installeren, wordt
eerst het installatiemanifest opgehaald, en daarna eventueel de te installeren applicatiebestanden. Om ervoor te
zorgen dat de applicatie altijd in de veilige sandbox draait, worden ClickOnce applicaties automatisch op een speciale
locatie geïnstalleerd, te weten de ClickOnce Cache die te vinden is in C:\Documents and Settings\<gebruikersnaam>\Local Settings\My Applications.
Kopieer je de bestanden van daar naar een andere locatie op de harde schijf, dan krijgt de applicatie wel de volledige
rechten die de gebruiker ook heeft. Omdat dit potentieel gevaarlijk is moet je dit eigenlijk nooit doen! Zoals je kunt
zien aan de installatie locatie is een ClickOnce installatie gebonden aan een gebruiker. Als een andere gebruiker op
dezelfde machine werkt en de applicatie ook wil gebruiken, moet de applicatie voor die gebruiker apart geïnstalleerd
worden. Doordat .NET applicaties relatief klein zijn en harde schijven tegenwoordig zeer groot zijn is dat echter geen
probleem.
De minimumeis voor ClickOnce is uiteraard dat .NET 2.0 geïnstalleerd moet zijn. Dit zal lang niet altijd het geval
zijn, en het kan ook zijn dat de applicatie nog andere eisen heeft. ClickOnce biedt de mogelijkheid om aan te geven
welke zaken de applicatie nodig heeft om uitgevoerd te kunnen worden, zoals te zien in Afbeelding 3.

Afbeelding 3, Vereisten voor de applicatie opgeven
Als er additionele vereisten zijn kun je de installatiebestanden daarvan aanbieden bij je applicatie, of deze van de
fabrikant daarvan op laten halen. Deze onderdelen zullen naar alle waarschijnlijkheid niet met ClickOnce geïnstalleerd
kunnen worden, dus is er (helaas) meer nodig van de gebruiker. In een grote organisatie zullen gebruikers zelf deze
onderdelen waarschijnlijk niet eens kunnen installeren, dus is hier toch weer een taak weggelegd voor de systeembeheerder.
Deze feature heeft daarom alleen toegevoegde waarde voor mensen die wat meer controle over hun computer hebben. Een
scenario waarin dit handig kan zijn is wanneer een bedrijf een (consumenten) applicatie aanbiedt die over het internet
gebruikt wordt en die online verkoopt.
Offline vs. Online
ClickOnce biedt twee verschillende typen installaties: online en offline. Bij een online applicatie start de gebruiker
de applicatie altijd via de link naar de publicatie locatie. Als de benodigde bestanden al aanwezig zijn op de computer
wordt de applicatie automatisch uitgevoerd. Aangezien de link eerst gevolgd wordt om het installatiemanifest van de
applicatie op te halen kan de applicatie alleen uitgevoerd worden als de gebruiker online is. Als het installatiemanifest
wordt opgehaald wordt meteen gecontroleerd of er inmiddels een nieuwere versie gepubliceerd is. Als dat zo is wordt de
bestaande applicatie automatisch bijgewerkt met de nieuwe versie. Overigens is het versienummer gerelateerd aan het
ClickOnce publicatie mechanisme en heeft deze in principe niets te maken met het versienummer van de applicatie en/of
assemblies van die in de applicatie gebruikt worden. Hoewel dat onzinnig is zou je dezelfde versie van een applicatie
daarom opnieuw kunnen publiceren met een nieuw publicatie versienummer. ClickOnce zou dit dan zien als een nieuwe
versie van de applicatie. Het publicatie versienummer staat daarom apart vermeld in de Publish tab van de project
instellingen van een applicatie, zoals te zien in Afbeelding 4.
Afbeelding 4, Configuratie van ClickOnce publicatie
Bij een offline applicatie wordt een snelkoppeling aangemaakt in het Start Menu van Windows, zodat de gebruiker de
applicatie direct kan starten en er niet per sé een netwerk verbinding hoeft te zijn. Als zodanig lijkt een offline
applicatie veel op een regulier geïnstalleerde applicatie. Dit uit zich ook in het feit dat de applicatie bij de
geïnstalleerde software komt te staan die je via het configuratiescherm kunt opvragen. Van daaruit kan de applicatie
dus eventueel ook verwijderd worden. Met een offline applicatie zijn er meer mogelijkheden met betrekking tot het
bijwerken van de applicatie wanneer een nieuwe versie beschikbaar is. Het is mogelijk om net als bij offline
applicaties automatisch te controleren of er een nieuwe versie is en deze eerst te installeren. Het is echter ook
mogelijk om de nieuwe versie tijdens het uitvoeren te installeren, er van uitgaande dat dit de applicatie hierdoor
niet onderuit gaat door rigoureuze wijzigingen. Als alternatief kun je de applicatie ook volgens een bepaald interval,
bijvoorbeeld iedere 7 dagen, laten controleren of er een nieuwe versie is. Een aardig is dat aangegeven kan worden
wat de minimale versie is die geïnstalleerd moet zijn. Op die manier kunnen belangrijke (beveiligingsupdates) verplicht
gesteld worden. Wanneer het huidige versienummer nieuwer is dan het laagst verplichte versienummer, heeft de gebruiker
de mogelijkheid om installatie te weigeren, zoals te zien in Afbeelding 5. Ook kan de gebruiker in dat geval via het
configuratiescherm kiezen om terug te gaan naar de voorgaande versie door de nieuwere versie te verwijderen, zoals te
zien in Afbeelding 6. Naast de mogelijkheden die ClickOnce standaard biedt, kunnen ontwikkelaars via de ClickOnce API
zelf bepalen hoe applicaties, of delen daarvan, bijgewerkt worden.

Afbeelding 5, Bevestigen dat een update geïnstalleerd moet worden

Afbeelding 6, Applicatie verwijderen of terug gaan naar vorige versie
Wat kan ClickOnce niet?
ClickOnce is niet de heilige graal voor desktop applicaties. Er zijn namelijk beperkingen aan de mogelijkheden van een
ClickOnce applicatie. Zoals eerder al gezegd wordt de applicatie per gebruiker geïnstalleerd. Het is daarom bijvoorbeeld
niet mogelijk om gedeelde assemblies te installeren in de Global Assembly Cache. De installatie is volledig
geautomatiseerd en kan niet aangepast worden. Als er dus informatie nodig is van de gebruiker of over de machine, of
er moeten bijvoorbeeld keys in de registry geplaatst worden of instellingen gedaan worden aan Component Services, dan
is ClickOnce geen oplossing. In dat geval zul je net als voorheen de keuzes moeten afwegen tussen een thin client
applicatie en een desktop applicatie die bijvoorbeeld vanuit een MSI-bestand wordt geïnstalleerd. Overigens zal
ClickOnce in Windows Vista verder uitgebreid worden sommige van de huidige beperkingen mogelijk weggenomen.
Dit artikel is eerder verschenen in NetOpus, november 2005.
|