Præsentation er lastning. Vent venligst

Præsentation er lastning. Vent venligst

Mød Microsoft – for udviklere & arkitekter Smart klient som Windows- applikation Installation og autoopdatering.Henrik Lykke Nielsen Captator – de danske.NET.

Lignende præsentationer


Præsentationer af emnet: "Mød Microsoft – for udviklere & arkitekter Smart klient som Windows- applikation Installation og autoopdatering.Henrik Lykke Nielsen Captator – de danske.NET."— Præsentationens transcript:

1 Mød Microsoft – for udviklere & arkitekter Smart klient som Windows- applikation Installation og autoopdatering.Henrik Lykke Nielsen Captator – de danske.NET eksperter lykke@captator.dk http://www.captator.dk/captator.aspx?blog=dothenrik http://www.captator.dk http://www.captator.dk/captator.aspx?blog=dothenrik http://www.captator.dk

2 2  Session 1: Hvad er smarte klienter?   Definitioner og principper  Session 2: Smart klient som Windows-applikation  Installation og automatisk opdatering  Session 3: Smart klient som Office-applikation   Overblik over mulighederne  Session 4: Smart klient som mobil-applikation   Best practices, tips og tricks Agenda

3 3 Sessions-agenda  Problemstillingen  Lokalisering af assemblies i.NET  No-Touch deployering  Noget om reflektion  On-the-fly download .NET Application Updater Component  ClickOnce

4 4 Problemstillingen før.NET DLL Hell App1.exeMyCtrl.dll App2.exeMyCtrl.dll

5 5  Konflikter kan være svære  at forudsige  at forhindre  Det kan være farligt at installere Joe The Hackers applikationer  Afhængigt af driftsmiljøet kan det være dyrt at holde klienter up-to-date  Det kan være svært at sikre agilitet Problemstillingen

6 6 Er den i GACen? Findes codebase? Ja Brug codebase Probe App Base [appbase]/[assembly].dll [appbase]/[assembly]/[assembly]..dll Nej Anvend version policy Probe private bin-sti (relativt til App Base) Ikke fundet Fundet Binding fejler Load assembly Ikke fundet Ja “Strong ref” “Weak ref” Fundet Assembly lokalisering i.NET Ikke fundet

7 7 Assembly lokalisering i.NET  Benyt allerede loadet assembly  Benyt assembly i GACen  Benyt codebase  Probing  Binding policy  Default binding policy  Application og machine policy  Publisher policy  Se evt. MSDN for yderligere info: ”How the Runtime Locates Assemblies”

8 8 Applikations isolering i.NET Enden på DLL Hell App1.exeMyCtrl.dll App2.exeMyCtrl.dll

9 9 Applikations isolering i.NET  Privat deployering er udgangspunktet  Multiple versioner kan sameksistere  Side-by-Side installation  Sharing, if any, is controlled and explicit  Kan shares ved installation til GACen (Global Assembly Cache)  Ingen DLL registration  XCOPY installation

10 10 Deployering  No-touch deployment  Brugeren klikker på et link på en webside  On-the-fly download  Brugeren kører et bootstrap program, der downloader og eksekverer komponenter  MSI-installation  Applikationen installeres og køres lokalt  Kan evt. downloade updates

11 11 No-Touch deployering  Applikationen downloades via HTTP til Assembly Download Cache  IEExec processen starter applikationen  Underlagt sikkerhedsbegrænsninger  Fordele  Simpelt at deployere og simpelt at opdatere  Begrænsninger  Startes fra en browser  Ikke ordentlig offline support  Sikkerhedsbegrænsninger  Ingen customiseringer

12 12  Første gang … No-Touch deployering - 1.

13 13  Første gang … http://server/TeleSales.exe GET /TeleSales.exe HTTP/1.1 No-Touch deployering - 1.

14 14  Første gang … http://server/TeleSales.exe HTTP/1.1 200 OK Last-Modified: Mon, 10 Nov 2002 10:23:12 GMT Content-Length: xxxx GET /TeleSales.exe HTTP/1.1 No-Touch deployering - 1. Response indeholder TeleSales.exe

15 15  Første gang … http://server/TeleSales.exe HTTP/1.1 200 OK Last-Modified: Mon, 10 Nov 2002 10:23:12 GMT Content-Length: xxxx GET /TeleSales.exe HTTP/1.1.NET Download Cache Browser Internet Cache Response indeholder TeleSales.exe Gem i No-Touch deployering - 1.

