Applicaties distribueren met ClickOnce
Vandaag de dag kiest men vaak voor het ontwikkelen van een Web applicatie in tegenstelling tot een Windows applicatie. Ook al biedt een Windows client een rijkere gebruikersinterface, performance, de mogelijkheid om offline te werken, integreert het beter met andere client applicaties en maakt deze gebruik van de kracht van de PC. De reden voor een web applicatie is vaak enkel gelegen in het feit dat deze makkelijker dan desktop applicaties is uit te rollen en bij te werken.
Een bijkomend voordeel van een webapplicatie is dat er geen eisen zijn aan de client, anders dan een browser, waardoor klassieke problemen als “DLL hell” en conflicten met andere geïnstalleerde applicaties niet opduiken.
In dit artikel kijken we naar de ClickOnce technologie die onderdeel uitmaakt van het Microsoft .NET 2.0 Framework. Deze technologie kan de keuze voor web of client wel eens vaker in de richting van het tweede doen verschuiven. We kijken via welke stappen we een applicatie beschikbaar kunnen maken via ClickOnce.
ClickOnce ontwerp
Het mechanisme van ClickOnce is beschikbaar in Visual Studio 2005 en bouwt voort op de No-Touch deployment features van .NET 1.1. Ook maakt het gebruik van de Microsoft Updater Application Block.

Met ClickOnce wordt het uitrollen van een Windows Forms applicatie net zo makkelijk als een Web applicatie. De installatie wordt aangeboden via een webpagina en via een link op deze pagina kan de client de benodigde bestanden ophalen en de applicatie gebruiken. Het updaten kan gebeuren door nieuwe bestanden op de server te plaatsen. Er is geen reden om iedere client langs te gaan.
Wanneer een gebruiker een ClickOnce applicatie in de browser start, start deze eigen een link die wijst naar een deployment manifest bestand. Dit deployment manifest heeft de extensie “.application”. Web servers waarop het .NET Framework 2.0 is geïnstalleerd bevatten een MIME filter voor dit bestandstype dat de Deployment Framework Service (DFS) aanroept. De DFS leest het deployment manifest, zoekt de huidige versie van de applicatie in de applicatie bibliotheek, en start het.
Is de applicatie eenmaal geïnstalleerd op de client, dan zorgt een .NET Framework component op de client er voor dat iedere keer dat een gebruiker de applicatie start controleert voor updates van de applicatie. In het ontwerp van het Updater Application Block is dit de Updater Controller. Deze controller leest een lokaal exemplaar het het deployment manifest om de update settings van de applicatie te controleren. De eerste taak is het vinden van antwoord op de vraag “moet ik controleren voor updates?”. Als dat niet zo is, dan start de applicatie met de lokaal aanwezige bestanden uit de programmafolder. Het werk van de controler zit er dan op. Als de update settings in het manifest echter vragen om een check voor updates, dan wordt de lokatie van de deployment provider gelezen (dit is de URL waar het oorspronkelijke deployment manifest staat) and roept deze aan om te zien of er een update is. De applicatie wordt dan, indien een update blijkt, bijgewerkt en vervolgens gestart.
Stapsgewijs een ClickOnce applicatie uitrollen
In de volgende stappen wordt uiteengezet hoe een applicatie via ClickOnce gedistribueerd kan worden. De stappen worden uitgevoerd met Visual Studio 2005, release candidate 1.
NB: tijdens het schrijven van dit artikel viel op dat de webserver enkele MIME extensies niet herkende. Daardoor worden voor ClickOnce essentiële bestanden als .deploy, .manifest en .application niet via IIS aangeboden. Om dit recht te zetten moeten deze extensies eerst toegevoegd worden. Open hiervoor de Internet Information Server management console. Selecteer de servernaam en klik met de rechtermuisknop om het Eigenschappen-scherm te openen. Kies MIME-types om het volgende scherm te openen.

