ASPNL logo (1 kb)
Saturday, February 04, 2012




Microsoft MVP

.NET Codewise Community
<< vorige | overzicht | volgende >>

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

<< vorige | ^ naar boven | overzicht | volgende >>
copyright 2000-2007 ASPNL