16 16  Efterfølgende gange … No-Touch deployering - 1.

17 17 http://server/TeleSales.exe HTTP/1.1 304 Not Modified Content-Length: 0 GET /TeleSales.exe HTTP/1.1 If-Modified-Since: Mon, 10 Nov 2002 10:23:12 GMT  Efterfølgende gange … No-Touch deployering - 2. Response er tomt Læs fra.NET Download Cache

18 18.NET sikkerhed .NET assemblies er underlagt.NETs sikkerhedsmodel  Permissions checkes normalt ved brug  Check kan dog gennemtvinges ved load

19 19.NET sikkerhed .NET Code Access Security  Tilgang er baseret på evidence  Hvem lavede programmet (code signing)  Hvor kom programmet fra  Zone, site, url, …  Sikkerhedsopsætninger kan foretages på deployeringstidspunktet  Manuelt  Administrativ udrulning  V.h.a. kode

20 20 Code Access Security Policy

21 21 Code Access Security Policy  Opsætning af sikkerhed på klienten  Lagret som XML i: C:\WINDOWS\Microsoft.NET\Framework\ v1.1.4322\CONFIG .NET Framework 1.1 Configuration MMC snap-in  CASPOL command line tool  Via MSI:  Lavet vha..NET Framework Configuration snap-in  Vha. kode: System.Security.Policy namespacet

22 22 Installation vha. MSI  Deployeres til en klient fra filshare eller web  Fungerer som en almindelig Windows applikation  Fordele  Kan installeres og køre offline  God performance/responsivitet  Tæt integration til Windows shellen  Start-menuen, shortcuts, Add/Remove programs  Supporterer (custom) teknologier til automatisk opdatering  Applikationen startes med lokale rettigheder

23 23 Installation vha. MSI  Ulemper  Der kræves en egentlig installationsproces  Installation kræver administrator rettigheder  Er den bedste løsning til  Applikationer der kræver maksimal responsitivitet  Applikationer der tillader offline anvendelse  Applikationer der tilgår og udnytter lokale ressourcer (lokale rettigheder)  Applikationer der understøtter side-by-side versioner

24 24 Distribution af frameworket  Redistribuerbar version af.NET frameworket  Stand-alone executable file, dotnetfx.exe  Kræver administrator rettigheder  Distribuer via SMS, Active Directory eller med app  Mere information  “Redistributing the.NET Framework 1.1” http://msdn.microsoft.com/library/en- us/dnnetdep/html/redistdeploy1_1.asp http://msdn.microsoft.com/library/en- us/dnnetdep/html/redistdeploy1_1.asp http://msdn.microsoft.com/library/en- us/dnnetdep/html/redistdeploy1_1.asp .NET Framework Setup.exe Bootstrapper Sample  http://www.microsoft.com/downloads/details.aspx?FamilyId=BF 253CFD-1EFC-4FC5-BA7E-6A6F21403495 http://www.microsoft.com/downloads/details.aspx?FamilyId=BF 253CFD-1EFC-4FC5-BA7E-6A6F21403495 http://www.microsoft.com/downloads/details.aspx?FamilyId=BF 253CFD-1EFC-4FC5-BA7E-6A6F21403495  Shareware plug-in to Visual Studio.NET  Automates adding dotnetfx.exe to you setup project  http://www.gotdotnet.com/community/workspaces/workspace. aspx?ID=2F8F0A23-F529-4158-8E0A-D187D16F41F1 http://www.gotdotnet.com/community/workspaces/workspace. aspx?ID=2F8F0A23-F529-4158-8E0A-D187D16F41F1 http://www.gotdotnet.com/community/workspaces/workspace. aspx?ID=2F8F0A23-F529-4158-8E0A-D187D16F41F1

25 25 On-the-fly download  Stub program  Downloader og eksekverer det “rigtige” program on- the-fly vha. reflektion (LoadFrom etc)  Ligger på den lokale PC  Kan eksekvere applikationer fra filshare eller internettet  Benytter ikke cache  Fordele  Simpelt at opdatere  Tæt integration til Windows shellen  Ulemper  Ingen offline support  Sikkerhedsbegrænsninger  Kræver initiel installation af stub programmet  Dårlig performance / responsivitet

26 26 Reflektive udvalg  Assembly  System.Type  Metadata  MethodInfo  Generisk  Generisk CallMethod   On-the-fly download