Voeg nu de volgende exensies toe (Exension - MIME Type):
· deploy - application/octet-stream
· manifest – text/xml
· application – application/deployment
Als deze extensies ingevoerd zijn, moet de IIS webserver (enkel de service) herstart worden. Pas dan zijn de nieuwe MIME types beschikbaar. Nu kunnen de volgende stappen succesvol worden uitgevoerd.
Stap 1: maak een Windows Forms applicatie
· Open Visual Studio 2005
· Kies New Project uit het File menu
· Selecteer een Windows Application template in de gewenste taal (VB.NET, C#)
· Noem het project “ClickOnceDemo” en klik OK
· Zet een label op het Form en geef deze de waarde “versie 1.0”
Stap 2: Publiceer naar een webserver
· Kies uit het Build-menu voor Publish ClickOnceDemo

· Er verschijnt een wizard met de vraag waar de applicatie gepubliceerd moet worden.

Je kunt hier de gewenste optie invoeren. Houdt er rekening mee dat voor het gebruik van een http:// lokatie de betreffende webserver moet beschikken over Frontpage Server Extensions. In het voorbeeld kiezen we voor ftp.
· Het volgende scherm vraagt of de applicatie via een site, share of cd-rom geïnstalleerd wordt.

Hier geven we de URL op waar de pagina met de link naar de applicatie te vinden zal zijn.
· Vervolgens wordt gevraagd of de applicatie zowel on-line als off-line gestart mag worden.

· Het laatste scherm (nu ja, niet het laatste zoals we zullen zien) vertelt dat alles klaar is om te publiceren

· Omdat we hebben gekozen voor het publiceren naar een FTP lokatie, wordt gevraagd om de inloggegevens

· Als de publicatie is gelukt verschijnt het volgende venster in een Browser

Het zal wellicht opvallen bij het uitvoeren van deze stappen dat er een bestand aan het project wordt toegevoegd. Dit bestand, ClickOnceDemo_TemporaryKey.pfx, is een publisher certificaat dat gebruikt wordt om de applicatie te signen wanneer het wordt gepubliceerd. Visual Studio zet dit certificaat ook je persoonlijke certificate store. Meer informatie over deze publishers informatie vind je hier.
Stap 3: De applicatie installeren en uitvoeren
· Open een browser en navigeer naar http://<jouwserver>/ClickOnceDemo/publish.htm
· Klik op de Install button
· Het volgende scherm verschijnt omdat de publisher niet bekend is

· Als we meer informatie willen zien krijgen we het volgende scherm

· Klik op de Install button in het eerdere scherm en de applicatie wordt geïnstalleerd.
· De applicatie wordt automatisch gestart, maar is ook terug te vinden onder het Startmenu.
Stap 4: De applicatie updaten
· Ga terug naar de Visual Studio 2005 ontwikkelomgeving
· Zet de waarde van het label op 1.1
· Compileer de applicatie en kies Publish OneClickDemo uit het Build-menu
· De Wizard verschijnt opniew. Kies direct voor Finish om dezelfde instellingen te behouden.
· Ga via het Start-menu naar ClickOnceDemo en het volgende scherm verschijnt.

· De applicatie kan nu geupdate worden en gestart
· Als de update teruggedraaid moet worden, kan men naar de “Add or Remove Programs” console gaan (via het configuratiescherm, of via appwiz.cpl vanaf de commandprompt). Klik op Change/Remove en het volgende scherm verschijnt.

Instellingen
De stappen tot nu maken gebruik van de default instellingen. Het is mogelijk om per project de standaard instellingen aan te passen naar eigen wens. Kies hiervoor het eigenschappenscherm van het project en kies het Publish tabblad.

De publishing location kan een website, ftp server of netwerk share zijn. De URL vanaf waar de applicatie gedownload en geïnstalleerd kan worden kan afwijken van deze lokatie. De in de Wizard aangegeven installatie modus (offline of enkel online) kan ook hier veranderd worden. Onder Prerequisites… kan ingesteld worden welke componenten essentieel zijn voor de juiste werking van de applicatie. Via Updates… kan je instellen op welke manier op nieuwe versies gecontroleerd moet worden.

Onder Options… vinden we mogelijkheden om additionele informatie zoals de Publisher name en support URL in te vullen.

Security
De default instellingen van de applicatie staan op FullTrust. FullTrust betekent dat de applicatie allerlei activiteiten op de client kan uitvoeren (mits filesystem rechten dit bijvoorbeeld niet tegenhouden). Over het algemeen is dit een verkeerde standaard instelling, om de volgende redenen:
· Een applicatie met Full Trust permissies heeft onbelemmerde toegang tot resources zoals het bestandssysteem, de registry waardoor misbruik van de applicatie en de client PC kan plaatsvinden.
· Een applicatie die Full Trust permissies nodig heeft laat een notificatie zien aan de gebruiker om toestemming te verlenen de applicatie te starten. Deze notificatie kan verwarrend werken voor eindgebruikers en maakt de ClickOnce ervaring minder transparant.
Het wordt daarom aangeraden om via het Security tabblad van het project alleen die rechten aan te zetten die de applicatie ook echt nodig heeft.
Als we bij wijze van voorbeeld de volgende code, achter een button op het formulier, toevoegen aan onze applicatie, zien we het verschil.
Dim TextFile As StreamWriter = File.CreateText("C:\test.txt")
TextFile.WriteLine("Werkt dit?")
TextFile.Close()
Met de standaard instellingen van het project wordt deze code zonder problemen uitgevoerd. Kiezen we er echter voor in het Security tabblad enkel de “Internet” zone permissies aan te zetten, dan verschijnt bij het uitvoeren van de code de volgende melding.

Voordelen van ClickOnce
ClickOnce maakt het een stuk eenvoudiger om client applicaties uit te rollen en bij te werken. De voordelen op een rij zijn:
· Deployment – het is net zo eenvoudig als het uitrollen en laten gebruiken van een webapplicatie
· Update – het bijwerken van de bestanden op de webserver zorgt voor de update op de clients
· Bootstrapping – ClickOnce helpt ook in het bijwerken van het .NET Framework of vereiste componenten
· IDE Integratie – vanuit Visual Studio 2005 is het mogelijk direct de applicatie te verspreiden
· Low impact – de uitrol van een ClickOnce applicatie is eenvoudig omdat deze in een eigen sandbox draait
· Security – Er wordt gebruik gemaakt van de Code Access Security eigenschappen van het .NET Framework
Beperkingen van ClickOnce
Alhoewel ClickOnce applicatie voor veel toepassingen geschikt is, zijn er ook enkele beperkingen waardoor de reeds bekende MSI bestanden nog steeds een beter alternatief zijn. De volgende zaken kunnen namelijk niet via ClickOnce:
· Installatie in “Program Files” folder; de applicatie wordt in de ClickOnce applicatie cache geplaatst.
· Installatie voor meerdere gebruikers
· Installatie van gedeelde bestanden
· Installatie van drivers
· Installatie in de Global Assembly Cache
· Toevoegen aan de Startup-groep (zodat de applicatie direct start bij het aanmelden in Windows)
· Registratie van bestandstypen
Conclusies
Met de komst van ClickOnce wordt het net zo eenvoudig Windows Forms applicaties aan eindgebruikers aan te bieden als webapplicaties. Rekening houdend met de rijkere mogelijkheden voor de gebruikersinterface van client applicaties zijn er dus minder redenen om hier niet voor te kiezen. ClickOnce is echter geen complete vervangen van MSI. Applicaties die uit een grote hoeveelheid bestanden bestaan, en hardware drivers, kunnen nog altijd beter via MSI bestanden uitgerold worden.
Meer informatie
· Veelgestelde vragen rondom ClickOnce.
· The Magic of ClickOnce
· Choosing between ClickOnce and Windows Installer
· ClickOnce Security and download on demand