Download præsentationen
Præsentation er lastning. Vent venligst
Offentliggjort afMikkel Damgaard Redigeret for ca. et år siden
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
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.
Lignende præsentationer
© 2024 SlidePlayer.dk Inc.
All rights reserved.