27 27 Assembly  Eksekverbar kode  Indeholdt i Portable Executable (PE) filer (DLL, EXE)  I form af Intermediate Language (IL) kode  Skal have ét entry point (DllMain, WinMain eller Main)  Udgør en sikkerhedsafgrænsning  Permissions “requestes” og “grantes” for en assembly  Udgør en typeafgrænsning  En assembly afgrænser scope for typerne defineret deri  Typer (og andre ressourcer) kan være private eller public  Udgør en versionsafgrænsning  Typer og ressourcer i en assembly versioneres som en enhed

28 28  Assemblies kan loades ind i det aktuelle AppDomain  Eksempel  Statisk refererede assemblies loades altid on-demand af resolveren Assembly loading //AssemblyFile: Filpath (uri) public static System.Reflection.Assembly LoadFrom(string assemblyFile) public static Assembly Load(System.Reflection.AssemblyName assemblyRef) //AssemblyString: ”long form”-navnet for assemblyen public static Assembly Load(string assemblyString) //AssemblyFile: Filpath (uri) public static System.Reflection.Assembly LoadFrom(string assemblyFile) public static Assembly Load(System.Reflection.AssemblyName assemblyRef) //AssemblyString: ”long form”-navnet for assemblyen public static Assembly Load(string assemblyString) Assembly asm = Assembly.Load("myAssembly,Version=1.2.3.4, Culture=en-US,PublicKeyToken=12ac34bd56fe78qr"); C#

29 29 System.Type  Der eksisterer en version af System.Type for alle typer  Giver adgang til metadata om enhver.NET datatype  Beskriver alle facetter ved en type  Category: Simple, Enum, Struct or Class  Methods and Constructors, Parameters and Return  Fields and Properties, Arguments and Attributes  Events, Delegates and Namespaces  GetType er defineret på System.Object  System.Type objektet for en given type kan fås ved: typeof(class); object.GetType(); Type.GetType("classname"); typeof(class); object.GetType(); Type.GetType("classname"); GetType(class) object.GetType() Type.GetType("classname") GetType(class) object.GetType() Type.GetType("classname") VB C#

30 30 System.Type .NETs objekt model EtEllerAndetObject Instans MethodTablePointer SyncBlockID Instans fields… Managed heap EnEllerAndenType Type beskriver Type information Metode tabel… CLR strukturer

31 31 System.Type Udvalgte members  FullName  Assembly  IsInstanceOfType, IsSubclassOf, IsAssignableFrom  BaseType, GetInterface, GetInterfaces, FindInterfaces  GetCustomAttributes  IsItDitEllerDat?  IsAbstract, IsAnsiClass, IsArray, IsAutoClass, IsAutoLayout, IsByRef, IsClass, IsCOMObject, IsContextful, IsEnum, IsExplicitLayout, IsImport, IsInterface, IsLayoutSequential, IsMarshalByRef, IsNestedAssembly, IsNestedFamANDAssem, IsNestedFamily, IsNestedFamORAssem, IsNestedPrivate, IsNestedPublic, IsNotPublic, IsPointer, IsPrimitive, IsPublic, IsSealed, IsSerializable, IsSpecialName, IsUnicodeClass, IsValueType  GetMember, GetMembers, FindMembers  GetDitEllerDat  GetConstructor, GetConstructors, GetDefaultMembers, GetEvent, GetEvents, GetField, GetFields, GetInterface, GetInterfaces, GetMember, GetMembers, GetMethod, GetMethods, GetProperties, GetProperty

32 32 [serializable] public class Person : { public event OnSaveChange onsv; public Date DOB; public string FirstName; public string LastName; public string Name { get { return FirstName + " " + LastName; } } public void Person(string First, string Last) { FirstName=First; LastName=Last; } public bool Save() { System.Type t = this.GetType(); foreach (FieldInfo f in t.GetFields()) { /*...*/ } } [serializable] public class Person : { public event OnSaveChange onsv; public Date DOB; public string FirstName; public string LastName; public string Name { get { return FirstName + " " + LastName; } } public void Person(string First, string Last) { FirstName=First; LastName=Last; } public bool Save() { System.Type t = this.GetType(); foreach (FieldInfo f in t.GetFields()) { /*...*/ } } System.Type Attributes Fields Properties Constructors Methods Events Parameters Metadata: typer på runtime

33 33 Reflektive dimser  De reflektive typer kan bruges generelt eller specifikt System.Object EventInfoPropertyInfoFieldInfoMethodBase System.Type ParameterInfoMemberInfoModuleAssembly MethodInfoConstructorInfo

34 34 MethodInfo  Arver MethodBase som arver MemberInfo  Udvalgte members  IsItDitEllerDat?  IsAbstract, IsAssembly, IsConstructor, IsFamily, IsFamilyAndAssembly, IsFinal, IsHideBySig, IsPrivate, IsPublic, IsSpecialName, IsStatic, IsVirtual  DeclaringType, GetCustomAttributes, Name, IsDefined, MemberType, GetParameters, GetBaseDefinition, ReturnType  GetCurrentMethod (static)  Invoke

35 35 *.CreateInstance  System.Reflection.Assembly.CreateInstance  Instansmetode  Tager imod et typenavn  System.Activator.CreateInstance  Statisk/shared metode  Tager imod et typenavn & assemblynavn  Tager imod et typeobjekt

36 36 On-the-fly download ReflectionUtil.CallMethod("http:\\192.168.1.62\LoadFrom\LoadFromKomponent.dll", "LoadFromKomponent.Applic", "StartApp", Nothing) Public Shared Function CallMethod(ByVal fileName As String, ByVal className As String, ByVal methodName As String, ByVal methodArgs As Object()) As Object If methodArgs Is Nothing Then methodArgs = New Object() {} End If Dim ass As System.Reflection.Assembly ass = System.Reflection.Assembly.LoadFrom(fileName) Dim theType As System.Type = ass.GetType(className) Dim theObject As Object = System.Activator.CreateInstance(theType) Dim method As System.Reflection.MethodInfo = theType.GetMethod(methodName) Dim result As Object = method.Invoke(theObject, methodArgs) Return result End Function Public Shared Function CallMethod(ByVal fileName As String, ByVal className As String, ByVal methodName As String, ByVal methodArgs As Object()) As Object If methodArgs Is Nothing Then methodArgs = New Object() {} End If Dim ass As System.Reflection.Assembly ass = System.Reflection.Assembly.LoadFrom(fileName) Dim theType As System.Type = ass.GetType(className) Dim theObject As Object = System.Activator.CreateInstance(theType) Dim method As System.Reflection.MethodInfo = theType.GetMethod(methodName) Dim result As Object = method.Invoke(theObject, methodArgs) Return result End Function VB

37 37 On-the-fly download  Generisk kald af metode public static object CallMethod(string fileName, string className, string methodName, object[] methodArgs) { if (methodArgs == null) { methodArgs = new object[0]; } System.Reflection.Assembly ass; ass = System.Reflection.Assembly.LoadFrom(fileName); System.Type theType = ass.GetType(className); object theObject = System.Activator.CreateInstance(theType); System.Reflection.MethodInfo method = theType.GetMethod(methodName); object result = method.Invoke(theObject, methodArgs); return result; } public static object CallMethod(string fileName, string className, string methodName, object[] methodArgs) { if (methodArgs == null) { methodArgs = new object[0]; } System.Reflection.Assembly ass; ass = System.Reflection.Assembly.LoadFrom(fileName); System.Type theType = ass.GetType(className); object theObject = System.Activator.CreateInstance(theType); System.Reflection.MethodInfo method = theType.GetMethod(methodName); object result = method.Invoke(theObject, methodArgs); return result; } C# ReflectionUtil.CallMethod(@"http:\\192.168.1.62\LoadFrom\LoadFromKomponent.dll", "LoadFromKomponent.Applic", "StartApp", Nothing);

38 38 Opdatering  Altid up-to-date  No touch deployment  On-the-fly download  Offline ikke understøttet  Application updatere  To projekter fra Microsoft der hjælper med automatisk opdatering af applikaioner .NET Application Updater Component  Rimeligt let at implementere (i simpelt scenarie)  Updater Application Block  Bedst til enterprise applikationer

39 39.NET Application Updater Component  Checker for opdateringer  Via folder/file check  Manifest-fil  Custom check (f.eks. XML web service)  Downloader opdateringer i baggrunden via HTTP-DAV (fil og dir enumerering)  Genstarter applikationen

40

41 41

42 42

43 43

44 44

45 45

46 46

47 47

48 48

49 49.NET Application Updater Component  Kan downloades fra: http://windowsforms.net/articles/appupdater.aspx http://windowsforms.net/articles/appupdater.aspx  Kode medfølger  Eksempler, tutorial, …  Mangler ordentlig dokumentation  Let at implementere i det simple scenarie

50 50 Application Updater Block  Application Updater Block from Patterns and Practices  http://msdn.microsoft.com/library/en- us/dnbda/html/updater.asp http://msdn.microsoft.com/library/en- us/dnbda/html/updater.asp http://msdn.microsoft.com/library/en- us/dnbda/html/updater.asp  Bruger som default BITS (Background Intelligent Transfer Service)  Kan customiseres  Kode medfølger  Dokumentation, e ksempler, tutorial, …

51 51 Captators Eifos.Updating  Launcher startes i stedet for selve app’en  Starter derpå (nyeste) version af applikationen  Applikationen downloader (evt.) ny version  Authentication mod XML web service (WSE2)  Henter AppInfo og info om download-server(e) fra central server (via WS)  Kan eksempelvis afhænge af authenticated bruger  Sammenligner med lokal AppInfo (i fil)  Henter og installerer nye komponenter (WSE2)  IDirectoryStrategy  Kalder eventuelle upgrade funktionaliteter  Applikationen starter Launcher (igen), som derefter starter den nyeste version af applikationen, som....

52 52 Deployering Run From Web Code Download MSI/Client Reach  Low System Impact  Dynamic Modules  Auto-Deployment  Auto-Update   Rich / Interactive Experience  Best Performance  Offline  Windows Shell Integration  Best Local Resource Access  Unrestricted Installations  Run From Web Code Download MSI/ClientClickOnceReach  Low System Impact  Dynamic Modules  Auto-Deployment  Auto-Update    Rich / Interactive Experience  Best Performance  Offline  Windows Shell Integration  Best Local Resource Access  Unrestricted Installations 

53 53 ClickOnce Web Page Link to Manifest Deployment Manifest 1.0  1.1 1.0 Application Manifest 1.1 Application Manifest

54 54 ClickOnce  Launched applikation  Applikationen starter men installerer ikke  Ingen “Start menu” og ingen “Add or Remove Programs”  Opdaterer altid ved opstart (per definition)  Installeret applikation  Installerer fra webben, et share, en CD/DVD, …  “Start menu” og “Add or Remove Programs” understøttelse  Forskellige opdaterings muligheder  API for fleksible og customiserede løsninger

55 55 Best practices for deployering  Hav deployering med i det initielle design  Vælg den tilgang der bedst passer på din app  Performance  Security  Functionality  Hav fokus på at nedbringe vedligeholdelses- omkostningerne  Pas på med at dele instanser af binære komponenter  Brug applikations-isolering for at undgå konflikter  SKal.NET frameworket sendes med ud?

56 56 Best Practices for opdatering  Hav opdatering med i det initielle design  Overvej opdateringsmulighederne  No-touch og on-the-fly  Checker for opdateringer ved hver eneste opstart  Checker kun for opdateringer ved opstart  MSI-installation  Understøtter side-by-side versioner  Kan automatisk opdatere den kørende applikation  Brug f.eks..NET Application Updater Component eller Application Updater block

57 57 Resources  Deploying and Distributing Overview msdn.microsoft.com/vbasic/using/deploying msdn.microsoft.com/vbasic/using/deploying  NET Framework 1.1 Deployment Guide msdn.microsoft.com/library/default.asp?url=/library/en- us/dnnetdep/html/dotnetframedepguid1_1.asp?_r=1 msdn.microsoft.com/library/default.asp?url=/library/en- us/dnnetdep/html/dotnetframedepguid1_1.asp?_r=1 msdn.microsoft.com/library/default.asp?url=/library/en- us/dnnetdep/html/dotnetframedepguid1_1.asp?_r=1  Patterns and Practices http://www.microsoft.com/resources/practices/d efault.mspx http://www.microsoft.com/resources/practices/d efault.mspx http://www.microsoft.com/resources/practices/d efault.mspx  Nyheder, artikler, information og Whidbey julekalender www.captator.dk

58 58 ©2004 Microsoft Corporation. All rights reserved. This presentation is for informational purposes only. Microsoft makes no warranties, express or implied, in this summary.


Download ppt "Mød Microsoft – for udviklere & arkitekter Smart klient som Windows- applikation Installation og autoopdatering.Henrik Lykke Nielsen Captator – de danske.NET."

Lignende præsentationer


Annoncer fra Google