System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact 60f34f903c54c66d91860374938f91c9e4befed0:


0000: 2f 2a 0d 0a 20 2a 20 49 6e 73 74 61 6c 6c 65 72  /*.. * Installer
0010: 2e 63 73 20 2d 2d 0d 0a 20 2a 0d 0a 20 2a 20 57  .cs --.. *.. * W
0020: 72 69 74 74 65 6e 20 62 79 20 4a 6f 65 20 4d 69  ritten by Joe Mi
0030: 73 74 61 63 68 6b 69 6e 2e 0d 0a 20 2a 20 52 65  stachkin... * Re
0040: 6c 65 61 73 65 64 20 74 6f 20 74 68 65 20 70 75  leased to the pu
0050: 62 6c 69 63 20 64 6f 6d 61 69 6e 2c 20 75 73 65  blic domain, use
0060: 20 61 74 20 79 6f 75 72 20 6f 77 6e 20 72 69 73   at your own ris
0070: 6b 21 0d 0a 20 2a 2f 0d 0a 0d 0a 75 73 69 6e 67  k!.. */....using
0080: 20 53 79 73 74 65 6d 2e 43 6f 6c 6c 65 63 74 69   System.Collecti
0090: 6f 6e 73 2e 47 65 6e 65 72 69 63 3b 0d 0a 75 73  ons.Generic;..us
00a0: 69 6e 67 20 53 79 73 74 65 6d 2e 44 69 61 67 6e  ing System.Diagn
00b0: 6f 73 74 69 63 73 3b 0d 0a 75 73 69 6e 67 20 53  ostics;..using S
00c0: 79 73 74 65 6d 2e 45 6e 74 65 72 70 72 69 73 65  ystem.Enterprise
00d0: 53 65 72 76 69 63 65 73 2e 49 6e 74 65 72 6e 61  Services.Interna
00e0: 6c 3b 0d 0a 75 73 69 6e 67 20 53 79 73 74 65 6d  l;..using System
00f0: 2e 49 4f 3b 0d 0a 75 73 69 6e 67 20 53 79 73 74  .IO;..using Syst
0100: 65 6d 2e 52 65 66 6c 65 63 74 69 6f 6e 3b 0d 0a  em.Reflection;..
0110: 75 73 69 6e 67 20 53 79 73 74 65 6d 2e 52 75 6e  using System.Run
0120: 74 69 6d 65 2e 43 6f 6d 70 69 6c 65 72 53 65 72  time.CompilerSer
0130: 76 69 63 65 73 3b 0d 0a 75 73 69 6e 67 20 53 79  vices;..using Sy
0140: 73 74 65 6d 2e 54 68 72 65 61 64 69 6e 67 3b 0d  stem.Threading;.
0150: 0a 75 73 69 6e 67 20 53 79 73 74 65 6d 2e 57 69  .using System.Wi
0160: 6e 64 6f 77 73 2e 46 6f 72 6d 73 3b 0d 0a 75 73  ndows.Forms;..us
0170: 69 6e 67 20 53 79 73 74 65 6d 2e 58 6d 6c 3b 0d  ing System.Xml;.
0180: 0a 75 73 69 6e 67 20 4d 69 63 72 6f 73 6f 66 74  .using Microsoft
0190: 2e 57 69 6e 33 32 3b 0d 0a 0d 0a 6e 61 6d 65 73  .Win32;....names
01a0: 70 61 63 65 20 53 79 73 74 65 6d 2e 44 61 74 61  pace System.Data
01b0: 2e 53 51 4c 69 74 65 0d 0a 7b 0d 0a 20 20 20 20  .SQLite..{..    
01c0: 23 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20 44  #region Public D
01d0: 65 6c 65 67 61 74 65 73 0d 0a 20 20 20 20 69 6e  elegates..    in
01e0: 74 65 72 6e 61 6c 20 64 65 6c 65 67 61 74 65 20  ternal delegate 
01f0: 76 6f 69 64 20 54 72 61 63 65 43 61 6c 6c 62 61  void TraceCallba
0200: 63 6b 28 0d 0a 20 20 20 20 20 20 20 20 73 74 72  ck(..        str
0210: 69 6e 67 20 6d 65 73 73 61 67 65 2c 0d 0a 20 20  ing message,..  
0220: 20 20 20 20 20 20 73 74 72 69 6e 67 20 63 61 74        string cat
0230: 65 67 6f 72 79 0d 0a 20 20 20 20 29 3b 0d 0a 0d  egory..    );...
0240: 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  .    ///////////
0250: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0260: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0270: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0280: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0290: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
02a0: 20 64 65 6c 65 67 61 74 65 20 62 6f 6f 6c 20 46   delegate bool F
02b0: 72 61 6d 65 77 6f 72 6b 43 6f 6e 66 69 67 43 61  rameworkConfigCa
02c0: 6c 6c 62 61 63 6b 28 0d 0a 20 20 20 20 20 20 20  llback(..       
02d0: 20 73 74 72 69 6e 67 20 66 69 6c 65 4e 61 6d 65   string fileName
02e0: 2c 0d 0a 20 20 20 20 20 20 20 20 73 74 72 69 6e  ,..        strin
02f0: 67 20 69 6e 76 61 72 69 61 6e 74 2c 0d 0a 20 20  g invariant,..  
0300: 20 20 20 20 20 20 73 74 72 69 6e 67 20 6e 61 6d        string nam
0310: 65 2c 0d 0a 20 20 20 20 20 20 20 20 73 74 72 69  e,..        stri
0320: 6e 67 20 64 65 73 63 72 69 70 74 69 6f 6e 2c 0d  ng description,.
0330: 0a 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20  .        string 
0340: 74 79 70 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20  typeName,..     
0350: 20 20 20 41 73 73 65 6d 62 6c 79 4e 61 6d 65 20     AssemblyName 
0360: 61 73 73 65 6d 62 6c 79 4e 61 6d 65 2c 0d 0a 20  assemblyName,.. 
0370: 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 63 6c         object cl
0380: 69 65 6e 74 44 61 74 61 2c 0d 0a 20 20 20 20 20  ientData,..     
0390: 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d     bool whatIf,.
03a0: 0a 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65  .        bool ve
03b0: 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 20  rbose,..        
03c0: 72 65 66 20 62 6f 6f 6c 20 73 61 76 65 64 2c 0d  ref bool saved,.
03d0: 0a 20 20 20 20 20 20 20 20 72 65 66 20 73 74 72  .        ref str
03e0: 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20 20 29  ing error..    )
03f0: 3b 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  ;....    ///////
0400: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0410: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0420: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0430: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0440: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 69 6e 74 65  ////....    inte
0450: 72 6e 61 6c 20 64 65 6c 65 67 61 74 65 20 62 6f  rnal delegate bo
0460: 6f 6c 20 46 72 61 6d 65 77 6f 72 6b 52 65 67 69  ol FrameworkRegi
0470: 73 74 72 79 43 61 6c 6c 62 61 63 6b 28 0d 0a 20  stryCallback(.. 
0480: 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79 4b         RegistryK
0490: 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20  ey rootKey,..   
04a0: 20 20 20 20 20 73 74 72 69 6e 67 20 66 72 61 6d       string fram
04b0: 65 77 6f 72 6b 4e 61 6d 65 2c 0d 0a 20 20 20 20  eworkName,..    
04c0: 20 20 20 20 56 65 72 73 69 6f 6e 20 66 72 61 6d      Version fram
04d0: 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 0d 0a 20  eworkVersion,.. 
04e0: 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 70 6c         string pl
04f0: 61 74 66 6f 72 6d 4e 61 6d 65 2c 0d 0a 20 20 20  atformName,..   
0500: 20 20 20 20 20 6f 62 6a 65 63 74 20 63 6c 69 65       object clie
0510: 6e 74 44 61 74 61 2c 0d 0a 20 20 20 20 20 20 20  ntData,..       
0520: 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20   bool whatIf,.. 
0530: 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62         bool verb
0540: 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 72 65  ose,..        re
0550: 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a  f string error..
0560: 20 20 20 20 29 3b 0d 0a 0d 0a 20 20 20 20 2f 2f      );....    //
0570: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0580: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0590: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
05a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
05b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
05c0: 20 69 6e 74 65 72 6e 61 6c 20 64 65 6c 65 67 61   internal delega
05d0: 74 65 20 62 6f 6f 6c 20 56 69 73 75 61 6c 53 74  te bool VisualSt
05e0: 75 64 69 6f 52 65 67 69 73 74 72 79 43 61 6c 6c  udioRegistryCall
05f0: 62 61 63 6b 28 0d 0a 20 20 20 20 20 20 20 20 52  back(..        R
0600: 65 67 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b  egistryKey rootK
0610: 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 56 65 72  ey,..        Ver
0620: 73 69 6f 6e 20 76 73 56 65 72 73 69 6f 6e 2c 0d  sion vsVersion,.
0630: 0a 20 20 20 20 20 20 20 20 47 75 69 64 20 70 61  .        Guid pa
0640: 63 6b 61 67 65 49 64 2c 0d 0a 20 20 20 20 20 20  ckageId,..      
0650: 20 20 47 75 69 64 20 73 65 72 76 69 63 65 49 64    Guid serviceId
0660: 2c 0d 0a 20 20 20 20 20 20 20 20 47 75 69 64 20  ,..        Guid 
0670: 64 61 74 61 53 6f 75 72 63 65 49 64 2c 0d 0a 20  dataSourceId,.. 
0680: 20 20 20 20 20 20 20 47 75 69 64 20 64 61 74 61         Guid data
0690: 50 72 6f 76 69 64 65 72 49 64 2c 0d 0a 20 20 20  ProviderId,..   
06a0: 20 20 20 20 20 6f 62 6a 65 63 74 20 63 6c 69 65       object clie
06b0: 6e 74 44 61 74 61 2c 0d 0a 20 20 20 20 20 20 20  ntData,..       
06c0: 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20   bool whatIf,.. 
06d0: 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62         bool verb
06e0: 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 72 65  ose,..        re
06f0: 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a  f string error..
0700: 20 20 20 20 29 3b 0d 0a 20 20 20 20 23 65 6e 64      );..    #end
0710: 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 2f 2f  region....    //
0720: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0730: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0740: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0750: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0760: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
0770: 20 23 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20   #region Public 
0780: 45 6e 75 6d 65 72 61 74 69 6f 6e 73 0d 0a 20 20  Enumerations..  
0790: 20 20 5b 46 6c 61 67 73 28 29 5d 0d 0a 20 20 20    [Flags()]..   
07a0: 20 70 75 62 6c 69 63 20 65 6e 75 6d 20 49 6e 73   public enum Ins
07b0: 74 61 6c 6c 46 6c 61 67 73 0d 0a 20 20 20 20 7b  tallFlags..    {
07c0: 0d 0a 20 20 20 20 20 20 20 20 4e 6f 6e 65 20 3d  ..        None =
07d0: 20 30 78 30 2c 0d 0a 20 20 20 20 20 20 20 20 47   0x0,..        G
07e0: 41 43 20 3d 20 30 78 31 2c 0d 0a 20 20 20 20 20  AC = 0x1,..     
07f0: 20 20 20 41 73 73 65 6d 62 6c 79 46 6f 6c 64 65     AssemblyFolde
0800: 72 73 20 3d 20 30 78 32 2c 0d 0a 20 20 20 20 20  rs = 0x2,..     
0810: 20 20 20 44 62 50 72 6f 76 69 64 65 72 46 61 63     DbProviderFac
0820: 74 6f 72 79 20 3d 20 30 78 34 2c 0d 0a 20 20 20  tory = 0x4,..   
0830: 20 20 20 20 20 56 73 50 61 63 6b 61 67 65 20 3d       VsPackage =
0840: 20 30 78 38 2c 0d 0a 20 20 20 20 20 20 20 20 56   0x8,..        V
0850: 73 44 61 74 61 53 6f 75 72 63 65 20 3d 20 30 78  sDataSource = 0x
0860: 31 30 2c 0d 0a 20 20 20 20 20 20 20 20 56 73 44  10,..        VsD
0870: 61 74 61 50 72 6f 76 69 64 65 72 20 3d 20 30 78  ataProvider = 0x
0880: 32 30 2c 0d 0a 20 20 20 20 20 20 20 20 46 72 61  20,..        Fra
0890: 6d 65 77 6f 72 6b 20 3d 20 47 41 43 20 7c 20 41  mework = GAC | A
08a0: 73 73 65 6d 62 6c 79 46 6f 6c 64 65 72 73 20 7c  ssemblyFolders |
08b0: 20 44 62 50 72 6f 76 69 64 65 72 46 61 63 74 6f   DbProviderFacto
08c0: 72 79 2c 0d 0a 20 20 20 20 20 20 20 20 56 73 20  ry,..        Vs 
08d0: 3d 20 56 73 50 61 63 6b 61 67 65 20 7c 20 56 73  = VsPackage | Vs
08e0: 44 61 74 61 53 6f 75 72 63 65 20 7c 20 56 73 44  DataSource | VsD
08f0: 61 74 61 50 72 6f 76 69 64 65 72 2c 0d 0a 20 20  ataProvider,..  
0900: 20 20 20 20 20 20 41 6c 6c 20 3d 20 46 72 61 6d        All = Fram
0910: 65 77 6f 72 6b 20 7c 20 56 73 2c 0d 0a 20 20 20  ework | Vs,..   
0920: 20 20 20 20 20 41 6c 6c 4e 6f 47 41 43 20 3d 20       AllNoGAC = 
0930: 41 6c 6c 20 26 20 7e 47 41 43 2c 0d 0a 20 20 20  All & ~GAC,..   
0940: 20 20 20 20 20 44 65 66 61 75 6c 74 20 3d 20 41       Default = A
0950: 6c 6c 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  ll..    }....   
0960: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
0970: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0980: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0990: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
09a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
09b0: 20 20 20 20 5b 46 6c 61 67 73 28 29 5d 0d 0a 20      [Flags()].. 
09c0: 20 20 20 70 75 62 6c 69 63 20 65 6e 75 6d 20 54     public enum T
09d0: 72 61 63 65 50 72 69 6f 72 69 74 79 0d 0a 20 20  racePriority..  
09e0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 4e 6f 6e    {..        Non
09f0: 65 20 3d 20 30 78 30 2c 0d 0a 20 20 20 20 20 20  e = 0x0,..      
0a00: 20 20 4c 6f 77 65 73 74 20 3d 20 30 78 31 2c 0d    Lowest = 0x1,.
0a10: 0a 20 20 20 20 20 20 20 20 4c 6f 77 65 72 20 3d  .        Lower =
0a20: 20 30 78 32 2c 0d 0a 20 20 20 20 20 20 20 20 4c   0x2,..        L
0a30: 6f 77 20 3d 20 30 78 34 2c 0d 0a 20 20 20 20 20  ow = 0x4,..     
0a40: 20 20 20 4d 65 64 69 75 6d 20 3d 20 30 78 38 2c     Medium = 0x8,
0a50: 0d 0a 20 20 20 20 20 20 20 20 48 69 67 68 20 3d  ..        High =
0a60: 20 30 78 31 30 2c 0d 0a 20 20 20 20 20 20 20 20   0x10,..        
0a70: 48 69 67 68 65 72 20 3d 20 30 78 32 30 2c 0d 0a  Higher = 0x20,..
0a80: 20 20 20 20 20 20 20 20 48 69 67 68 65 73 74 20          Highest 
0a90: 3d 20 30 78 34 30 2c 0d 0a 20 20 20 20 20 20 20  = 0x40,..       
0aa0: 20 44 65 66 61 75 6c 74 20 3d 20 4d 65 64 69 75   Default = Mediu
0ab0: 6d 0d 0a 20 20 20 20 7d 0d 0a 20 20 20 20 23 65  m..    }..    #e
0ac0: 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
0ad0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0ae0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0af0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0b00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0b10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
0b20: 20 20 20 23 72 65 67 69 6f 6e 20 49 6e 73 74 61     #region Insta
0b30: 6c 6c 65 72 20 43 6c 61 73 73 0d 0a 20 20 20 20  ller Class..    
0b40: 69 6e 74 65 72 6e 61 6c 20 73 74 61 74 69 63 20  internal static 
0b50: 63 6c 61 73 73 20 49 6e 73 74 61 6c 6c 65 72 0d  class Installer.
0b60: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
0b70: 23 72 65 67 69 6f 6e 20 50 72 69 76 61 74 65 20  #region Private 
0b80: 48 65 6c 70 65 72 20 43 6c 61 73 73 65 73 0d 0a  Helper Classes..
0b90: 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
0ba0: 41 6e 79 50 61 69 72 20 43 6c 61 73 73 0d 0a 20  AnyPair Class.. 
0bb0: 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
0bc0: 65 61 6c 65 64 20 63 6c 61 73 73 20 41 6e 79 50  ealed class AnyP
0bd0: 61 69 72 3c 54 31 2c 20 54 32 3e 0d 0a 20 20 20  air<T1, T2>..   
0be0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
0bf0: 20 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c      #region Publ
0c00: 69 63 20 43 6f 6e 73 74 72 75 63 74 6f 72 73 0d  ic Constructors.
0c10: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d  .            //.
0c20: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20  .            // 
0c30: 57 41 52 4e 49 4e 47 3a 20 54 68 69 73 20 63 6f  WARNING: This co
0c40: 6e 73 74 72 75 63 74 6f 72 20 70 72 6f 64 75 63  nstructor produc
0c50: 65 73 20 61 6e 20 69 6d 6d 75 74 61 62 6c 65 20  es an immutable 
0c60: 22 65 6d 70 74 79 22 20 70 61 69 72 0d 0a 20 20  "empty" pair..  
0c70: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
0c80: 20 20 20 20 20 20 6f 62 6a 65 63 74 2e 0d 0a 20        object... 
0c90: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
0ca0: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
0cb0: 63 20 41 6e 79 50 61 69 72 28 29 0d 0a 20 20 20  c AnyPair()..   
0cc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 3a 20 62               : b
0cd0: 61 73 65 28 29 0d 0a 20 20 20 20 20 20 20 20 20  ase()..         
0ce0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
0cf0: 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68        // do noth
0d00: 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  ing...          
0d10: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
0d20: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
0d30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0d40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0d50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0d60: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
0d70: 20 20 20 20 20 20 70 75 62 6c 69 63 20 41 6e 79        public Any
0d80: 50 61 69 72 28 54 31 20 78 29 0d 0a 20 20 20 20  Pair(T1 x)..    
0d90: 20 20 20 20 20 20 20 20 20 20 20 20 3a 20 74 68              : th
0da0: 69 73 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20  is()..          
0db0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
0dc0: 20 20 20 20 20 74 68 69 73 2e 78 20 3d 20 78 3b       this.x = x;
0dd0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
0de0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
0df0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0e00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0e10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0e20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0e30: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
0e40: 20 20 70 75 62 6c 69 63 20 41 6e 79 50 61 69 72    public AnyPair
0e50: 28 54 31 20 78 2c 20 54 32 20 79 29 0d 0a 20 20  (T1 x, T2 y)..  
0e60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3a 20                : 
0e70: 74 68 69 73 28 78 29 0d 0a 20 20 20 20 20 20 20  this(x)..       
0e80: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
0e90: 20 20 20 20 20 20 20 20 74 68 69 73 2e 79 20 3d          this.y =
0ea0: 20 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20   y;..           
0eb0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
0ec0: 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
0ed0: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
0ee0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0ef0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0f00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0f10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
0f20: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65  .            #re
0f30: 67 69 6f 6e 20 50 75 62 6c 69 63 20 50 72 6f 70  gion Public Prop
0f40: 65 72 74 69 65 73 0d 0a 20 20 20 20 20 20 20 20  erties..        
0f50: 20 20 20 20 70 72 69 76 61 74 65 20 54 31 20 78      private T1 x
0f60: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ;..            p
0f70: 75 62 6c 69 63 20 54 31 20 58 0d 0a 20 20 20 20  ublic T1 X..    
0f80: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
0f90: 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b             get {
0fa0: 20 72 65 74 75 72 6e 20 78 3b 20 7d 0d 0a 20 20   return x; }..  
0fb0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
0fc0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
0fd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0fe0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0ff0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1000: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
1010: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
1020: 69 76 61 74 65 20 54 32 20 79 3b 0d 0a 20 20 20  ivate T2 y;..   
1030: 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
1040: 54 32 20 59 0d 0a 20 20 20 20 20 20 20 20 20 20  T2 Y..          
1050: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
1060: 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72       get { retur
1070: 6e 20 79 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  n y; }..        
1080: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
1090: 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 20     #endregion.. 
10a0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
10b0: 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
10c0: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
10d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1100: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
1110: 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69  ...        #regi
1120: 6f 6e 20 54 72 61 63 65 4f 70 73 20 43 6c 61 73  on TraceOps Clas
1130: 73 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  s..        priva
1140: 74 65 20 73 74 61 74 69 63 20 63 6c 61 73 73 20  te static class 
1150: 54 72 61 63 65 4f 70 73 0d 0a 20 20 20 20 20 20  TraceOps..      
1160: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
1170: 20 23 72 65 67 69 6f 6e 20 50 72 69 76 61 74 65   #region Private
1180: 20 43 6f 6e 73 74 61 6e 74 73 0d 0a 20 20 20 20   Constants..    
1190: 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
11a0: 63 6f 6e 73 74 20 73 74 72 69 6e 67 20 44 65 66  const string Def
11b0: 61 75 6c 74 54 72 61 63 65 46 6f 72 6d 61 74 20  aultTraceFormat 
11c0: 3d 20 22 23 7b 30 7d 20 40 20 7b 31 7d 3a 20 7b  = "#{0} @ {1}: {
11d0: 32 7d 22 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  2}";....        
11e0: 20 20 20 20 70 72 69 76 61 74 65 20 63 6f 6e 73      private cons
11f0: 74 20 73 74 72 69 6e 67 20 49 73 6f 38 36 30 31  t string Iso8601
1200: 44 61 74 65 54 69 6d 65 4f 75 74 70 75 74 46 6f  DateTimeOutputFo
1210: 72 6d 61 74 20 3d 0d 0a 20 20 20 20 20 20 20 20  rmat =..        
1220: 20 20 20 20 20 20 20 20 22 79 79 79 79 2e 4d 4d          "yyyy.MM
1230: 2e 64 64 54 48 48 3a 6d 6d 3a 73 73 2e 66 66 66  .ddTHH:mm:ss.fff
1240: 66 66 66 66 22 3b 0d 0a 20 20 20 20 20 20 20 20  ffff";..        
1250: 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
1260: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
1270: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1280: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1290: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12b0: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
12c0: 20 23 72 65 67 69 6f 6e 20 50 72 69 76 61 74 65   #region Private
12d0: 20 53 74 61 74 69 63 20 44 61 74 61 0d 0a 20 20   Static Data..  
12e0: 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
12f0: 65 20 73 74 61 74 69 63 20 6f 62 6a 65 63 74 20  e static object 
1300: 73 79 6e 63 52 6f 6f 74 20 3d 20 6e 65 77 20 6f  syncRoot = new o
1310: 62 6a 65 63 74 28 29 3b 0d 0a 20 20 20 20 20 20  bject();..      
1320: 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
1330: 61 74 69 63 20 6c 6f 6e 67 20 6e 65 78 74 49 64  atic long nextId
1340: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ;..            p
1350: 72 69 76 61 74 65 20 73 74 61 74 69 63 20 54 72  rivate static Tr
1360: 61 63 65 50 72 69 6f 72 69 74 79 20 74 72 61 63  acePriority trac
1370: 65 50 72 69 6f 72 69 74 79 20 3d 20 54 72 61 63  ePriority = Trac
1380: 65 50 72 69 6f 72 69 74 79 2e 44 65 66 61 75 6c  ePriority.Defaul
1390: 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t;..            
13a0: 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 73  private static s
13b0: 74 72 69 6e 67 20 74 72 61 63 65 46 6f 72 6d 61  tring traceForma
13c0: 74 20 3d 20 44 65 66 61 75 6c 74 54 72 61 63 65  t = DefaultTrace
13d0: 46 6f 72 6d 61 74 3b 0d 0a 20 20 20 20 20 20 20  Format;..       
13e0: 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
13f0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
1400: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1410: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1420: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1430: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1440: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
1450: 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c 69 63    #region Public
1460: 20 53 74 61 74 69 63 20 50 72 6f 70 65 72 74 69   Static Properti
1470: 65 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  es..            
1480: 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 54 72  public static Tr
1490: 61 63 65 50 72 69 6f 72 69 74 79 20 54 72 61 63  acePriority Trac
14a0: 65 50 72 69 6f 72 69 74 79 0d 0a 20 20 20 20 20  ePriority..     
14b0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
14c0: 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20            get { 
14d0: 6c 6f 63 6b 20 28 73 79 6e 63 52 6f 6f 74 29 20  lock (syncRoot) 
14e0: 7b 20 72 65 74 75 72 6e 20 74 72 61 63 65 50 72  { return tracePr
14f0: 69 6f 72 69 74 79 3b 20 7d 20 7d 0d 0a 20 20 20  iority; } }..   
1500: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74               set
1510: 20 7b 20 6c 6f 63 6b 20 28 73 79 6e 63 52 6f 6f   { lock (syncRoo
1520: 74 29 20 7b 20 74 72 61 63 65 50 72 69 6f 72 69  t) { tracePriori
1530: 74 79 20 3d 20 76 61 6c 75 65 3b 20 7d 20 7d 0d  ty = value; } }.
1540: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
1550: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
1560: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1570: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1580: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1590: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15a0: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
15b0: 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 73   public static s
15c0: 74 72 69 6e 67 20 54 72 61 63 65 46 6f 72 6d 61  tring TraceForma
15d0: 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  t..            {
15e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
15f0: 20 20 67 65 74 20 7b 20 6c 6f 63 6b 20 28 73 79    get { lock (sy
1600: 6e 63 52 6f 6f 74 29 20 7b 20 72 65 74 75 72 6e  ncRoot) { return
1610: 20 74 72 61 63 65 46 6f 72 6d 61 74 3b 20 7d 20   traceFormat; } 
1620: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
1630: 20 20 20 73 65 74 20 7b 20 6c 6f 63 6b 20 28 73     set { lock (s
1640: 79 6e 63 52 6f 6f 74 29 20 7b 20 74 72 61 63 65  yncRoot) { trace
1650: 46 6f 72 6d 61 74 20 3d 20 76 61 6c 75 65 3b 20  Format = value; 
1660: 7d 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  } }..           
1670: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
1680: 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
1690: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
16a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
16e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65  .            #re
16f0: 67 69 6f 6e 20 49 6e 74 65 72 61 63 74 69 76 65  gion Interactive
1700: 20 53 75 70 70 6f 72 74 20 4d 65 74 68 6f 64 73   Support Methods
1710: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
1720: 62 6c 69 63 20 73 74 61 74 69 63 20 73 74 72 69  blic static stri
1730: 6e 67 20 47 65 74 41 73 73 65 6d 62 6c 79 54 69  ng GetAssemblyTi
1740: 74 6c 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  tle(..          
1750: 20 20 20 20 20 20 41 73 73 65 6d 62 6c 79 20 61        Assembly a
1760: 73 73 65 6d 62 6c 79 0d 0a 20 20 20 20 20 20 20  ssembly..       
1770: 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
1780: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
1790: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 61             if (a
17a0: 73 73 65 6d 62 6c 79 20 21 3d 20 6e 75 6c 6c 29  ssembly != null)
17b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
17c0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
17d0: 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20           try..  
17e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17f0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
1800: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
1810: 28 61 73 73 65 6d 62 6c 79 2e 49 73 44 65 66 69  (assembly.IsDefi
1820: 6e 65 64 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ned(..          
1830: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1840: 20 20 20 20 20 20 74 79 70 65 6f 66 28 41 73 73        typeof(Ass
1850: 65 6d 62 6c 79 54 69 74 6c 65 41 74 74 72 69 62  emblyTitleAttrib
1860: 75 74 65 29 2c 20 66 61 6c 73 65 29 29 0d 0a 20  ute), false)).. 
1870: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1880: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
1890: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18a0: 20 20 20 20 20 20 41 73 73 65 6d 62 6c 79 54 69        AssemblyTi
18b0: 74 6c 65 41 74 74 72 69 62 75 74 65 20 74 69 74  tleAttribute tit
18c0: 6c 65 20 3d 0d 0a 20 20 20 20 20 20 20 20 20 20  le =..          
18d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18e0: 20 20 20 20 20 20 28 41 73 73 65 6d 62 6c 79 54        (AssemblyT
18f0: 69 74 6c 65 41 74 74 72 69 62 75 74 65 29 0d 0a  itleAttribute)..
1900: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1910: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1920: 61 73 73 65 6d 62 6c 79 2e 47 65 74 43 75 73 74  assembly.GetCust
1930: 6f 6d 41 74 74 72 69 62 75 74 65 73 28 0d 0a 20  omAttributes(.. 
1940: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1950: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1960: 20 20 20 74 79 70 65 6f 66 28 41 73 73 65 6d 62     typeof(Assemb
1970: 6c 79 54 69 74 6c 65 41 74 74 72 69 62 75 74 65  lyTitleAttribute
1980: 29 2c 20 66 61 6c 73 65 29 5b 30 5d 3b 0d 0a 0d  ), false)[0];...
1990: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
19a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
19b0: 75 72 6e 20 74 69 74 6c 65 2e 54 69 74 6c 65 3b  urn title.Title;
19c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
19d0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
19e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19f0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
1a00: 20 20 20 20 20 20 20 20 63 61 74 63 68 0d 0a 20          catch.. 
1a10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a20: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
1a30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
1a40: 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20   do nothing...  
1a50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a60: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
1a70: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
1a80: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
1a90: 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20   null;..        
1aa0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
1ab0: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
1ac0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ad0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ae0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1af0: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
1b00: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73          public s
1b10: 74 61 74 69 63 20 44 69 61 6c 6f 67 52 65 73 75  tatic DialogResu
1b20: 6c 74 20 53 68 6f 77 4d 65 73 73 61 67 65 28 0d  lt ShowMessage(.
1b30: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1b40: 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 20 74   TracePriority t
1b50: 72 61 63 65 50 72 69 6f 72 69 74 79 2c 0d 0a 20  racePriority,.. 
1b60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
1b70: 72 61 63 65 43 61 6c 6c 62 61 63 6b 20 74 72 61  raceCallback tra
1b80: 63 65 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20  ceCallback,..   
1b90: 20 20 20 20 20 20 20 20 20 20 20 20 20 41 73 73               Ass
1ba0: 65 6d 62 6c 79 20 61 73 73 65 6d 62 6c 79 2c 0d  embly assembly,.
1bb0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1bc0: 20 73 74 72 69 6e 67 20 6d 65 73 73 61 67 65 2c   string message,
1bd0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1be0: 20 20 73 74 72 69 6e 67 20 63 61 74 65 67 6f 72    string categor
1bf0: 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y,..            
1c00: 20 20 20 20 4d 65 73 73 61 67 65 42 6f 78 42 75      MessageBoxBu
1c10: 74 74 6f 6e 73 20 62 75 74 74 6f 6e 73 2c 0d 0a  ttons buttons,..
1c20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c30: 4d 65 73 73 61 67 65 42 6f 78 49 63 6f 6e 20 69  MessageBoxIcon i
1c40: 63 6f 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  con..           
1c50: 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
1c60: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1c70: 20 20 20 20 20 20 20 44 69 61 6c 6f 67 52 65 73         DialogRes
1c80: 75 6c 74 20 72 65 73 75 6c 74 20 3d 20 44 69 61  ult result = Dia
1c90: 6c 6f 67 52 65 73 75 6c 74 2e 4f 4b 3b 0d 0a 0d  logResult.OK;...
1ca0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1cb0: 20 54 72 61 63 65 28 74 72 61 63 65 50 72 69 6f   Trace(tracePrio
1cc0: 72 69 74 79 2c 20 74 72 61 63 65 43 61 6c 6c 62  rity, traceCallb
1cd0: 61 63 6b 2c 20 6d 65 73 73 61 67 65 2c 20 63 61  ack, message, ca
1ce0: 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
1cf0: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
1d00: 53 79 73 74 65 6d 49 6e 66 6f 72 6d 61 74 69 6f  SystemInformatio
1d10: 6e 2e 55 73 65 72 49 6e 74 65 72 61 63 74 69 76  n.UserInteractiv
1d20: 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e)..            
1d30: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1d40: 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
1d50: 67 20 74 69 74 6c 65 20 3d 20 47 65 74 41 73 73  g title = GetAss
1d60: 65 6d 62 6c 79 54 69 74 6c 65 28 61 73 73 65 6d  emblyTitle(assem
1d70: 62 6c 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  bly);....       
1d80: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
1d90: 28 74 69 74 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d  (title == null).
1da0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1db0: 20 20 20 20 20 20 20 20 20 74 69 74 6c 65 20 3d           title =
1dc0: 20 41 70 70 6c 69 63 61 74 69 6f 6e 2e 50 72 6f   Application.Pro
1dd0: 64 75 63 74 4e 61 6d 65 3b 0d 0a 0d 0a 20 20 20  ductName;....   
1de0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1df0: 20 72 65 73 75 6c 74 20 3d 20 4d 65 73 73 61 67   result = Messag
1e00: 65 42 6f 78 2e 53 68 6f 77 28 6d 65 73 73 61 67  eBox.Show(messag
1e10: 65 2c 20 74 69 74 6c 65 2c 20 62 75 74 74 6f 6e  e, title, button
1e20: 73 2c 20 69 63 6f 6e 29 3b 0d 0a 0d 0a 20 20 20  s, icon);....   
1e30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e40: 20 54 72 61 63 65 28 74 72 61 63 65 50 72 69 6f   Trace(tracePrio
1e50: 72 69 74 79 2c 20 74 72 61 63 65 43 61 6c 6c 62  rity, traceCallb
1e60: 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d  ack, String.Form
1e70: 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
1e80: 20 20 20 20 20 20 20 20 20 20 20 20 20 22 55 73               "Us
1e90: 65 72 20 63 68 6f 69 63 65 20 6f 66 20 7b 30 7d  er choice of {0}
1ea0: 2e 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 72  .", ForDisplay(r
1eb0: 65 73 75 6c 74 29 29 2c 0d 0a 20 20 20 20 20 20  esult)),..      
1ec0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ed0: 20 20 63 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a    category);....
1ee0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ef0: 20 20 20 20 72 65 74 75 72 6e 20 72 65 73 75 6c      return resul
1f00: 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t;..            
1f10: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
1f20: 20 20 20 20 20 20 20 20 20 54 72 61 63 65 28 74           Trace(t
1f30: 72 61 63 65 50 72 69 6f 72 69 74 79 2c 20 74 72  racePriority, tr
1f40: 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72  aceCallback, Str
1f50: 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
1f60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f70: 20 22 44 65 66 61 75 6c 74 20 63 68 6f 69 63 65   "Default choice
1f80: 20 6f 66 20 7b 30 7d 2e 22 2c 20 46 6f 72 44 69   of {0}.", ForDi
1f90: 73 70 6c 61 79 28 72 65 73 75 6c 74 29 29 2c 0d  splay(result)),.
1fa0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1fb0: 20 20 20 20 20 63 61 74 65 67 6f 72 79 29 3b 0d       category);.
1fc0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1fd0: 20 20 20 72 65 74 75 72 6e 20 72 65 73 75 6c 74     return result
1fe0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
1ff0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65  ..            #e
2000: 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
2010: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
2020: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2030: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2040: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2050: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
2060: 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69             #regi
2070: 6f 6e 20 54 72 61 63 69 6e 67 20 53 75 70 70 6f  on Tracing Suppo
2080: 72 74 20 4d 65 74 68 6f 64 73 0d 0a 20 20 20 20  rt Methods..    
2090: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73          public s
20a0: 74 61 74 69 63 20 6c 6f 6e 67 20 4e 65 78 74 49  tatic long NextI
20b0: 64 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  d()..           
20c0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
20d0: 20 20 20 20 72 65 74 75 72 6e 20 49 6e 74 65 72      return Inter
20e0: 6c 6f 63 6b 65 64 2e 49 6e 63 72 65 6d 65 6e 74  locked.Increment
20f0: 28 72 65 66 20 6e 65 78 74 49 64 29 3b 0d 0a 20  (ref nextId);.. 
2100: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
2110: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
2120: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2130: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2140: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2150: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
2160: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
2170: 75 62 6c 69 63 20 73 74 61 74 69 63 20 73 74 72  ublic static str
2180: 69 6e 67 20 54 69 6d 65 53 74 61 6d 70 28 44 61  ing TimeStamp(Da
2190: 74 65 54 69 6d 65 20 64 61 74 65 54 69 6d 65 29  teTime dateTime)
21a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
21b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
21c0: 20 72 65 74 75 72 6e 20 64 61 74 65 54 69 6d 65   return dateTime
21d0: 2e 54 6f 53 74 72 69 6e 67 28 49 73 6f 38 36 30  .ToString(Iso860
21e0: 31 44 61 74 65 54 69 6d 65 4f 75 74 70 75 74 46  1DateTimeOutputF
21f0: 6f 72 6d 61 74 29 3b 0d 0a 20 20 20 20 20 20 20  ormat);..       
2200: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
2210: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
2220: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2230: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2240: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2250: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
2260: 20 20 20 20 20 20 20 20 20 5b 4d 65 74 68 6f 64           [Method
2270: 49 6d 70 6c 28 4d 65 74 68 6f 64 49 6d 70 6c 4f  Impl(MethodImplO
2280: 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e 69 6e  ptions.NoInlinin
2290: 67 29 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  g)]..           
22a0: 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
22b0: 73 74 72 69 6e 67 20 47 65 74 4d 65 74 68 6f 64  string GetMethod
22c0: 4e 61 6d 65 28 0d 0a 20 20 20 20 20 20 20 20 20  Name(..         
22d0: 20 20 20 20 20 20 20 53 74 61 63 6b 54 72 61 63         StackTrac
22e0: 65 20 73 74 61 63 6b 54 72 61 63 65 2c 0d 0a 20  e stackTrace,.. 
22f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
2300: 6e 74 20 6c 65 76 65 6c 0d 0a 20 20 20 20 20 20  nt level..      
2310: 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
2320: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
2330: 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79 0d              try.
2340: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2350: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
2360: 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
2370: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2380: 2f 2f 20 4e 4f 54 45 3a 20 49 66 20 61 20 76 61  // NOTE: If a va
2390: 6c 69 64 20 73 74 61 63 6b 20 74 72 61 63 65 20  lid stack trace 
23a0: 77 61 73 20 6e 6f 74 20 73 75 70 70 6c 69 65 64  was not supplied
23b0: 20 62 79 20 74 68 65 0d 0a 20 20 20 20 20 20 20   by the..       
23c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
23d0: 20 20 20 20 20 20 63 61 6c 6c 65 72 2c 20 63 72        caller, cr
23e0: 65 61 74 65 20 6f 6e 65 20 6e 6f 77 20 62 61 73  eate one now bas
23f0: 65 64 20 6f 6e 20 74 68 65 20 63 75 72 72 65 6e  ed on the curren
2400: 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  t..             
2410: 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
2420: 65 78 65 63 75 74 69 6f 6e 20 73 74 61 63 6b 2e  execution stack.
2430: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2440: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
2450: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
2460: 20 28 73 74 61 63 6b 54 72 61 63 65 20 3d 3d 20   (stackTrace == 
2470: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
2480: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
2490: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24a0: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
24b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24c0: 20 20 2f 2f 20 4e 4f 54 45 3a 20 47 72 61 62 20    // NOTE: Grab 
24d0: 74 68 65 20 63 75 72 72 65 6e 74 20 65 78 65 63  the current exec
24e0: 75 74 69 6f 6e 20 73 74 61 63 6b 2e 0d 0a 20 20  ution stack...  
24f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2500: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
2510: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2520: 20 20 73 74 61 63 6b 54 72 61 63 65 20 3d 20 6e    stackTrace = n
2530: 65 77 20 53 74 61 63 6b 54 72 61 63 65 28 29 3b  ew StackTrace();
2540: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2550: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
2560: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2570: 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a          // NOTE:
2580: 20 41 6c 77 61 79 73 20 73 6b 69 70 20 74 68 69   Always skip thi
2590: 73 20 63 61 6c 6c 20 66 72 61 6d 65 20 77 68 65  s call frame whe
25a0: 6e 20 77 65 20 63 61 70 74 75 72 65 0d 0a 20 20  n we capture..  
25b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25c0: 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 74        //       t
25d0: 68 65 20 73 74 61 63 6b 20 74 72 61 63 65 2e 0d  he stack trace..
25e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
25f0: 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
2600: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2610: 20 20 20 20 20 6c 65 76 65 6c 2b 2b 3b 0d 0a 20       level++;.. 
2620: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2630: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
2640: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
2650: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2660: 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 47 65 74      // NOTE: Get
2670: 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 73   the specified s
2680: 74 61 63 6b 20 66 72 61 6d 65 20 28 61 6c 77 61  tack frame (alwa
2690: 79 73 20 61 64 64 20 6f 6e 65 20 74 6f 0d 0a 20  ys add one to.. 
26a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26b0: 20 20 20 2f 2f 20 20 20 20 20 20 20 73 6b 69 70     //       skip
26c0: 20 74 68 69 73 20 6d 65 74 68 6f 64 29 2e 0d 0a   this method)...
26d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26e0: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
26f0: 20 20 20 20 20 20 20 20 20 20 20 20 53 74 61 63              Stac
2700: 6b 46 72 61 6d 65 20 73 74 61 63 6b 46 72 61 6d  kFrame stackFram
2710: 65 20 3d 20 73 74 61 63 6b 54 72 61 63 65 2e 47  e = stackTrace.G
2720: 65 74 46 72 61 6d 65 28 6c 65 76 65 6c 29 3b 0d  etFrame(level);.
2730: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
2740: 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
2750: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
2760: 2f 20 4e 4f 54 45 3a 20 47 65 74 20 74 68 65 20  / NOTE: Get the 
2770: 6d 65 74 68 6f 64 20 66 6f 72 20 74 68 65 20 73  method for the s
2780: 74 61 63 6b 20 66 72 61 6d 65 2e 0d 0a 20 20 20  tack frame...   
2790: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27a0: 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
27b0: 20 20 20 20 20 20 20 20 20 4d 65 74 68 6f 64 42           MethodB
27c0: 61 73 65 20 6d 65 74 68 6f 64 42 61 73 65 20 3d  ase methodBase =
27d0: 20 73 74 61 63 6b 46 72 61 6d 65 2e 47 65 74 4d   stackFrame.GetM
27e0: 65 74 68 6f 64 28 29 3b 0d 0a 0d 0a 20 20 20 20  ethod();....    
27f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2800: 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
2810: 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a          // NOTE:
2820: 20 47 65 74 20 74 68 65 20 74 79 70 65 20 66 6f   Get the type fo
2830: 72 20 74 68 65 20 6d 65 74 68 6f 64 2e 0d 0a 20  r the method... 
2840: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2850: 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
2860: 20 20 20 20 20 20 20 20 20 20 20 54 79 70 65 20             Type 
2870: 74 79 70 65 20 3d 20 6d 65 74 68 6f 64 42 61 73  type = methodBas
2880: 65 2e 44 65 63 6c 61 72 69 6e 67 54 79 70 65 3b  e.DeclaringType;
2890: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
28a0: 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
28b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28c0: 2f 2f 20 4e 4f 54 45 3a 20 47 65 74 20 74 68 65  // NOTE: Get the
28d0: 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 6d 65 74   name of the met
28e0: 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  hod...          
28f0: 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
2900: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2910: 20 20 73 74 72 69 6e 67 20 6e 61 6d 65 20 3d 20    string name = 
2920: 6d 65 74 68 6f 64 42 61 73 65 2e 4e 61 6d 65 3b  methodBase.Name;
2930: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2940: 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
2950: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2960: 2f 2f 20 4e 4f 54 45 3a 20 52 65 74 75 72 6e 20  // NOTE: Return 
2970: 74 68 65 20 70 72 6f 70 65 72 6c 79 20 66 6f 72  the properly for
2980: 6d 61 74 74 65 64 20 72 65 73 75 6c 74 2e 0d 0a  matted result...
2990: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29a0: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
29b0: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
29c0: 72 6e 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  rn String.Format
29d0: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
29e0: 20 20 20 20 20 20 20 20 20 20 20 22 7b 30 7d 7b             "{0}{
29f0: 31 7d 7b 32 7d 22 2c 20 74 79 70 65 2e 4e 61 6d  1}{2}", type.Nam
2a00: 65 2c 20 54 79 70 65 2e 44 65 6c 69 6d 69 74 65  e, Type.Delimite
2a10: 72 2c 20 6e 61 6d 65 29 3b 0d 0a 20 20 20 20 20  r, name);..     
2a20: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
2a30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 61                ca
2a40: 74 63 68 0d 0a 20 20 20 20 20 20 20 20 20 20 20  tch..           
2a50: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2a60: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64              // d
2a70: 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20  o nothing...    
2a80: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
2a90: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2aa0: 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 20   return null;.. 
2ab0: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
2ac0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
2ad0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ae0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2af0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
2b10: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
2b20: 75 62 6c 69 63 20 73 74 61 74 69 63 20 76 6f 69  ublic static voi
2b30: 64 20 54 72 61 63 65 43 6f 72 65 28 0d 0a 20 20  d TraceCore(..  
2b40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
2b50: 72 69 6e 67 20 6d 65 73 73 61 67 65 2c 0d 0a 20  ring message,.. 
2b60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
2b70: 74 72 69 6e 67 20 63 61 74 65 67 6f 72 79 0d 0a  tring category..
2b80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b90: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
2ba0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2bb0: 20 20 6c 6f 63 6b 20 28 73 79 6e 63 52 6f 6f 74    lock (syncRoot
2bc0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
2bd0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
2be0: 20 20 20 20 20 20 20 20 20 20 53 79 73 74 65 6d            System
2bf0: 2e 44 69 61 67 6e 6f 73 74 69 63 73 2e 54 72 61  .Diagnostics.Tra
2c00: 63 65 2e 57 72 69 74 65 4c 69 6e 65 28 6d 65 73  ce.WriteLine(mes
2c10: 73 61 67 65 2c 20 63 61 74 65 67 6f 72 79 29 3b  sage, category);
2c20: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2c30: 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 69 61        System.Dia
2c40: 67 6e 6f 73 74 69 63 73 2e 54 72 61 63 65 2e 46  gnostics.Trace.F
2c50: 6c 75 73 68 28 29 3b 0d 0a 20 20 20 20 20 20 20  lush();..       
2c60: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
2c70: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
2c80: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
2c90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ca0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2cb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2cc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
2cd0: 20 20 20 20 20 20 20 20 20 20 20 20 5b 4d 65 74              [Met
2ce0: 68 6f 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49 6d  hodImpl(MethodIm
2cf0: 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69  plOptions.NoInli
2d00: 6e 69 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20 20  ning)]..        
2d10: 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69      public stati
2d20: 63 20 73 74 72 69 6e 67 20 54 72 61 63 65 28 0d  c string Trace(.
2d30: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2d40: 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 20 74   TracePriority t
2d50: 72 61 63 65 50 72 69 6f 72 69 74 79 2c 0d 0a 20  racePriority,.. 
2d60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
2d70: 72 61 63 65 43 61 6c 6c 62 61 63 6b 20 74 72 61  raceCallback tra
2d80: 63 65 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20  ceCallback,..   
2d90: 20 20 20 20 20 20 20 20 20 20 20 20 20 45 78 63               Exc
2da0: 65 70 74 69 6f 6e 20 65 78 63 65 70 74 69 6f 6e  eption exception
2db0: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
2dc0: 20 20 20 73 74 72 69 6e 67 20 63 61 74 65 67 6f     string catego
2dd0: 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ry..            
2de0: 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20      )..         
2df0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
2e00: 20 20 20 20 20 20 69 66 20 28 65 78 63 65 70 74        if (except
2e10: 69 6f 6e 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ion != null)..  
2e20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e30: 20 20 72 65 74 75 72 6e 20 54 72 61 63 65 28 74    return Trace(t
2e40: 72 61 63 65 50 72 69 6f 72 69 74 79 2c 20 74 72  racePriority, tr
2e50: 61 63 65 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20  aceCallback,..  
2e60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e70: 20 20 20 20 20 20 6e 65 77 20 53 74 61 63 6b 54        new StackT
2e80: 72 61 63 65 28 65 78 63 65 70 74 69 6f 6e 2c 20  race(exception, 
2e90: 74 72 75 65 29 2c 20 30 2c 0d 0a 20 20 20 20 20  true), 0,..     
2ea0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2eb0: 20 20 20 65 78 63 65 70 74 69 6f 6e 2e 54 6f 53     exception.ToS
2ec0: 74 72 69 6e 67 28 29 2c 20 63 61 74 65 67 6f 72  tring(), categor
2ed0: 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
2ee0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75         return nu
2ef0: 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll;..           
2f00: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
2f10: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
2f20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f50: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
2f60: 20 20 20 20 20 5b 4d 65 74 68 6f 64 49 6d 70 6c       [MethodImpl
2f70: 28 4d 65 74 68 6f 64 49 6d 70 6c 4f 70 74 69 6f  (MethodImplOptio
2f80: 6e 73 2e 4e 6f 49 6e 6c 69 6e 69 6e 67 29 5d 0d  ns.NoInlining)].
2f90: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
2fa0: 6c 69 63 20 73 74 61 74 69 63 20 73 74 72 69 6e  lic static strin
2fb0: 67 20 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20  g Trace(..      
2fc0: 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 50            TraceP
2fd0: 72 69 6f 72 69 74 79 20 74 72 61 63 65 50 72 69  riority tracePri
2fe0: 6f 72 69 74 79 2c 0d 0a 20 20 20 20 20 20 20 20  ority,..        
2ff0: 20 20 20 20 20 20 20 20 54 72 61 63 65 43 61 6c          TraceCal
3000: 6c 62 61 63 6b 20 74 72 61 63 65 43 61 6c 6c 62  lback traceCallb
3010: 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ack,..          
3020: 20 20 20 20 20 20 73 74 72 69 6e 67 20 6d 65 73        string mes
3030: 73 61 67 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  sage,..         
3040: 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 63 61         string ca
3050: 74 65 67 6f 72 79 0d 0a 20 20 20 20 20 20 20 20  tegory..        
3060: 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
3070: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
3080: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
3090: 20 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20   Trace(..       
30a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
30b0: 63 65 50 72 69 6f 72 69 74 79 2c 20 74 72 61 63  cePriority, trac
30c0: 65 43 61 6c 6c 62 61 63 6b 2c 20 6e 75 6c 6c 2c  eCallback, null,
30d0: 20 31 2c 20 6d 65 73 73 61 67 65 2c 20 63 61 74   1, message, cat
30e0: 65 67 6f 72 79 29 3b 0d 0a 20 20 20 20 20 20 20  egory);..       
30f0: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
3100: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
3110: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3120: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3130: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3140: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
3150: 20 20 20 20 20 20 20 20 20 5b 4d 65 74 68 6f 64           [Method
3160: 49 6d 70 6c 28 4d 65 74 68 6f 64 49 6d 70 6c 4f  Impl(MethodImplO
3170: 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e 69 6e  ptions.NoInlinin
3180: 67 29 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  g)]..           
3190: 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
31a0: 73 74 72 69 6e 67 20 54 72 61 63 65 28 0d 0a 20  string Trace(.. 
31b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
31c0: 72 61 63 65 50 72 69 6f 72 69 74 79 20 74 72 61  racePriority tra
31d0: 63 65 50 72 69 6f 72 69 74 79 2c 0d 0a 20 20 20  cePriority,..   
31e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
31f0: 63 65 43 61 6c 6c 62 61 63 6b 20 74 72 61 63 65  ceCallback trace
3200: 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20  Callback,..     
3210: 20 20 20 20 20 20 20 20 20 20 20 53 74 61 63 6b             Stack
3220: 54 72 61 63 65 20 73 74 61 63 6b 54 72 61 63 65  Trace stackTrace
3230: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
3240: 20 20 20 69 6e 74 20 6c 65 76 65 6c 2c 0d 0a 20     int level,.. 
3250: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
3260: 74 72 69 6e 67 20 6d 65 73 73 61 67 65 2c 0d 0a  tring message,..
3270: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3280: 73 74 72 69 6e 67 20 63 61 74 65 67 6f 72 79 0d  string category.
3290: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
32a0: 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   )..            
32b0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
32c0: 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
32d0: 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20         // NOTE: 
32e0: 49 66 20 74 68 65 20 70 72 69 6f 72 69 74 79 20  If the priority 
32f0: 6f 66 20 74 68 69 73 20 6d 65 73 73 61 67 65 20  of this message 
3300: 69 73 20 6c 65 73 73 20 74 68 61 6e 20 77 68 61  is less than wha
3310: 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  t..             
3320: 20 20 20 2f 2f 20 20 20 20 20 20 20 77 65 20 63     //       we c
3330: 75 72 72 65 6e 74 6c 79 20 63 61 72 65 20 61 62  urrently care ab
3340: 6f 75 74 2c 20 6a 75 73 74 20 72 65 74 75 72 6e  out, just return
3350: 20 6e 6f 77 2e 0d 0a 20 20 20 20 20 20 20 20 20   now...         
3360: 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
3370: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 74             if (t
3380: 72 61 63 65 50 72 69 6f 72 69 74 79 20 3c 20 54  racePriority < T
3390: 72 61 63 65 50 72 69 6f 72 69 74 79 29 0d 0a 20  racePriority).. 
33a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33b0: 20 20 20 72 65 74 75 72 6e 20 6d 65 73 73 61 67     return messag
33c0: 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
33d0: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
33e0: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54            // NOT
33f0: 45 3a 20 41 6c 77 61 79 73 20 73 6b 69 70 20 74  E: Always skip t
3400: 68 69 73 20 63 61 6c 6c 20 66 72 61 6d 65 20 69  his call frame i
3410: 66 20 74 68 65 20 73 74 61 63 6b 20 74 72 61 63  f the stack trac
3420: 65 20 69 73 0d 0a 20 20 20 20 20 20 20 20 20 20  e is..          
3430: 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 67        //       g
3440: 6f 69 6e 67 20 74 6f 20 62 65 20 63 61 70 74 75  oing to be captu
3450: 72 65 64 20 62 79 20 47 65 74 4d 65 74 68 6f 64  red by GetMethod
3460: 4e 61 6d 65 2e 0d 0a 20 20 20 20 20 20 20 20 20  Name...         
3470: 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
3480: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73             if (s
3490: 74 61 63 6b 54 72 61 63 65 20 3d 3d 20 6e 75 6c  tackTrace == nul
34a0: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
34b0: 20 20 20 20 20 20 20 20 6c 65 76 65 6c 2b 2b 3b          level++;
34c0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
34d0: 20 20 20 20 69 66 20 28 74 72 61 63 65 43 61 6c      if (traceCal
34e0: 6c 62 61 63 6b 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  lback == null)..
34f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3500: 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63      traceCallbac
3510: 6b 20 3d 20 54 72 61 63 65 43 6f 72 65 3b 0d 0a  k = TraceCore;..
3520: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
3530: 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28    traceCallback(
3540: 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22 7b  String.Format("{
3550: 30 7d 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20  0}: {1}",..     
3560: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 47                 G
3570: 65 74 4d 65 74 68 6f 64 4e 61 6d 65 28 73 74 61  etMethodName(sta
3580: 63 6b 54 72 61 63 65 2c 20 6c 65 76 65 6c 29 2c  ckTrace, level),
3590: 20 6d 65 73 73 61 67 65 29 2c 20 63 61 74 65 67   message), categ
35a0: 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
35b0: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
35c0: 6d 65 73 73 61 67 65 3b 0d 0a 20 20 20 20 20 20  message;..      
35d0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
35e0: 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
35f0: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
3600: 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
3610: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
3620: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3630: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3640: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3650: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3660: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65  /....        #re
3670: 67 69 6f 6e 20 4d 6f 63 6b 52 65 67 69 73 74 72  gion MockRegistr
3680: 79 4b 65 79 20 43 6c 61 73 73 0d 0a 20 20 20 20  yKey Class..    
3690: 20 20 20 20 70 72 69 76 61 74 65 20 73 65 61 6c      private seal
36a0: 65 64 20 63 6c 61 73 73 20 4d 6f 63 6b 52 65 67  ed class MockReg
36b0: 69 73 74 72 79 4b 65 79 20 3a 20 49 44 69 73 70  istryKey : IDisp
36c0: 6f 73 61 62 6c 65 0d 0a 20 20 20 20 20 20 20 20  osable..        
36d0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  {..            #
36e0: 72 65 67 69 6f 6e 20 50 72 69 76 61 74 65 20 43  region Private C
36f0: 6f 6e 73 74 72 75 63 74 6f 72 73 0d 0a 20 20 20  onstructors..   
3700: 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
3710: 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79   MockRegistryKey
3720: 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ()..            
3730: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
3740: 20 20 20 77 68 61 74 49 66 20 3d 20 74 72 75 65     whatIf = true
3750: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
3760: 20 20 20 72 65 61 64 4f 6e 6c 79 20 3d 20 74 72     readOnly = tr
3770: 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
3780: 20 20 20 20 20 73 61 66 65 20 3d 20 74 72 75 65       safe = true
3790: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
37a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65  ..            #e
37b0: 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
37c0: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
37d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3800: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
3810: 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69             #regi
3820: 6f 6e 20 50 75 62 6c 69 63 20 43 6f 6e 73 74 72  on Public Constr
3830: 75 63 74 6f 72 73 0d 0a 20 20 20 20 20 20 20 20  uctors..        
3840: 20 20 20 20 70 75 62 6c 69 63 20 4d 6f 63 6b 52      public MockR
3850: 65 67 69 73 74 72 79 4b 65 79 28 0d 0a 20 20 20  egistryKey(..   
3860: 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67               Reg
3870: 69 73 74 72 79 4b 65 79 20 6b 65 79 0d 0a 20 20  istryKey key..  
3880: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d                ).
3890: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
38a0: 20 3a 20 74 68 69 73 28 29 0d 0a 20 20 20 20 20   : this()..     
38b0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
38c0: 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 6b            this.k
38d0: 65 79 20 3d 20 6b 65 79 3b 0d 0a 20 20 20 20 20  ey = key;..     
38e0: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
38f0: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
3900: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3910: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3920: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3930: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
3940: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
3950: 63 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65  c MockRegistryKe
3960: 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
3970: 20 20 20 20 52 65 67 69 73 74 72 79 4b 65 79 20      RegistryKey 
3980: 6b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  key,..          
3990: 20 20 20 20 20 20 73 74 72 69 6e 67 20 73 75 62        string sub
39a0: 4b 65 79 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20  KeyName..       
39b0: 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
39c0: 20 20 20 20 20 20 20 20 20 20 20 20 3a 20 74 68              : th
39d0: 69 73 28 6b 65 79 29 0d 0a 20 20 20 20 20 20 20  is(key)..       
39e0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
39f0: 20 20 20 20 20 20 20 20 74 68 69 73 2e 73 75 62          this.sub
3a00: 4b 65 79 4e 61 6d 65 20 3d 20 73 75 62 4b 65 79  KeyName = subKey
3a10: 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  Name;..         
3a20: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
3a30: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
3a40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3a50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3a60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3a70: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
3a80: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 4d 6f         public Mo
3a90: 63 6b 52 65 67 69 73 74 72 79 4b 65 79 28 0d 0a  ckRegistryKey(..
3aa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3ab0: 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65 79 2c  RegistryKey key,
3ac0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
3ad0: 20 20 73 74 72 69 6e 67 20 73 75 62 4b 65 79 4e    string subKeyN
3ae0: 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ame,..          
3af0: 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49        bool whatI
3b00: 66 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  f..             
3b10: 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20     )..          
3b20: 20 20 20 20 20 20 3a 20 74 68 69 73 28 6b 65 79        : this(key
3b30: 2c 20 73 75 62 4b 65 79 4e 61 6d 65 29 0d 0a 20  , subKeyName).. 
3b40: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
3b50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
3b60: 69 73 2e 77 68 61 74 49 66 20 3d 20 77 68 61 74  is.whatIf = what
3b70: 49 66 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  If;..           
3b80: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
3b90: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
3ba0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3bb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3bc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3bd0: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
3be0: 20 20 20 20 20 70 75 62 6c 69 63 20 4d 6f 63 6b       public Mock
3bf0: 52 65 67 69 73 74 72 79 4b 65 79 28 0d 0a 20 20  RegistryKey(..  
3c00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65                Re
3c10: 67 69 73 74 72 79 4b 65 79 20 6b 65 79 2c 0d 0a  gistryKey key,..
3c20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3c30: 73 74 72 69 6e 67 20 73 75 62 4b 65 79 4e 61 6d  string subKeyNam
3c40: 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
3c50: 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c      bool whatIf,
3c60: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
3c70: 20 20 62 6f 6f 6c 20 72 65 61 64 4f 6e 6c 79 0d    bool readOnly.
3c80: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
3c90: 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   )..            
3ca0: 20 20 20 20 3a 20 74 68 69 73 28 6b 65 79 2c 20      : this(key, 
3cb0: 73 75 62 4b 65 79 4e 61 6d 65 2c 20 77 68 61 74  subKeyName, what
3cc0: 49 66 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  If)..           
3cd0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
3ce0: 20 20 20 20 74 68 69 73 2e 72 65 61 64 4f 6e 6c      this.readOnl
3cf0: 79 20 3d 20 72 65 61 64 4f 6e 6c 79 3b 0d 0a 20  y = readOnly;.. 
3d00: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
3d10: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
3d20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3d30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3d40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3d50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
3d60: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
3d70: 75 62 6c 69 63 20 4d 6f 63 6b 52 65 67 69 73 74  ublic MockRegist
3d80: 72 79 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20  ryKey(..        
3d90: 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79          Registry
3da0: 4b 65 79 20 6b 65 79 2c 0d 0a 20 20 20 20 20 20  Key key,..      
3db0: 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
3dc0: 20 73 75 62 4b 65 79 4e 61 6d 65 2c 0d 0a 20 20   subKeyName,..  
3dd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
3de0: 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20  ol whatIf,..    
3df0: 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
3e00: 20 72 65 61 64 4f 6e 6c 79 2c 0d 0a 20 20 20 20   readOnly,..    
3e10: 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
3e20: 20 73 61 66 65 0d 0a 20 20 20 20 20 20 20 20 20   safe..         
3e30: 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
3e40: 20 20 20 20 20 20 20 20 20 20 3a 20 74 68 69 73            : this
3e50: 28 6b 65 79 2c 20 73 75 62 4b 65 79 4e 61 6d 65  (key, subKeyName
3e60: 2c 20 77 68 61 74 49 66 2c 20 72 65 61 64 4f 6e  , whatIf, readOn
3e70: 6c 79 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ly)..           
3e80: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
3e90: 20 20 20 20 74 68 69 73 2e 73 61 66 65 20 3d 20      this.safe = 
3ea0: 73 61 66 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  safe;..         
3eb0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
3ec0: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
3ed0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3ee0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3ef0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3f00: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
3f10: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 4d 6f         public Mo
3f20: 63 6b 52 65 67 69 73 74 72 79 4b 65 79 28 0d 0a  ckRegistryKey(..
3f30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3f40: 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65 79 2c  RegistryKey key,
3f50: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
3f60: 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 0d 0a 20    bool whatIf.. 
3f70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29                 )
3f80: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
3f90: 20 20 3a 20 74 68 69 73 28 6b 65 79 2c 20 6e 75    : this(key, nu
3fa0: 6c 6c 2c 20 77 68 61 74 49 66 29 0d 0a 20 20 20  ll, whatIf)..   
3fb0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
3fc0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64              // d
3fd0: 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20  o nothing...    
3fe0: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
3ff0: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
4000: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4010: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4020: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4030: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
4040: 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
4050: 69 63 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b  ic MockRegistryK
4060: 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey(..           
4070: 20 20 20 20 20 52 65 67 69 73 74 72 79 4b 65 79       RegistryKey
4080: 20 6b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20   key,..         
4090: 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74         bool what
40a0: 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  If,..           
40b0: 20 20 20 20 20 62 6f 6f 6c 20 72 65 61 64 4f 6e       bool readOn
40c0: 6c 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ly..            
40d0: 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20      )..         
40e0: 20 20 20 20 20 20 20 3a 20 74 68 69 73 28 6b 65         : this(ke
40f0: 79 2c 20 6e 75 6c 6c 2c 20 77 68 61 74 49 66 2c  y, null, whatIf,
4100: 20 72 65 61 64 4f 6e 6c 79 29 0d 0a 20 20 20 20   readOnly)..    
4110: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
4120: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f             // do
4130: 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20   nothing...     
4140: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
4150: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
4160: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4170: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4180: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4190: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
41a0: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
41b0: 63 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65  c MockRegistryKe
41c0: 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
41d0: 20 20 20 20 52 65 67 69 73 74 72 79 4b 65 79 20      RegistryKey 
41e0: 6b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  key,..          
41f0: 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49        bool whatI
4200: 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f,..            
4210: 20 20 20 20 62 6f 6f 6c 20 72 65 61 64 4f 6e 6c      bool readOnl
4220: 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y,..            
4230: 20 20 20 20 62 6f 6f 6c 20 73 61 66 65 0d 0a 20      bool safe.. 
4240: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29                 )
4250: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
4260: 20 20 3a 20 74 68 69 73 28 6b 65 79 2c 20 6e 75    : this(key, nu
4270: 6c 6c 2c 20 77 68 61 74 49 66 2c 20 72 65 61 64  ll, whatIf, read
4280: 4f 6e 6c 79 2c 20 73 61 66 65 29 0d 0a 20 20 20  Only, safe)..   
4290: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
42a0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64              // d
42b0: 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20  o nothing...    
42c0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
42d0: 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
42e0: 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n....           
42f0: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
4300: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4310: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4320: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4330: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
4340: 20 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c      #region Publ
4350: 69 63 20 4d 65 74 68 6f 64 73 0d 0a 20 20 20 20  ic Methods..    
4360: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 76          public v
4370: 6f 69 64 20 43 6c 6f 73 65 28 29 0d 0a 20 20 20  oid Close()..   
4380: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
4390: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
43a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
43b0: 2f 2f 20 4e 4f 54 45 3a 20 4e 6f 20 64 69 73 70  // NOTE: No disp
43c0: 6f 73 65 64 20 63 68 65 63 6b 20 68 65 72 65 20  osed check here 
43d0: 62 65 63 61 75 73 65 20 63 61 6c 6c 69 6e 67 20  because calling 
43e0: 74 68 69 73 20 6d 65 74 68 6f 64 0d 0a 20 20 20  this method..   
43f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
4400: 20 20 20 20 20 20 73 68 6f 75 6c 64 20 62 65 20        should be 
4410: 6a 75 73 74 20 6c 69 6b 65 20 63 61 6c 6c 69 6e  just like callin
4420: 67 20 44 69 73 70 6f 73 65 2e 0d 0a 20 20 20 20  g Dispose...    
4430: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
4440: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4450: 44 69 73 70 6f 73 65 28 74 72 75 65 29 3b 0d 0a  Dispose(true);..
4460: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
4470: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
4480: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4490: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
44a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
44b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
44c0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
44d0: 70 75 62 6c 69 63 20 4d 6f 63 6b 52 65 67 69 73  public MockRegis
44e0: 74 72 79 4b 65 79 20 43 72 65 61 74 65 53 75 62  tryKey CreateSub
44f0: 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  Key(..          
4500: 20 20 20 20 20 20 73 74 72 69 6e 67 20 73 75 62        string sub
4510: 4b 65 79 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20  KeyName..       
4520: 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
4530: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
4540: 20 20 20 20 20 20 20 20 20 20 20 43 68 65 63 6b             Check
4550: 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 20 20 20  Disposed();..   
4560: 20 20 20 20 20 20 20 20 20 20 20 20 20 43 68 65               Che
4570: 63 6b 52 65 61 64 4f 6e 6c 79 28 29 3b 0d 0a 0d  ckReadOnly();...
4580: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
4590: 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c   if (key == null
45a0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
45b0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75         return nu
45c0: 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ll;....         
45d0: 20 20 20 20 20 20 20 69 66 20 28 77 68 61 74 49         if (whatI
45e0: 66 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f)..            
45f0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
4600: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
4610: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4620: 20 20 20 2f 2f 20 48 41 43 4b 3a 20 41 74 74 65     // HACK: Atte
4630: 6d 70 74 20 74 6f 20 6f 70 65 6e 20 74 68 65 20  mpt to open the 
4640: 73 70 65 63 69 66 69 65 64 20 73 75 62 2d 6b 65  specified sub-ke
4650: 79 2e 20 20 49 66 20 74 68 69 73 0d 0a 20 20 20  y.  If this..   
4660: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4670: 20 2f 2f 20 20 20 20 20 20 20 66 61 69 6c 73 2c   //       fails,
4680: 20 77 65 20 77 69 6c 6c 20 73 69 6d 70 6c 79 20   we will simply 
4690: 72 65 74 75 72 6e 20 74 68 65 20 77 72 61 70 70  return the wrapp
46a0: 65 64 20 72 6f 6f 74 20 6b 65 79 0d 0a 20 20 20  ed root key..   
46b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
46c0: 20 2f 2f 20 20 20 20 20 20 20 69 74 73 65 6c 66   //       itself
46d0: 20 73 69 6e 63 65 20 6e 6f 20 77 72 69 74 65 73   since no writes
46e0: 20 61 72 65 20 61 6c 6c 6f 77 65 64 20 69 6e 20   are allowed in 
46f0: 27 77 68 61 74 2d 69 66 27 0d 0a 20 20 20 20 20  'what-if'..     
4700: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
4710: 2f 20 20 20 20 20 20 20 6d 6f 64 65 20 61 6e 79  /       mode any
4720: 68 6f 77 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  how...          
4730: 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
4740: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4750: 20 20 52 65 67 69 73 74 72 79 4b 65 79 20 73 75    RegistryKey su
4760: 62 4b 65 79 20 3d 20 6b 65 79 2e 4f 70 65 6e 53  bKey = key.OpenS
4770: 75 62 4b 65 79 28 73 75 62 4b 65 79 4e 61 6d 65  ubKey(subKeyName
4780: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
4790: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
47a0: 20 28 73 75 62 4b 65 79 20 21 3d 20 6e 75 6c 6c   (subKey != null
47b0: 29 20 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ) ?..           
47c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 65 77               new
47d0: 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79   MockRegistryKey
47e0: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
47f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4800: 20 20 20 73 75 62 4b 65 79 2c 20 77 68 61 74 49     subKey, whatI
4810: 66 2c 20 72 65 61 64 4f 6e 6c 79 2c 20 73 61 66  f, readOnly, saf
4820: 65 29 20 3a 0d 0a 20 20 20 20 20 20 20 20 20 20  e) :..          
4830: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 65                ne
4840: 77 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65  w MockRegistryKe
4850: 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
4860: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4870: 20 20 20 20 6b 65 79 2c 20 73 75 62 4b 65 79 4e      key, subKeyN
4880: 61 6d 65 2c 20 77 68 61 74 49 66 2c 20 72 65 61  ame, whatIf, rea
4890: 64 4f 6e 6c 79 2c 20 73 61 66 65 29 3b 0d 0a 20  dOnly, safe);.. 
48a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
48b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
48c0: 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20    else..        
48d0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
48e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
48f0: 65 74 75 72 6e 20 6e 65 77 20 4d 6f 63 6b 52 65  eturn new MockRe
4900: 67 69 73 74 72 79 4b 65 79 28 0d 0a 20 20 20 20  gistryKey(..    
4910: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4920: 20 20 20 20 6b 65 79 2e 43 72 65 61 74 65 53 75      key.CreateSu
4930: 62 4b 65 79 28 73 75 62 4b 65 79 4e 61 6d 65 29  bKey(subKeyName)
4940: 2c 20 77 68 61 74 49 66 2c 20 72 65 61 64 4f 6e  , whatIf, readOn
4950: 6c 79 2c 20 73 61 66 65 29 3b 0d 0a 20 20 20 20  ly, safe);..    
4960: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
4970: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
4980: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
4990: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
49a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
49b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
49c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
49d0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
49e0: 75 62 6c 69 63 20 76 6f 69 64 20 44 65 6c 65 74  ublic void Delet
49f0: 65 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20  eSubKey(..      
4a00: 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
4a10: 20 73 75 62 4b 65 79 4e 61 6d 65 0d 0a 20 20 20   subKeyName..   
4a20: 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a               )..
4a30: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
4a40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43                 C
4a50: 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d  heckDisposed();.
4a60: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
4a70: 20 43 68 65 63 6b 52 65 61 64 4f 6e 6c 79 28 29   CheckReadOnly()
4a80: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
4a90: 20 20 20 20 20 69 66 20 28 6b 65 79 20 3d 3d 20       if (key == 
4aa0: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
4ab0: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
4ac0: 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  n;....          
4ad0: 20 20 20 20 20 20 69 66 20 28 21 77 68 61 74 49        if (!whatI
4ae0: 66 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f)..            
4af0: 20 20 20 20 20 20 20 20 6b 65 79 2e 44 65 6c 65          key.Dele
4b00: 74 65 53 75 62 4b 65 79 28 73 75 62 4b 65 79 4e  teSubKey(subKeyN
4b10: 61 6d 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ame);..         
4b20: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
4b30: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
4b40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4b50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4b60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4b70: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
4b80: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 76 6f         public vo
4b90: 69 64 20 44 65 6c 65 74 65 53 75 62 4b 65 79 54  id DeleteSubKeyT
4ba0: 72 65 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ree(..          
4bb0: 20 20 20 20 20 20 73 74 72 69 6e 67 20 73 75 62        string sub
4bc0: 4b 65 79 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20  KeyName..       
4bd0: 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
4be0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
4bf0: 20 20 20 20 20 20 20 20 20 20 20 43 68 65 63 6b             Check
4c00: 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 20 20 20  Disposed();..   
4c10: 20 20 20 20 20 20 20 20 20 20 20 20 20 43 68 65               Che
4c20: 63 6b 52 65 61 64 4f 6e 6c 79 28 29 3b 0d 0a 0d  ckReadOnly();...
4c30: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
4c40: 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c   if (key == null
4c50: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
4c60: 20 20 20 20 20 20 20 72 65 74 75 72 6e 3b 0d 0a         return;..
4c70: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
4c80: 20 20 69 66 20 28 21 77 68 61 74 49 66 29 0d 0a    if (!whatIf)..
4c90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4ca0: 20 20 20 20 6b 65 79 2e 44 65 6c 65 74 65 53 75      key.DeleteSu
4cb0: 62 4b 65 79 54 72 65 65 28 73 75 62 4b 65 79 4e  bKeyTree(subKeyN
4cc0: 61 6d 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ame);..         
4cd0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
4ce0: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
4cf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4d00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4d10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4d20: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
4d30: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 76 6f         public vo
4d40: 69 64 20 44 65 6c 65 74 65 56 61 6c 75 65 28 0d  id DeleteValue(.
4d50: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
4d60: 20 73 74 72 69 6e 67 20 6e 61 6d 65 0d 0a 20 20   string name..  
4d70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d                ).
4d80: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
4d90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4da0: 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b  CheckDisposed();
4db0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
4dc0: 20 20 43 68 65 63 6b 52 65 61 64 4f 6e 6c 79 28    CheckReadOnly(
4dd0: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
4de0: 20 20 20 20 20 20 69 66 20 28 6b 65 79 20 3d 3d        if (key ==
4df0: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
4e00: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
4e10: 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  rn;....         
4e20: 20 20 20 20 20 20 20 69 66 20 28 21 77 68 61 74         if (!what
4e30: 49 66 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  If)..           
4e40: 20 20 20 20 20 20 20 20 20 6b 65 79 2e 44 65 6c           key.Del
4e50: 65 74 65 56 61 6c 75 65 28 6e 61 6d 65 29 3b 0d  eteValue(name);.
4e60: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
4e70: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
4e80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4e90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4ea0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4eb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4ec0: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
4ed0: 20 70 75 62 6c 69 63 20 73 74 72 69 6e 67 5b 5d   public string[]
4ee0: 20 47 65 74 53 75 62 4b 65 79 4e 61 6d 65 73 28   GetSubKeyNames(
4ef0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
4f00: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
4f10: 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28    CheckDisposed(
4f20: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
4f30: 20 20 20 20 20 20 69 66 20 28 6b 65 79 20 3d 3d        if (key ==
4f40: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
4f50: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
4f60: 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20  rn null;....    
4f70: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
4f80: 72 6e 20 6b 65 79 2e 47 65 74 53 75 62 4b 65 79  rn key.GetSubKey
4f90: 4e 61 6d 65 73 28 29 3b 0d 0a 20 20 20 20 20 20  Names();..      
4fa0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
4fb0: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
4fc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4fd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4fe0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4ff0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
5000: 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
5010: 20 6f 62 6a 65 63 74 20 47 65 74 56 61 6c 75 65   object GetValue
5020: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
5030: 20 20 20 73 74 72 69 6e 67 20 6e 61 6d 65 2c 0d     string name,.
5040: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
5050: 20 6f 62 6a 65 63 74 20 64 65 66 61 75 6c 74 56   object defaultV
5060: 61 6c 75 65 0d 0a 20 20 20 20 20 20 20 20 20 20  alue..          
5070: 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
5080: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
5090: 20 20 20 20 20 20 20 20 43 68 65 63 6b 44 69 73          CheckDis
50a0: 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20  posed();....    
50b0: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
50c0: 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  key == null)..  
50d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
50e0: 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a    return null;..
50f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
5100: 20 20 72 65 74 75 72 6e 20 6b 65 79 2e 47 65 74    return key.Get
5110: 56 61 6c 75 65 28 6e 61 6d 65 2c 20 64 65 66 61  Value(name, defa
5120: 75 6c 74 56 61 6c 75 65 29 3b 0d 0a 20 20 20 20  ultValue);..    
5130: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
5140: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
5150: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5160: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5170: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5180: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
5190: 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
51a0: 69 63 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b  ic MockRegistryK
51b0: 65 79 20 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a  ey OpenSubKey(..
51c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
51d0: 73 74 72 69 6e 67 20 73 75 62 4b 65 79 4e 61 6d  string subKeyNam
51e0: 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
51f0: 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20     )..          
5200: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
5210: 20 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73       CheckDispos
5220: 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ed();....       
5230: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
5240: 4f 70 65 6e 53 75 62 4b 65 79 28 73 75 62 4b 65  OpenSubKey(subKe
5250: 79 4e 61 6d 65 2c 20 66 61 6c 73 65 29 3b 0d 0a  yName, false);..
5260: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
5270: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
5280: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5290: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
52a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
52b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
52c0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
52d0: 70 75 62 6c 69 63 20 4d 6f 63 6b 52 65 67 69 73  public MockRegis
52e0: 74 72 79 4b 65 79 20 4f 70 65 6e 53 75 62 4b 65  tryKey OpenSubKe
52f0: 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
5300: 20 20 20 20 73 74 72 69 6e 67 20 73 75 62 4b 65      string subKe
5310: 79 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20  yName,..        
5320: 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 72 69          bool wri
5330: 74 61 62 6c 65 0d 0a 20 20 20 20 20 20 20 20 20  table..         
5340: 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
5350: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
5360: 20 20 20 20 20 20 20 20 20 43 68 65 63 6b 44 69           CheckDi
5370: 73 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20 20  sposed();....   
5380: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
5390: 28 77 72 69 74 61 62 6c 65 29 0d 0a 20 20 20 20  (writable)..    
53a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
53b0: 43 68 65 63 6b 52 65 61 64 4f 6e 6c 79 28 29 3b  CheckReadOnly();
53c0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
53d0: 20 20 20 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e      if (key == n
53e0: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
53f0: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
5400: 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20   null;....      
5410: 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74            Regist
5420: 72 79 4b 65 79 20 73 75 62 4b 65 79 20 3d 20 6b  ryKey subKey = k
5430: 65 79 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a  ey.OpenSubKey(..
5440: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5450: 20 20 20 20 73 75 62 4b 65 79 4e 61 6d 65 2c 20      subKeyName, 
5460: 77 68 61 74 49 66 20 3f 20 66 61 6c 73 65 20 3a  whatIf ? false :
5470: 20 77 72 69 74 61 62 6c 65 29 3b 0d 0a 0d 0a 20   writable);.... 
5480: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
5490: 65 74 75 72 6e 20 28 73 75 62 4b 65 79 20 21 3d  eturn (subKey !=
54a0: 20 6e 75 6c 6c 29 20 3f 0d 0a 20 20 20 20 20 20   null) ?..      
54b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 65                ne
54c0: 77 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65  w MockRegistryKe
54d0: 79 28 73 75 62 4b 65 79 2c 20 77 68 61 74 49 66  y(subKey, whatIf
54e0: 2c 20 72 65 61 64 4f 6e 6c 79 2c 20 73 61 66 65  , readOnly, safe
54f0: 29 20 3a 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20  ) : null;..     
5500: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
5510: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
5520: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5530: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5540: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5550: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
5560: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
5570: 63 20 76 6f 69 64 20 53 65 74 56 61 6c 75 65 28  c void SetValue(
5580: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
5590: 20 20 73 74 72 69 6e 67 20 6e 61 6d 65 2c 0d 0a    string name,..
55a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
55b0: 6f 62 6a 65 63 74 20 76 61 6c 75 65 0d 0a 20 20  object value..  
55c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d                ).
55d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
55e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
55f0: 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b  CheckDisposed();
5600: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
5610: 20 20 43 68 65 63 6b 52 65 61 64 4f 6e 6c 79 28    CheckReadOnly(
5620: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
5630: 20 20 20 20 20 20 69 66 20 28 6b 65 79 20 3d 3d        if (key ==
5640: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
5650: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
5660: 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  rn;....         
5670: 20 20 20 20 20 20 20 69 66 20 28 21 77 68 61 74         if (!what
5680: 49 66 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  If)..           
5690: 20 20 20 20 20 20 20 20 20 6b 65 79 2e 53 65 74           key.Set
56a0: 56 61 6c 75 65 28 6e 61 6d 65 2c 20 76 61 6c 75  Value(name, valu
56b0: 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e);..           
56c0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
56d0: 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
56e0: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
56f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5700: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5710: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5720: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
5730: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65  .            #re
5740: 67 69 6f 6e 20 50 75 62 6c 69 63 20 50 72 6f 70  gion Public Prop
5750: 65 72 74 69 65 73 0d 0a 20 20 20 20 20 20 20 20  erties..        
5760: 20 20 20 20 70 75 62 6c 69 63 20 73 74 72 69 6e      public strin
5770: 67 20 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20  g Name..        
5780: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
5790: 20 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20 20         get..    
57a0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
57b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
57c0: 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64     CheckDisposed
57d0: 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ();....         
57e0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6b             if (k
57f0: 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ey == null)..   
5800: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5810: 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c       return null
5820: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
5830: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
5840: 21 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72  !String.IsNullOr
5850: 45 6d 70 74 79 28 73 75 62 4b 65 79 4e 61 6d 65  Empty(subKeyName
5860: 29 20 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ) ?..           
5870: 20 20 20 20 20 20 20 20 20 20 20 20 20 53 74 72               Str
5880: 69 6e 67 2e 46 6f 72 6d 61 74 28 22 7b 30 7d 5c  ing.Format("{0}\
5890: 5c 7b 31 7d 22 2c 20 6b 65 79 2e 4e 61 6d 65 2c  \{1}", key.Name,
58a0: 20 73 75 62 4b 65 79 4e 61 6d 65 29 20 3a 0d 0a   subKeyName) :..
58b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
58c0: 20 20 20 20 20 20 20 20 6b 65 79 2e 4e 61 6d 65          key.Name
58d0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
58e0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
58f0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
5900: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
5910: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5920: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5930: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5940: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
5950: 20 20 20 20 20 20 70 72 69 76 61 74 65 20 52 65        private Re
5960: 67 69 73 74 72 79 4b 65 79 20 6b 65 79 3b 0d 0a  gistryKey key;..
5970: 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
5980: 69 63 20 52 65 67 69 73 74 72 79 4b 65 79 20 4b  ic RegistryKey K
5990: 65 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ey..            
59a0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
59b0: 20 20 20 67 65 74 20 7b 20 43 68 65 63 6b 44 69     get { CheckDi
59c0: 73 70 6f 73 65 64 28 29 3b 20 43 68 65 63 6b 53  sposed(); CheckS
59d0: 61 66 65 28 29 3b 20 72 65 74 75 72 6e 20 6b 65  afe(); return ke
59e0: 79 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  y; }..          
59f0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
5a00: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
5a10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5a20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5a30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5a40: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
5a50: 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
5a60: 72 69 6e 67 20 73 75 62 4b 65 79 4e 61 6d 65 3b  ring subKeyName;
5a70: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
5a80: 62 6c 69 63 20 73 74 72 69 6e 67 20 53 75 62 4b  blic string SubK
5a90: 65 79 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20  eyName..        
5aa0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
5ab0: 20 20 20 20 20 20 20 67 65 74 20 7b 20 43 68 65         get { Che
5ac0: 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 20 72 65  ckDisposed(); re
5ad0: 74 75 72 6e 20 73 75 62 4b 65 79 4e 61 6d 65 3b  turn subKeyName;
5ae0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
5af0: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
5b00: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
5b10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5b20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5b30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5b40: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
5b50: 20 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c      private bool
5b60: 20 77 68 61 74 49 66 3b 0d 0a 20 20 20 20 20 20   whatIf;..      
5b70: 20 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f        public boo
5b80: 6c 20 57 68 61 74 49 66 0d 0a 20 20 20 20 20 20  l WhatIf..      
5b90: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
5ba0: 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 43           get { C
5bb0: 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 20  heckDisposed(); 
5bc0: 72 65 74 75 72 6e 20 77 68 61 74 49 66 3b 20 7d  return whatIf; }
5bd0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
5be0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
5bf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5c00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5c10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5c20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5c30: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
5c40: 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 72    private bool r
5c50: 65 61 64 4f 6e 6c 79 3b 0d 0a 20 20 20 20 20 20  eadOnly;..      
5c60: 20 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f        public boo
5c70: 6c 20 52 65 61 64 4f 6e 6c 79 0d 0a 20 20 20 20  l ReadOnly..    
5c80: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
5c90: 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b             get {
5ca0: 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29   CheckDisposed()
5cb0: 3b 20 72 65 74 75 72 6e 20 72 65 61 64 4f 6e 6c  ; return readOnl
5cc0: 79 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  y; }..          
5cd0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
5ce0: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
5cf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5d00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5d10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5d20: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
5d30: 20 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f        public boo
5d40: 6c 20 73 61 66 65 3b 0d 0a 20 20 20 20 20 20 20  l safe;..       
5d50: 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c       public bool
5d60: 20 53 61 66 65 0d 0a 20 20 20 20 20 20 20 20 20   Safe..         
5d70: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
5d80: 20 20 20 20 20 20 67 65 74 20 7b 20 43 68 65 63        get { Chec
5d90: 6b 44 69 73 70 6f 73 65 64 28 29 3b 20 72 65 74  kDisposed(); ret
5da0: 75 72 6e 20 73 61 66 65 3b 20 7d 0d 0a 20 20 20  urn safe; }..   
5db0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
5dc0: 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
5dd0: 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  on....          
5de0: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
5df0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5e00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5e10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5e20: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
5e30: 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 72 69       #region Pri
5e40: 76 61 74 65 20 4d 65 74 68 6f 64 73 0d 0a 20 20  vate Methods..  
5e50: 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
5e60: 65 20 76 6f 69 64 20 43 68 65 63 6b 52 65 61 64  e void CheckRead
5e70: 4f 6e 6c 79 28 29 0d 0a 20 20 20 20 20 20 20 20  Only()..        
5e80: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
5e90: 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
5ea0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f             // NO
5eb0: 54 45 3a 20 49 6e 20 22 72 65 61 64 2d 6f 6e 6c  TE: In "read-onl
5ec0: 79 22 20 6d 6f 64 65 2c 20 77 65 20 64 69 73 61  y" mode, we disa
5ed0: 6c 6c 6f 77 20 61 6c 6c 20 77 72 69 74 65 20 61  llow all write a
5ee0: 63 63 65 73 73 2e 0d 0a 20 20 20 20 20 20 20 20  ccess...        
5ef0: 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
5f00: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
5f10: 21 72 65 61 64 4f 6e 6c 79 29 0d 0a 20 20 20 20  !readOnly)..    
5f20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5f30: 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20  return;....     
5f40: 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77             throw
5f50: 20 6e 65 77 20 49 6e 76 61 6c 69 64 4f 70 65 72   new InvalidOper
5f60: 61 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28 29  ationException()
5f70: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
5f80: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
5f90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5fa0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5fb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5fc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5fd0: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
5fe0: 20 20 20 70 72 69 76 61 74 65 20 76 6f 69 64 20     private void 
5ff0: 43 68 65 63 6b 53 61 66 65 28 29 0d 0a 20 20 20  CheckSafe()..   
6000: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
6010: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
6020: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6030: 2f 2f 20 4e 4f 54 45 3a 20 49 6e 20 22 73 61 66  // NOTE: In "saf
6040: 65 22 20 6d 6f 64 65 2c 20 77 65 20 64 69 73 61  e" mode, we disa
6050: 6c 6c 6f 77 20 61 6c 6c 20 64 69 72 65 63 74 20  llow all direct 
6060: 61 63 63 65 73 73 20 74 6f 20 74 68 65 0d 0a 20  access to the.. 
6070: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
6080: 2f 20 20 20 20 20 20 20 63 6f 6e 74 61 69 6e 65  /       containe
6090: 64 20 72 65 67 69 73 74 72 79 20 6b 65 79 2e 0d  d registry key..
60a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
60b0: 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
60c0: 20 20 20 20 20 69 66 20 28 21 73 61 66 65 29 0d       if (!safe).
60d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
60e0: 20 20 20 20 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a       return;....
60f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6100: 74 68 72 6f 77 20 6e 65 77 20 49 6e 76 61 6c 69  throw new Invali
6110: 64 4f 70 65 72 61 74 69 6f 6e 45 78 63 65 70 74  dOperationExcept
6120: 69 6f 6e 28 29 3b 0d 0a 20 20 20 20 20 20 20 20  ion();..        
6130: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
6140: 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
6150: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
6160: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6170: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6180: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6190: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
61a0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
61b0: 23 72 65 67 69 6f 6e 20 53 79 73 74 65 6d 2e 4f  #region System.O
61c0: 62 6a 65 63 74 20 4f 76 65 72 72 69 64 65 73 0d  bject Overrides.
61d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
61e0: 6c 69 63 20 6f 76 65 72 72 69 64 65 20 73 74 72  lic override str
61f0: 69 6e 67 20 54 6f 53 74 72 69 6e 67 28 29 0d 0a  ing ToString()..
6200: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
6210: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43                 C
6220: 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d  heckDisposed();.
6230: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
6240: 20 20 20 72 65 74 75 72 6e 20 74 68 69 73 2e 4e     return this.N
6250: 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ame;..          
6260: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
6270: 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
6280: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
6290: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
62a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
62b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
62c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
62d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 72  ..            #r
62e0: 65 67 69 6f 6e 20 49 6d 70 6c 69 63 69 74 20 43  egion Implicit C
62f0: 6f 6e 76 65 72 73 69 6f 6e 20 4f 70 65 72 61 74  onversion Operat
6300: 6f 72 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ors..           
6310: 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
6320: 20 2f 2f 20 42 55 47 42 55 47 3a 20 54 68 65 20   // BUGBUG: The 
6330: 27 77 68 61 74 2d 69 66 27 20 6d 6f 64 65 20 73  'what-if' mode s
6340: 65 74 74 69 6e 67 20 68 65 72 65 20 73 68 6f 75  etting here shou
6350: 6c 64 20 70 72 6f 62 61 62 6c 79 20 62 65 20 62  ld probably be b
6360: 61 73 65 64 0d 0a 20 20 20 20 20 20 20 20 20 20  ased..          
6370: 20 20 2f 2f 20 20 20 20 20 20 20 20 20 6f 6e 20    //         on 
6380: 73 6f 6d 65 20 73 74 61 74 69 63 20 70 72 6f 70  some static prop
6390: 65 72 74 79 2c 20 6e 6f 74 20 68 61 72 64 2d 63  erty, not hard-c
63a0: 6f 64 65 64 20 74 6f 20 74 72 75 65 3f 0d 0a 20  oded to true?.. 
63b0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
63c0: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
63d0: 63 20 73 74 61 74 69 63 20 69 6d 70 6c 69 63 69  c static implici
63e0: 74 20 6f 70 65 72 61 74 6f 72 20 4d 6f 63 6b 52  t operator MockR
63f0: 65 67 69 73 74 72 79 4b 65 79 28 0d 0a 20 20 20  egistryKey(..   
6400: 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67               Reg
6410: 69 73 74 72 79 4b 65 79 20 6b 65 79 0d 0a 20 20  istryKey key..  
6420: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d                ).
6430: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
6440: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6450: 72 65 74 75 72 6e 20 6e 65 77 20 4d 6f 63 6b 52  return new MockR
6460: 65 67 69 73 74 72 79 4b 65 79 28 6b 65 79 2c 20  egistryKey(key, 
6470: 6e 75 6c 6c 2c 20 74 72 75 65 2c 20 66 61 6c 73  null, true, fals
6480: 65 2c 20 66 61 6c 73 65 29 3b 0d 0a 20 20 20 20  e, false);..    
6490: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
64a0: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
64b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
64c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
64d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
64e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
64f0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
6500: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 42              // B
6510: 55 47 42 55 47 3a 20 52 65 6d 6f 76 65 20 6d 65  UGBUG: Remove me
6520: 3f 20 20 54 68 69 73 20 73 68 6f 75 6c 64 20 62  ?  This should b
6530: 65 20 73 61 66 65 20 62 65 63 61 75 73 65 20 69  e safe because i
6540: 6e 20 27 77 68 61 74 2d 69 66 27 0d 0a 20 20 20  n 'what-if'..   
6550: 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
6560: 20 20 20 20 6d 6f 64 65 20 61 6c 6c 20 6b 65 79      mode all key
6570: 73 20 61 72 65 20 6f 70 65 6e 65 64 20 72 65 61  s are opened rea
6580: 64 2d 6f 6e 6c 79 2e 0d 0a 20 20 20 20 20 20 20  d-only...       
6590: 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
65a0: 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74       public stat
65b0: 69 63 20 69 6d 70 6c 69 63 69 74 20 6f 70 65 72  ic implicit oper
65c0: 61 74 6f 72 20 52 65 67 69 73 74 72 79 4b 65 79  ator RegistryKey
65d0: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
65e0: 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b     MockRegistryK
65f0: 65 79 20 6b 65 79 0d 0a 20 20 20 20 20 20 20 20  ey key..        
6600: 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
6610: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
6620: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
6630: 20 28 6b 65 79 20 21 3d 20 6e 75 6c 6c 29 20 3f   (key != null) ?
6640: 20 6b 65 79 2e 4b 65 79 20 3a 20 6e 75 6c 6c 3b   key.Key : null;
6650: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
6660: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e  .            #en
6670: 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
6680: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
6690: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
66a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
66b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
66c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
66d0: 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f            #regio
66e0: 6e 20 49 44 69 73 70 6f 73 61 62 6c 65 20 22 50  n IDisposable "P
66f0: 61 74 74 65 72 6e 22 20 4d 65 6d 62 65 72 73 0d  attern" Members.
6700: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
6710: 76 61 74 65 20 62 6f 6f 6c 20 64 69 73 70 6f 73  vate bool dispos
6720: 65 64 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ed;..           
6730: 20 70 72 69 76 61 74 65 20 76 6f 69 64 20 43 68   private void Ch
6740: 65 63 6b 44 69 73 70 6f 73 65 64 28 29 20 2f 2a  eckDisposed() /*
6750: 20 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 20   throw */..     
6760: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
6770: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21 64            if (!d
6780: 69 73 70 6f 73 65 64 29 0d 0a 20 20 20 20 20 20  isposed)..      
6790: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
67a0: 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  turn;....       
67b0: 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e           throw n
67c0: 65 77 20 4f 62 6a 65 63 74 44 69 73 70 6f 73 65  ew ObjectDispose
67d0: 64 45 78 63 65 70 74 69 6f 6e 28 74 79 70 65 6f  dException(typeo
67e0: 66 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65  f(MockRegistryKe
67f0: 79 29 2e 4e 61 6d 65 29 3b 0d 0a 20 20 20 20 20  y).Name);..     
6800: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
6810: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
6820: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6830: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6840: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6850: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
6860: 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
6870: 74 65 20 2f 2a 20 70 72 6f 74 65 63 74 65 64 20  te /* protected 
6880: 76 69 72 74 75 61 6c 20 2a 2f 20 76 6f 69 64 20  virtual */ void 
6890: 44 69 73 70 6f 73 65 28 0d 0a 20 20 20 20 20 20  Dispose(..      
68a0: 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 64            bool d
68b0: 69 73 70 6f 73 69 6e 67 0d 0a 20 20 20 20 20 20  isposing..      
68c0: 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
68d0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
68e0: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
68f0: 21 64 69 73 70 6f 73 65 64 29 0d 0a 20 20 20 20  !disposed)..    
6900: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
6910: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6920: 20 20 20 69 66 20 28 64 69 73 70 6f 73 69 6e 67     if (disposing
6930: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
6940: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
6950: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6960: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
6970: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6980: 2f 2f 2f 2f 2f 2f 0d 0a 20 20 20 20 20 20 20 20  //////..        
6990: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
69a0: 2f 2f 20 64 69 73 70 6f 73 65 20 6d 61 6e 61 67  // dispose manag
69b0: 65 64 20 72 65 73 6f 75 72 63 65 73 20 68 65 72  ed resources her
69c0: 65 2e 2e 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  e.....          
69d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
69e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
69f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6a00: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
6a10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
6a20: 20 28 6b 65 79 20 21 3d 20 6e 75 6c 6c 29 0d 0a   (key != null)..
6a30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6a40: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
6a50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6a60: 20 20 20 20 20 20 20 6b 65 79 2e 43 6c 6f 73 65         key.Close
6a70: 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ();..           
6a80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6a90: 20 6b 65 79 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20   key = null;..  
6aa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6ab0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
6ac0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
6ad0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
6ae0: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
6af0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6b00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 20 20  ////////////..  
6b10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6b20: 20 20 2f 2f 20 72 65 6c 65 61 73 65 20 75 6e 6d    // release unm
6b30: 61 6e 61 67 65 64 20 72 65 73 6f 75 72 63 65 73  anaged resources
6b40: 20 68 65 72 65 2e 2e 2e 0d 0a 20 20 20 20 20 20   here.....      
6b50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
6b60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6b70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6b80: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
6b90: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
6ba0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6bb0: 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 54 68 69      // NOTE: Thi
6bc0: 73 20 6f 62 6a 65 63 74 20 69 73 20 6e 6f 77 20  s object is now 
6bd0: 64 69 73 70 6f 73 65 64 2e 0d 0a 20 20 20 20 20  disposed...     
6be0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
6bf0: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
6c00: 20 20 20 20 20 20 20 64 69 73 70 6f 73 65 64 20         disposed 
6c10: 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20  = true;..       
6c20: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
6c30: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
6c40: 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
6c50: 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n....           
6c60: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
6c70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6c80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6c90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6ca0: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
6cb0: 20 20 20 20 23 72 65 67 69 6f 6e 20 49 44 69 73      #region IDis
6cc0: 70 6f 73 61 62 6c 65 20 4d 65 6d 62 65 72 73 0d  posable Members.
6cd0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
6ce0: 6c 69 63 20 76 6f 69 64 20 44 69 73 70 6f 73 65  lic void Dispose
6cf0: 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ()..            
6d00: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
6d10: 20 20 20 44 69 73 70 6f 73 65 28 74 72 75 65 29     Dispose(true)
6d20: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
6d30: 20 20 20 47 43 2e 53 75 70 70 72 65 73 73 46 69     GC.SuppressFi
6d40: 6e 61 6c 69 7a 65 28 74 68 69 73 29 3b 0d 0a 20  nalize(this);.. 
6d50: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
6d60: 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65            #endre
6d70: 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
6d80: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
6d90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6da0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6db0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6dc0: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
6dd0: 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 44         #region D
6de0: 65 73 74 72 75 63 74 6f 72 0d 0a 20 20 20 20 20  estructor..     
6df0: 20 20 20 20 20 20 20 7e 4d 6f 63 6b 52 65 67 69         ~MockRegi
6e00: 73 74 72 79 4b 65 79 28 29 0d 0a 20 20 20 20 20  stryKey()..     
6e10: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
6e20: 20 20 20 20 20 20 20 20 20 20 44 69 73 70 6f 73            Dispos
6e30: 65 28 66 61 6c 73 65 29 3b 0d 0a 20 20 20 20 20  e(false);..     
6e40: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
6e50: 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
6e60: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
6e70: 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
6e80: 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
6e90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6ea0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6eb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6ec0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6ed0: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72  //....        #r
6ee0: 65 67 69 6f 6e 20 52 65 67 69 73 74 72 79 48 65  egion RegistryHe
6ef0: 6c 70 65 72 20 43 6c 61 73 73 0d 0a 20 20 20 20  lper Class..    
6f00: 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74      private stat
6f10: 69 63 20 63 6c 61 73 73 20 52 65 67 69 73 74 72  ic class Registr
6f20: 79 48 65 6c 70 65 72 0d 0a 20 20 20 20 20 20 20  yHelper..       
6f30: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
6f40: 23 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20 53  #region Public S
6f50: 74 61 74 69 63 20 50 72 6f 70 65 72 74 69 65 73  tatic Properties
6f60: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
6f70: 69 76 61 74 65 20 73 74 61 74 69 63 20 69 6e 74  ivate static int
6f80: 20 73 75 62 4b 65 79 73 43 72 65 61 74 65 64 3b   subKeysCreated;
6f90: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
6fa0: 62 6c 69 63 20 73 74 61 74 69 63 20 69 6e 74 20  blic static int 
6fb0: 53 75 62 4b 65 79 73 43 72 65 61 74 65 64 0d 0a  SubKeysCreated..
6fc0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
6fd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67                 g
6fe0: 65 74 20 7b 20 72 65 74 75 72 6e 20 73 75 62 4b  et { return subK
6ff0: 65 79 73 43 72 65 61 74 65 64 3b 20 7d 0d 0a 20  eysCreated; }.. 
7000: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
7010: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
7020: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7030: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7040: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7050: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
7060: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
7070: 72 69 76 61 74 65 20 73 74 61 74 69 63 20 69 6e  rivate static in
7080: 74 20 73 75 62 4b 65 79 73 44 65 6c 65 74 65 64  t subKeysDeleted
7090: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ;..            p
70a0: 75 62 6c 69 63 20 73 74 61 74 69 63 20 69 6e 74  ublic static int
70b0: 20 53 75 62 4b 65 79 73 44 65 6c 65 74 65 64 0d   SubKeysDeleted.
70c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
70d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
70e0: 67 65 74 20 7b 20 72 65 74 75 72 6e 20 73 75 62  get { return sub
70f0: 4b 65 79 73 44 65 6c 65 74 65 64 3b 20 7d 0d 0a  KeysDeleted; }..
7100: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
7110: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
7120: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7130: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7140: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7150: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7160: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
7170: 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 69  private static i
7180: 6e 74 20 6b 65 79 56 61 6c 75 65 73 53 65 74 3b  nt keyValuesSet;
7190: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
71a0: 62 6c 69 63 20 73 74 61 74 69 63 20 69 6e 74 20  blic static int 
71b0: 4b 65 79 56 61 6c 75 65 73 53 65 74 0d 0a 20 20  KeyValuesSet..  
71c0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
71d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74               get
71e0: 20 7b 20 72 65 74 75 72 6e 20 6b 65 79 56 61 6c   { return keyVal
71f0: 75 65 73 53 65 74 3b 20 7d 0d 0a 20 20 20 20 20  uesSet; }..     
7200: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
7210: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
7220: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7230: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7240: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7250: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
7260: 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
7270: 74 65 20 73 74 61 74 69 63 20 69 6e 74 20 6b 65  te static int ke
7280: 79 56 61 6c 75 65 73 44 65 6c 65 74 65 64 3b 0d  yValuesDeleted;.
7290: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
72a0: 6c 69 63 20 73 74 61 74 69 63 20 69 6e 74 20 4b  lic static int K
72b0: 65 79 56 61 6c 75 65 73 44 65 6c 65 74 65 64 0d  eyValuesDeleted.
72c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
72d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
72e0: 67 65 74 20 7b 20 72 65 74 75 72 6e 20 6b 65 79  get { return key
72f0: 56 61 6c 75 65 73 44 65 6c 65 74 65 64 3b 20 7d  ValuesDeleted; }
7300: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
7310: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e  .            #en
7320: 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
7330: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
7340: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7350: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7360: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7370: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
7380: 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f            #regio
7390: 6e 20 50 75 62 6c 69 63 20 53 74 61 74 69 63 20  n Public Static 
73a0: 4d 65 74 68 6f 64 73 0d 0a 20 20 20 20 20 20 20  Methods..       
73b0: 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74       public stat
73c0: 69 63 20 52 65 67 69 73 74 72 79 4b 65 79 20 47  ic RegistryKey G
73d0: 65 74 52 6f 6f 74 4b 65 79 42 79 4e 61 6d 65 28  etRootKeyByName(
73e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
73f0: 20 20 73 74 72 69 6e 67 20 6b 65 79 4e 61 6d 65    string keyName
7400: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
7410: 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20    )..           
7420: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
7430: 20 20 20 20 69 66 20 28 53 74 72 69 6e 67 2e 49      if (String.I
7440: 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 6b 65 79  sNullOrEmpty(key
7450: 4e 61 6d 65 29 29 0d 0a 20 20 20 20 20 20 20 20  Name))..        
7460: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
7470: 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20  rn null;....    
7480: 20 20 20 20 20 20 20 20 20 20 20 20 73 77 69 74              swit
7490: 63 68 20 28 6b 65 79 4e 61 6d 65 2e 54 6f 55 70  ch (keyName.ToUp
74a0: 70 65 72 49 6e 76 61 72 69 61 6e 74 28 29 29 0d  perInvariant()).
74b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
74c0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
74d0: 20 20 20 20 20 20 20 20 63 61 73 65 20 22 48 4b          case "HK
74e0: 43 52 22 3a 0d 0a 20 20 20 20 20 20 20 20 20 20  CR":..          
74f0: 20 20 20 20 20 20 20 20 20 20 63 61 73 65 20 22            case "
7500: 48 4b 45 59 5f 43 4c 41 53 53 45 53 5f 52 4f 4f  HKEY_CLASSES_ROO
7510: 54 22 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  T":..           
7520: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
7530: 75 72 6e 20 52 65 67 69 73 74 72 79 2e 43 6c 61  urn Registry.Cla
7540: 73 73 65 73 52 6f 6f 74 3b 0d 0a 20 20 20 20 20  ssesRoot;..     
7550: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
7560: 61 73 65 20 22 48 4b 43 43 22 3a 0d 0a 20 20 20  ase "HKCC":..   
7570: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7580: 20 63 61 73 65 20 22 48 4b 45 59 5f 43 55 52 52   case "HKEY_CURR
7590: 45 4e 54 5f 43 4f 4e 46 49 47 22 3a 0d 0a 20 20  ENT_CONFIG":..  
75a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
75b0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 52 65 67        return Reg
75c0: 69 73 74 72 79 2e 43 75 72 72 65 6e 74 43 6f 6e  istry.CurrentCon
75d0: 66 69 67 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  fig;..          
75e0: 20 20 20 20 20 20 20 20 20 20 63 61 73 65 20 22            case "
75f0: 48 4b 43 55 22 3a 0d 0a 20 20 20 20 20 20 20 20  HKCU":..        
7600: 20 20 20 20 20 20 20 20 20 20 20 20 63 61 73 65              case
7610: 20 22 48 4b 45 59 5f 43 55 52 52 45 4e 54 5f 55   "HKEY_CURRENT_U
7620: 53 45 52 22 3a 0d 0a 20 20 20 20 20 20 20 20 20  SER":..         
7630: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
7640: 65 74 75 72 6e 20 52 65 67 69 73 74 72 79 2e 43  eturn Registry.C
7650: 75 72 72 65 6e 74 55 73 65 72 3b 0d 0a 20 20 20  urrentUser;..   
7660: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7670: 20 63 61 73 65 20 22 48 4b 44 44 22 3a 0d 0a 20   case "HKDD":.. 
7680: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7690: 20 20 20 63 61 73 65 20 22 48 4b 45 59 5f 44 59     case "HKEY_DY
76a0: 4e 5f 44 41 54 41 22 3a 0d 0a 20 20 20 20 20 20  N_DATA":..      
76b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
76c0: 20 20 72 65 74 75 72 6e 20 52 65 67 69 73 74 72    return Registr
76d0: 79 2e 44 79 6e 44 61 74 61 3b 0d 0a 20 20 20 20  y.DynData;..    
76e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
76f0: 63 61 73 65 20 22 48 4b 4c 4d 22 3a 0d 0a 20 20  case "HKLM":..  
7700: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7710: 20 20 63 61 73 65 20 22 48 4b 45 59 5f 4c 4f 43    case "HKEY_LOC
7720: 41 4c 5f 4d 41 43 48 49 4e 45 22 3a 0d 0a 20 20  AL_MACHINE":..  
7730: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7740: 20 20 20 20 20 20 72 65 74 75 72 6e 20 52 65 67        return Reg
7750: 69 73 74 72 79 2e 4c 6f 63 61 6c 4d 61 63 68 69  istry.LocalMachi
7760: 6e 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ne;..           
7770: 20 20 20 20 20 20 20 20 20 63 61 73 65 20 22 48           case "H
7780: 4b 50 44 22 3a 0d 0a 20 20 20 20 20 20 20 20 20  KPD":..         
7790: 20 20 20 20 20 20 20 20 20 20 20 63 61 73 65 20             case 
77a0: 22 48 4b 45 59 5f 50 45 52 46 4f 52 4d 41 4e 43  "HKEY_PERFORMANC
77b0: 45 5f 44 41 54 41 22 3a 0d 0a 20 20 20 20 20 20  E_DATA":..      
77c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
77d0: 20 20 72 65 74 75 72 6e 20 52 65 67 69 73 74 72    return Registr
77e0: 79 2e 50 65 72 66 6f 72 6d 61 6e 63 65 44 61 74  y.PerformanceDat
77f0: 61 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  a;..            
7800: 20 20 20 20 20 20 20 20 63 61 73 65 20 22 48 4b          case "HK
7810: 55 22 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  U":..           
7820: 20 20 20 20 20 20 20 20 20 63 61 73 65 20 22 48           case "H
7830: 4b 45 59 5f 55 53 45 52 53 22 3a 0d 0a 20 20 20  KEY_USERS":..   
7840: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7850: 20 20 20 20 20 72 65 74 75 72 6e 20 52 65 67 69       return Regi
7860: 73 74 72 79 2e 55 73 65 72 73 3b 0d 0a 20 20 20  stry.Users;..   
7870: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
7880: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
7890: 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a    return null;..
78a0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
78b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
78c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
78d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
78e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
78f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7900: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
7910: 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 4d 6f  public static Mo
7920: 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 4f 70  ckRegistryKey Op
7930: 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20  enSubKey(..     
7940: 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52             MockR
7950: 65 67 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b  egistryKey rootK
7960: 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey,..           
7970: 20 20 20 20 20 73 74 72 69 6e 67 20 73 75 62 4b       string subK
7980: 65 79 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20  eyName,..       
7990: 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 72           bool wr
79a0: 69 74 61 62 6c 65 2c 0d 0a 20 20 20 20 20 20 20  itable,..       
79b0: 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68           bool wh
79c0: 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20  atIf,..         
79d0: 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62         bool verb
79e0: 6f 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ose..           
79f0: 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
7a00: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
7a10: 20 20 20 20 20 20 20 69 66 20 28 72 6f 6f 74 4b         if (rootK
7a20: 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ey == null)..   
7a30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7a40: 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d   return null;...
7a50: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
7a60: 20 69 66 20 28 76 65 72 62 6f 73 65 29 0d 0a 20   if (verbose).. 
7a70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7a80: 20 20 20 54 72 61 63 65 4f 70 73 2e 54 72 61 63     TraceOps.Trac
7a90: 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
7aa0: 20 20 20 20 20 20 20 20 20 20 20 20 77 72 69 74              writ
7ab0: 61 62 6c 65 20 3f 20 54 72 61 63 65 50 72 69 6f  able ? TracePrio
7ac0: 72 69 74 79 2e 48 69 67 68 65 73 74 20 3a 20 54  rity.Highest : T
7ad0: 72 61 63 65 50 72 69 6f 72 69 74 79 2e 48 69 67  racePriority.Hig
7ae0: 68 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  her,..          
7af0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
7b00: 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72  aceCallback, Str
7b10: 69 6e 67 2e 46 6f 72 6d 61 74 28 22 72 6f 6f 74  ing.Format("root
7b20: 4b 65 79 20 3d 20 7b 30 7d 2c 20 22 20 2b 0d 0a  Key = {0}, " +..
7b30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7b40: 20 20 20 20 20 20 20 20 22 73 75 62 4b 65 79 4e          "subKeyN
7b50: 61 6d 65 20 3d 20 7b 31 7d 2c 20 77 72 69 74 61  ame = {1}, writa
7b60: 62 6c 65 20 3d 20 7b 32 7d 22 2c 20 46 6f 72 44  ble = {2}", ForD
7b70: 69 73 70 6c 61 79 28 72 6f 6f 74 4b 65 79 29 2c  isplay(rootKey),
7b80: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
7b90: 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73            ForDis
7ba0: 70 6c 61 79 28 73 75 62 4b 65 79 4e 61 6d 65 29  play(subKeyName)
7bb0: 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 77 72 69  , ForDisplay(wri
7bc0: 74 61 62 6c 65 29 29 2c 0d 0a 20 20 20 20 20 20  table)),..      
7bd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7be0: 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
7bf0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
7c00: 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
7c10: 20 20 20 20 20 20 20 20 20 2f 2f 20 48 41 43 4b           // HACK
7c20: 3a 20 41 6c 77 61 79 73 20 66 6f 72 62 69 64 20  : Always forbid 
7c30: 77 72 69 74 61 62 6c 65 20 61 63 63 65 73 73 20  writable access 
7c40: 77 68 65 6e 20 6f 70 65 72 61 74 69 6e 67 20 69  when operating i
7c50: 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  n..             
7c60: 20 20 20 2f 2f 20 20 20 20 20 20 20 27 77 68 61     //       'wha
7c70: 74 2d 69 66 27 20 6d 6f 64 65 2e 0d 0a 20 20 20  t-if' mode...   
7c80: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
7c90: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
7ca0: 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79   MockRegistryKey
7cb0: 20 6b 65 79 20 3d 20 72 6f 6f 74 4b 65 79 2e 4f   key = rootKey.O
7cc0: 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20  penSubKey(..    
7cd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7ce0: 73 75 62 4b 65 79 4e 61 6d 65 2c 20 77 68 61 74  subKeyName, what
7cf0: 49 66 20 3f 20 66 61 6c 73 65 20 3a 20 77 72 69  If ? false : wri
7d00: 74 61 62 6c 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  table);....     
7d10: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
7d20: 6e 20 28 6b 65 79 20 21 3d 20 6e 75 6c 6c 29 20  n (key != null) 
7d30: 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ?..             
7d40: 20 20 20 20 20 20 20 6e 65 77 20 4d 6f 63 6b 52         new MockR
7d50: 65 67 69 73 74 72 79 4b 65 79 28 6b 65 79 2c 20  egistryKey(key, 
7d60: 77 68 61 74 49 66 2c 20 66 61 6c 73 65 2c 20 66  whatIf, false, f
7d70: 61 6c 73 65 29 20 3a 20 6e 75 6c 6c 3b 0d 0a 20  alse) : null;.. 
7d80: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
7d90: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
7da0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7db0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7dc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7dd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
7de0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
7df0: 75 62 6c 69 63 20 73 74 61 74 69 63 20 4d 6f 63  ublic static Moc
7e00: 6b 52 65 67 69 73 74 72 79 4b 65 79 20 43 72 65  kRegistryKey Cre
7e10: 61 74 65 53 75 62 4b 65 79 28 0d 0a 20 20 20 20  ateSubKey(..    
7e20: 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b              Mock
7e30: 52 65 67 69 73 74 72 79 4b 65 79 20 72 6f 6f 74  RegistryKey root
7e40: 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  Key,..          
7e50: 20 20 20 20 20 20 73 74 72 69 6e 67 20 73 75 62        string sub
7e60: 4b 65 79 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20  KeyName,..      
7e70: 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77            bool w
7e80: 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20  hatIf,..        
7e90: 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72          bool ver
7ea0: 62 6f 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20  bose..          
7eb0: 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
7ec0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
7ed0: 20 20 20 20 20 20 20 20 69 66 20 28 72 6f 6f 74          if (root
7ee0: 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  Key == null)..  
7ef0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7f00: 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a    return null;..
7f10: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
7f20: 20 20 69 66 20 28 76 65 72 62 6f 73 65 29 0d 0a    if (verbose)..
7f30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7f40: 20 20 20 20 54 72 61 63 65 4f 70 73 2e 54 72 61      TraceOps.Tra
7f50: 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ce(..           
7f60: 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
7f70: 63 65 50 72 69 6f 72 69 74 79 2e 48 69 67 68 65  cePriority.Highe
7f80: 73 74 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63  st, traceCallbac
7f90: 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  k, String.Format
7fa0: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
7fb0: 20 20 20 20 20 20 20 20 20 20 20 22 72 6f 6f 74             "root
7fc0: 4b 65 79 20 3d 20 7b 30 7d 2c 20 73 75 62 4b 65  Key = {0}, subKe
7fd0: 79 4e 61 6d 65 20 3d 20 7b 31 7d 22 2c 20 46 6f  yName = {1}", Fo
7fe0: 72 44 69 73 70 6c 61 79 28 72 6f 6f 74 4b 65 79  rDisplay(rootKey
7ff0: 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
8000: 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44              ForD
8010: 69 73 70 6c 61 79 28 73 75 62 4b 65 79 4e 61 6d  isplay(subKeyNam
8020: 65 29 29 2c 20 74 72 61 63 65 43 61 74 65 67 6f  e)), traceCatego
8030: 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
8040: 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20          try..   
8050: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
8060: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8070: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
8080: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 48              // H
8090: 41 43 4b 3a 20 41 6c 77 61 79 73 20 6f 70 65 6e  ACK: Always open
80a0: 20 61 20 6b 65 79 2c 20 72 61 74 68 65 72 20 74   a key, rather t
80b0: 68 61 6e 20 63 72 65 61 74 69 6e 67 20 6f 6e 65  han creating one
80c0: 20 77 68 65 6e 0d 0a 20 20 20 20 20 20 20 20 20   when..         
80d0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
80e0: 20 20 20 20 6f 70 65 72 61 74 69 6e 67 20 69 6e      operating in
80f0: 20 27 77 68 61 74 2d 69 66 27 20 6d 6f 64 65 2e   'what-if' mode.
8100: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8110: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
8120: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
8130: 20 28 77 68 61 74 49 66 29 0d 0a 20 20 20 20 20   (whatIf)..     
8140: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
8150: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8160: 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
8170: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8180: 20 20 20 20 20 20 2f 2f 20 48 41 43 4b 3a 20 41        // HACK: A
8190: 74 74 65 6d 70 74 20 74 6f 20 6f 70 65 6e 20 74  ttempt to open t
81a0: 68 65 20 73 70 65 63 69 66 69 65 64 20 73 75 62  he specified sub
81b0: 2d 6b 65 79 2e 20 20 49 66 0d 0a 20 20 20 20 20  -key.  If..     
81c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
81d0: 20 20 20 2f 2f 20 20 20 20 20 20 20 74 68 69 73     //       this
81e0: 20 66 61 69 6c 73 2c 20 77 65 20 77 69 6c 6c 20   fails, we will 
81f0: 73 69 6d 70 6c 79 20 72 65 74 75 72 6e 20 74 68  simply return th
8200: 65 20 72 6f 6f 74 20 6b 65 79 0d 0a 20 20 20 20  e root key..    
8210: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8220: 20 20 20 20 2f 2f 20 20 20 20 20 20 20 69 74 73      //       its
8230: 65 6c 66 20 73 69 6e 63 65 20 6e 6f 20 77 72 69  elf since no wri
8240: 74 65 73 20 61 72 65 20 61 6c 6c 6f 77 65 64 20  tes are allowed 
8250: 69 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  in..            
8260: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
8270: 20 20 20 20 20 27 77 68 61 74 2d 69 66 27 20 6d       'what-if' m
8280: 6f 64 65 20 61 6e 79 68 6f 77 2e 0d 0a 20 20 20  ode anyhow...   
8290: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
82a0: 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
82b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
82c0: 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79   MockRegistryKey
82d0: 20 6b 65 79 20 3d 20 72 6f 6f 74 4b 65 79 2e 4f   key = rootKey.O
82e0: 70 65 6e 53 75 62 4b 65 79 28 73 75 62 4b 65 79  penSubKey(subKey
82f0: 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  Name);....      
8300: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8310: 20 20 72 65 74 75 72 6e 20 28 6b 65 79 20 21 3d    return (key !=
8320: 20 6e 75 6c 6c 29 20 3f 0d 0a 20 20 20 20 20 20   null) ?..      
8330: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8340: 20 20 20 20 20 20 6b 65 79 20 3a 20 6e 65 77 20        key : new 
8350: 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 28  MockRegistryKey(
8360: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8370: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8380: 20 20 72 6f 6f 74 4b 65 79 2c 20 73 75 62 4b 65    rootKey, subKe
8390: 79 4e 61 6d 65 2c 20 74 72 75 65 2c 20 66 61 6c  yName, true, fal
83a0: 73 65 2c 20 66 61 6c 73 65 29 3b 0d 0a 20 20 20  se, false);..   
83b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
83c0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
83d0: 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20          else..  
83e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
83f0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
8400: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
8410: 75 72 6e 20 6e 65 77 20 4d 6f 63 6b 52 65 67 69  urn new MockRegi
8420: 73 74 72 79 4b 65 79 28 0d 0a 20 20 20 20 20 20  stryKey(..      
8430: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8440: 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2e 43 72        rootKey.Cr
8450: 65 61 74 65 53 75 62 4b 65 79 28 73 75 62 4b 65  eateSubKey(subKe
8460: 79 4e 61 6d 65 29 2c 20 66 61 6c 73 65 2c 20 66  yName), false, f
8470: 61 6c 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  alse,..         
8480: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8490: 20 20 20 66 61 6c 73 65 29 3b 0d 0a 20 20 20 20     false);..    
84a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
84b0: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
84c0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
84d0: 20 20 20 20 20 20 66 69 6e 61 6c 6c 79 0d 0a 20        finally.. 
84e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
84f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8500: 20 20 20 20 20 20 73 75 62 4b 65 79 73 43 72 65        subKeysCre
8510: 61 74 65 64 2b 2b 3b 0d 0a 20 20 20 20 20 20 20  ated++;..       
8520: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
8530: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
8540: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
8550: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8560: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8570: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8580: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
8590: 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
85a0: 69 63 20 73 74 61 74 69 63 20 76 6f 69 64 20 44  ic static void D
85b0: 65 6c 65 74 65 53 75 62 4b 65 79 28 0d 0a 20 20  eleteSubKey(..  
85c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f                Mo
85d0: 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 72 6f  ckRegistryKey ro
85e0: 6f 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20  otKey,..        
85f0: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 73          string s
8600: 75 62 4b 65 79 4e 61 6d 65 2c 0d 0a 20 20 20 20  ubKeyName,..    
8610: 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
8620: 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20   whatIf,..      
8630: 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76            bool v
8640: 65 72 62 6f 73 65 0d 0a 20 20 20 20 20 20 20 20  erbose..        
8650: 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
8660: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
8670: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 72 6f            if (ro
8680: 6f 74 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  otKey == null)..
8690: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
86a0: 20 20 20 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20      return;.... 
86b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
86c0: 66 20 28 76 65 72 62 6f 73 65 29 0d 0a 20 20 20  f (verbose)..   
86d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
86e0: 20 54 72 61 63 65 4f 70 73 2e 54 72 61 63 65 28   TraceOps.Trace(
86f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8700: 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 50            TraceP
8710: 72 69 6f 72 69 74 79 2e 48 69 67 68 65 73 74 2c  riority.Highest,
8720: 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20   traceCallback, 
8730: 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
8740: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8750: 20 20 20 20 20 20 20 20 22 72 6f 6f 74 4b 65 79          "rootKey
8760: 20 3d 20 7b 30 7d 2c 20 73 75 62 4b 65 79 4e 61   = {0}, subKeyNa
8770: 6d 65 20 3d 20 7b 31 7d 22 2c 20 46 6f 72 44 69  me = {1}", ForDi
8780: 73 70 6c 61 79 28 72 6f 6f 74 4b 65 79 29 2c 0d  splay(rootKey),.
8790: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
87a0: 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70           ForDisp
87b0: 6c 61 79 28 73 75 62 4b 65 79 4e 61 6d 65 29 29  lay(subKeyName))
87c0: 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29  , traceCategory)
87d0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
87e0: 20 20 20 20 20 69 66 20 28 21 77 68 61 74 49 66       if (!whatIf
87f0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
8800: 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2e 44         rootKey.D
8810: 65 6c 65 74 65 53 75 62 4b 65 79 28 73 75 62 4b  eleteSubKey(subK
8820: 65 79 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20  eyName);....    
8830: 20 20 20 20 20 20 20 20 20 20 20 20 73 75 62 4b              subK
8840: 65 79 73 44 65 6c 65 74 65 64 2b 2b 3b 0d 0a 20  eysDeleted++;.. 
8850: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
8860: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
8870: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8880: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8890: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
88a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
88b0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
88c0: 75 62 6c 69 63 20 73 74 61 74 69 63 20 76 6f 69  ublic static voi
88d0: 64 20 44 65 6c 65 74 65 53 75 62 4b 65 79 54 72  d DeleteSubKeyTr
88e0: 65 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ee(..           
88f0: 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72       MockRegistr
8900: 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20  yKey rootKey,.. 
8910: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
8920: 74 72 69 6e 67 20 73 75 62 4b 65 79 4e 61 6d 65  tring subKeyName
8930: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
8940: 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d     bool whatIf,.
8950: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
8960: 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 0d 0a 20   bool verbose.. 
8970: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29                 )
8980: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
8990: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
89a0: 20 69 66 20 28 72 6f 6f 74 4b 65 79 20 3d 3d 20   if (rootKey == 
89b0: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
89c0: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
89d0: 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  n;....          
89e0: 20 20 20 20 20 20 69 66 20 28 76 65 72 62 6f 73        if (verbos
89f0: 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e)..            
8a00: 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73          TraceOps
8a10: 2e 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20  .Trace(..       
8a20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8a30: 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 48   TracePriority.H
8a40: 69 67 68 65 73 74 2c 20 74 72 61 63 65 43 61 6c  ighest, traceCal
8a50: 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f  lback, String.Fo
8a60: 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
8a70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
8a80: 72 6f 6f 74 4b 65 79 20 3d 20 7b 30 7d 2c 20 73  rootKey = {0}, s
8a90: 75 62 4b 65 79 4e 61 6d 65 20 3d 20 7b 31 7d 22  ubKeyName = {1}"
8aa0: 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 72 6f 6f  , ForDisplay(roo
8ab0: 74 4b 65 79 29 2c 0d 0a 20 20 20 20 20 20 20 20  tKey),..        
8ac0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8ad0: 46 6f 72 44 69 73 70 6c 61 79 28 73 75 62 4b 65  ForDisplay(subKe
8ae0: 79 4e 61 6d 65 29 29 2c 20 74 72 61 63 65 43 61  yName)), traceCa
8af0: 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
8b00: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
8b10: 21 77 68 61 74 49 66 29 0d 0a 20 20 20 20 20 20  !whatIf)..      
8b20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f                ro
8b30: 6f 74 4b 65 79 2e 44 65 6c 65 74 65 53 75 62 4b  otKey.DeleteSubK
8b40: 65 79 54 72 65 65 28 73 75 62 4b 65 79 4e 61 6d  eyTree(subKeyNam
8b50: 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
8b60: 20 20 20 20 20 20 20 73 75 62 4b 65 79 73 44 65         subKeysDe
8b70: 6c 65 74 65 64 2b 2b 3b 0d 0a 20 20 20 20 20 20  leted++;..      
8b80: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
8b90: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
8ba0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8bb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8bc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8bd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
8be0: 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
8bf0: 20 73 74 61 74 69 63 20 73 74 72 69 6e 67 5b 5d   static string[]
8c00: 20 47 65 74 53 75 62 4b 65 79 4e 61 6d 65 73 28   GetSubKeyNames(
8c10: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8c20: 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65    MockRegistryKe
8c30: 79 20 6b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20  y key,..        
8c40: 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61          bool wha
8c50: 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf,..          
8c60: 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f        bool verbo
8c70: 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  se..            
8c80: 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20      )..         
8c90: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
8ca0: 20 20 20 20 20 20 69 66 20 28 6b 65 79 20 3d 3d        if (key ==
8cb0: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
8cc0: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
8cd0: 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20  rn null;....    
8ce0: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
8cf0: 76 65 72 62 6f 73 65 29 0d 0a 20 20 20 20 20 20  verbose)..      
8d00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
8d10: 61 63 65 4f 70 73 2e 54 72 61 63 65 28 0d 0a 20  aceOps.Trace(.. 
8d20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8d30: 20 20 20 20 20 20 20 54 72 61 63 65 50 72 69 6f         TracePrio
8d40: 72 69 74 79 2e 48 69 67 68 2c 20 74 72 61 63 65  rity.High, trace
8d50: 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67  Callback, String
8d60: 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
8d70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8d80: 20 20 22 6b 65 79 20 3d 20 7b 30 7d 22 2c 20 46    "key = {0}", F
8d90: 6f 72 44 69 73 70 6c 61 79 28 6b 65 79 29 29 2c  orDisplay(key)),
8da0: 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
8db0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
8dc0: 20 20 20 20 72 65 74 75 72 6e 20 6b 65 79 2e 47      return key.G
8dd0: 65 74 53 75 62 4b 65 79 4e 61 6d 65 73 28 29 3b  etSubKeyNames();
8de0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
8df0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
8e00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8e10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8e20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8e30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8e40: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
8e50: 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20    public static 
8e60: 6f 62 6a 65 63 74 20 47 65 74 56 61 6c 75 65 28  object GetValue(
8e70: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8e80: 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65    MockRegistryKe
8e90: 79 20 6b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20  y key,..        
8ea0: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6e          string n
8eb0: 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ame,..          
8ec0: 20 20 20 20 20 20 6f 62 6a 65 63 74 20 64 65 66        object def
8ed0: 61 75 6c 74 56 61 6c 75 65 2c 0d 0a 20 20 20 20  aultValue,..    
8ee0: 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
8ef0: 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20   whatIf,..      
8f00: 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76            bool v
8f10: 65 72 62 6f 73 65 0d 0a 20 20 20 20 20 20 20 20  erbose..        
8f20: 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
8f30: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
8f40: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6b 65            if (ke
8f50: 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  y == null)..    
8f60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8f70: 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a  return null;....
8f80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8f90: 69 66 20 28 76 65 72 62 6f 73 65 29 0d 0a 20 20  if (verbose)..  
8fa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8fb0: 20 20 54 72 61 63 65 4f 70 73 2e 54 72 61 63 65    TraceOps.Trace
8fc0: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
8fd0: 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
8fe0: 50 72 69 6f 72 69 74 79 2e 48 69 67 68 2c 20 74  Priority.High, t
8ff0: 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74  raceCallback, St
9000: 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
9010: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9020: 20 20 20 20 20 20 22 6b 65 79 20 3d 20 7b 30 7d        "key = {0}
9030: 2c 20 6e 61 6d 65 20 3d 20 7b 31 7d 2c 20 64 65  , name = {1}, de
9040: 66 61 75 6c 74 56 61 6c 75 65 20 3d 20 7b 32 7d  faultValue = {2}
9050: 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
9060: 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44              ForD
9070: 69 73 70 6c 61 79 28 6b 65 79 29 2c 20 46 6f 72  isplay(key), For
9080: 44 69 73 70 6c 61 79 28 6e 61 6d 65 29 2c 0d 0a  Display(name),..
9090: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
90a0: 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c          ForDispl
90b0: 61 79 28 64 65 66 61 75 6c 74 56 61 6c 75 65 29  ay(defaultValue)
90c0: 29 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72 79  ), traceCategory
90d0: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
90e0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 6b 65 79        return key
90f0: 2e 47 65 74 56 61 6c 75 65 28 6e 61 6d 65 2c 20  .GetValue(name, 
9100: 64 65 66 61 75 6c 74 56 61 6c 75 65 29 3b 0d 0a  defaultValue);..
9110: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
9120: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
9130: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9140: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9150: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9160: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9170: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
9180: 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 76 6f  public static vo
9190: 69 64 20 53 65 74 56 61 6c 75 65 28 0d 0a 20 20  id SetValue(..  
91a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f                Mo
91b0: 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65  ckRegistryKey ke
91c0: 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y,..            
91d0: 20 20 20 20 73 74 72 69 6e 67 20 6e 61 6d 65 2c      string name,
91e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
91f0: 20 20 6f 62 6a 65 63 74 20 76 61 6c 75 65 2c 0d    object value,.
9200: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
9210: 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20   bool whatIf,.. 
9220: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
9230: 6f 6f 6c 20 76 65 72 62 6f 73 65 0d 0a 20 20 20  ool verbose..   
9240: 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a               )..
9250: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
9260: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
9270: 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d  f (key == null).
9280: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
9290: 20 20 20 20 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a       return;....
92a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
92b0: 69 66 20 28 76 65 72 62 6f 73 65 29 0d 0a 20 20  if (verbose)..  
92c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
92d0: 20 20 54 72 61 63 65 4f 70 73 2e 54 72 61 63 65    TraceOps.Trace
92e0: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
92f0: 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
9300: 50 72 69 6f 72 69 74 79 2e 48 69 67 68 65 73 74  Priority.Highest
9310: 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c  , traceCallback,
9320: 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
9330: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
9340: 20 20 20 20 20 20 20 20 20 22 6b 65 79 20 3d 20           "key = 
9350: 7b 30 7d 2c 20 6e 61 6d 65 20 3d 20 7b 31 7d 2c  {0}, name = {1},
9360: 20 76 61 6c 75 65 20 3d 20 7b 32 7d 22 2c 20 46   value = {2}", F
9370: 6f 72 44 69 73 70 6c 61 79 28 6b 65 79 29 2c 0d  orDisplay(key),.
9380: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
9390: 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70           ForDisp
93a0: 6c 61 79 28 6e 61 6d 65 29 2c 20 46 6f 72 44 69  lay(name), ForDi
93b0: 73 70 6c 61 79 28 76 61 6c 75 65 29 29 2c 20 74  splay(value)), t
93c0: 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
93d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
93e0: 20 20 69 66 20 28 21 77 68 61 74 49 66 29 0d 0a    if (!whatIf)..
93f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9400: 20 20 20 20 6b 65 79 2e 53 65 74 56 61 6c 75 65      key.SetValue
9410: 28 6e 61 6d 65 2c 20 76 61 6c 75 65 29 3b 0d 0a  (name, value);..
9420: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
9430: 20 20 6b 65 79 56 61 6c 75 65 73 53 65 74 2b 2b    keyValuesSet++
9440: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
9450: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
9460: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9470: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9480: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9490: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
94a0: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
94b0: 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63     public static
94c0: 20 76 6f 69 64 20 44 65 6c 65 74 65 56 61 6c 75   void DeleteValu
94d0: 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
94e0: 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79      MockRegistry
94f0: 4b 65 79 20 6b 65 79 2c 0d 0a 20 20 20 20 20 20  Key key,..      
9500: 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
9510: 20 6e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20   name,..        
9520: 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61          bool wha
9530: 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf,..          
9540: 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f        bool verbo
9550: 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  se..            
9560: 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20      )..         
9570: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
9580: 20 20 20 20 20 20 69 66 20 28 6b 65 79 20 3d 3d        if (key ==
9590: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
95a0: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
95b0: 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  rn;....         
95c0: 20 20 20 20 20 20 20 69 66 20 28 76 65 72 62 6f         if (verbo
95d0: 73 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se)..           
95e0: 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70           TraceOp
95f0: 73 2e 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20  s.Trace(..      
9600: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9610: 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e    TracePriority.
9620: 48 69 67 68 65 73 74 2c 20 74 72 61 63 65 43 61  Highest, traceCa
9630: 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46  llback, String.F
9640: 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
9650: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9660: 22 6b 65 79 20 3d 20 7b 30 7d 2c 20 6e 61 6d 65  "key = {0}, name
9670: 20 3d 20 7b 31 7d 22 2c 20 46 6f 72 44 69 73 70   = {1}", ForDisp
9680: 6c 61 79 28 6b 65 79 29 2c 0d 0a 20 20 20 20 20  lay(key),..     
9690: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
96a0: 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 6e 61     ForDisplay(na
96b0: 6d 65 29 29 2c 20 74 72 61 63 65 43 61 74 65 67  me)), traceCateg
96c0: 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
96d0: 20 20 20 20 20 20 20 20 20 69 66 20 28 21 77 68           if (!wh
96e0: 61 74 49 66 29 0d 0a 20 20 20 20 20 20 20 20 20  atIf)..         
96f0: 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 2e 44             key.D
9700: 65 6c 65 74 65 56 61 6c 75 65 28 6e 61 6d 65 29  eleteValue(name)
9710: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
9720: 20 20 20 20 20 6b 65 79 56 61 6c 75 65 73 44 65       keyValuesDe
9730: 6c 65 74 65 64 2b 2b 3b 0d 0a 20 20 20 20 20 20  leted++;..      
9740: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
9750: 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
9760: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
9770: 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
9780: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
9790: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
97a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
97b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
97c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
97d0: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65  /....        #re
97e0: 67 69 6f 6e 20 53 74 72 69 6e 67 4c 69 73 74 20  gion StringList 
97f0: 43 6c 61 73 73 0d 0a 20 20 20 20 20 20 20 20 70  Class..        p
9800: 72 69 76 61 74 65 20 73 65 61 6c 65 64 20 63 6c  rivate sealed cl
9810: 61 73 73 20 53 74 72 69 6e 67 4c 69 73 74 20 3a  ass StringList :
9820: 20 4c 69 73 74 3c 73 74 72 69 6e 67 3e 0d 0a 20   List<string>.. 
9830: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
9840: 20 20 20 20 20 20 70 75 62 6c 69 63 20 53 74 72        public Str
9850: 69 6e 67 4c 69 73 74 28 29 0d 0a 20 20 20 20 20  ingList()..     
9860: 20 20 20 20 20 20 20 20 20 20 20 3a 20 62 61 73             : bas
9870: 65 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e()..           
9880: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
9890: 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e      // do nothin
98a0: 67 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  g...            
98b0: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
98c0: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
98d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
98e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
98f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9900: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
9910: 20 20 20 20 70 75 62 6c 69 63 20 53 74 72 69 6e      public Strin
9920: 67 4c 69 73 74 28 49 45 6e 75 6d 65 72 61 62 6c  gList(IEnumerabl
9930: 65 3c 73 74 72 69 6e 67 3e 20 63 6f 6c 6c 65 63  e<string> collec
9940: 74 69 6f 6e 29 0d 0a 20 20 20 20 20 20 20 20 20  tion)..         
9950: 20 20 20 20 20 20 20 3a 20 62 61 73 65 28 63 6f         : base(co
9960: 6c 6c 65 63 74 69 6f 6e 29 0d 0a 20 20 20 20 20  llection)..     
9970: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
9980: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20            // do 
9990: 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20  nothing...      
99a0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
99b0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64   }..        #end
99c0: 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
99d0: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
99e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
99f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9a00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9a10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
9a20: 20 20 20 20 20 23 72 65 67 69 6f 6e 20 53 74 72       #region Str
9a30: 69 6e 67 44 69 63 74 69 6f 6e 61 72 79 20 43 6c  ingDictionary Cl
9a40: 61 73 73 0d 0a 20 20 20 20 20 20 20 20 70 72 69  ass..        pri
9a50: 76 61 74 65 20 73 65 61 6c 65 64 20 63 6c 61 73  vate sealed clas
9a60: 73 20 53 74 72 69 6e 67 44 69 63 74 69 6f 6e 61  s StringDictiona
9a70: 72 79 20 3a 20 44 69 63 74 69 6f 6e 61 72 79 3c  ry : Dictionary<
9a80: 73 74 72 69 6e 67 2c 20 73 74 72 69 6e 67 3e 0d  string, string>.
9a90: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
9aa0: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 53          public S
9ab0: 74 72 69 6e 67 44 69 63 74 69 6f 6e 61 72 79 28  tringDictionary(
9ac0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
9ad0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
9ae0: 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e    // do nothing.
9af0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
9b00: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
9b10: 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
9b20: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
9b30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9b40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9b50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9b60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9b70: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65  /....        #re
9b80: 67 69 6f 6e 20 56 65 72 73 69 6f 6e 4c 69 73 74  gion VersionList
9b90: 20 43 6c 61 73 73 0d 0a 20 20 20 20 20 20 20 20   Class..        
9ba0: 70 72 69 76 61 74 65 20 73 65 61 6c 65 64 20 63  private sealed c
9bb0: 6c 61 73 73 20 56 65 72 73 69 6f 6e 4c 69 73 74  lass VersionList
9bc0: 20 3a 20 4c 69 73 74 3c 56 65 72 73 69 6f 6e 3e   : List<Version>
9bd0: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
9be0: 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
9bf0: 56 65 72 73 69 6f 6e 4c 69 73 74 28 29 0d 0a 20  VersionList().. 
9c00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3a                 :
9c10: 20 62 61 73 65 28 29 0d 0a 20 20 20 20 20 20 20   base()..       
9c20: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
9c30: 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f          // do no
9c40: 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20  thing...        
9c50: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
9c60: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
9c70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9c80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9c90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9ca0: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
9cb0: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 56          public V
9cc0: 65 72 73 69 6f 6e 4c 69 73 74 28 49 45 6e 75 6d  ersionList(IEnum
9cd0: 65 72 61 62 6c 65 3c 56 65 72 73 69 6f 6e 3e 20  erable<Version> 
9ce0: 63 6f 6c 6c 65 63 74 69 6f 6e 29 0d 0a 20 20 20  collection)..   
9cf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 3a 20 62               : b
9d00: 61 73 65 28 63 6f 6c 6c 65 63 74 69 6f 6e 29 0d  ase(collection).
9d10: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
9d20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9d30: 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a  // do nothing...
9d40: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
9d50: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
9d60: 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
9d70: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
9d80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9d90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9da0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9db0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
9dc0: 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69  ...        #regi
9dd0: 6f 6e 20 56 65 72 73 69 6f 6e 4d 61 70 20 43 6c  on VersionMap Cl
9de0: 61 73 73 0d 0a 20 20 20 20 20 20 20 20 70 72 69  ass..        pri
9df0: 76 61 74 65 20 73 65 61 6c 65 64 20 63 6c 61 73  vate sealed clas
9e00: 73 20 56 65 72 73 69 6f 6e 4d 61 70 20 3a 20 44  s VersionMap : D
9e10: 69 63 74 69 6f 6e 61 72 79 3c 73 74 72 69 6e 67  ictionary<string
9e20: 2c 20 56 65 72 73 69 6f 6e 4c 69 73 74 3e 0d 0a  , VersionList>..
9e30: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
9e40: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 56 65         public Ve
9e50: 72 73 69 6f 6e 4d 61 70 28 29 0d 0a 20 20 20 20  rsionMap()..    
9e60: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
9e70: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f             // do
9e80: 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20   nothing...     
9e90: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
9ea0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e    }..        #en
9eb0: 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
9ec0: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
9ed0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9ee0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9ef0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9f00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
9f10: 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 56 65        #region Ve
9f20: 72 73 69 6f 6e 4c 69 73 74 4d 61 70 20 43 6c 61  rsionListMap Cla
9f30: 73 73 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  ss..        priv
9f40: 61 74 65 20 73 65 61 6c 65 64 20 63 6c 61 73 73  ate sealed class
9f50: 20 56 65 72 73 69 6f 6e 4c 69 73 74 4d 61 70 20   VersionListMap 
9f60: 3a 20 44 69 63 74 69 6f 6e 61 72 79 3c 56 65 72  : Dictionary<Ver
9f70: 73 69 6f 6e 2c 20 56 65 72 73 69 6f 6e 4c 69 73  sion, VersionLis
9f80: 74 3e 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  t>..        {.. 
9f90: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
9fa0: 63 20 56 65 72 73 69 6f 6e 4c 69 73 74 4d 61 70  c VersionListMap
9fb0: 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ()..            
9fc0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
9fd0: 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67     // do nothing
9fe0: 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ...            }
9ff0: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
a000: 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
a010: 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
a020: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a030: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a040: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a050: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a060: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72  //....        #r
a070: 65 67 69 6f 6e 20 43 6f 6e 66 69 67 75 72 61 74  egion Configurat
a080: 69 6f 6e 20 43 6c 61 73 73 0d 0a 20 20 20 20 20  ion Class..     
a090: 20 20 20 70 72 69 76 61 74 65 20 73 65 61 6c 65     private seale
a0a0: 64 20 63 6c 61 73 73 20 43 6f 6e 66 69 67 75 72  d class Configur
a0b0: 61 74 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 7b  ation..        {
a0c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 72  ..            #r
a0d0: 65 67 69 6f 6e 20 50 72 69 76 61 74 65 20 43 6f  egion Private Co
a0e0: 6e 73 74 61 6e 74 73 0d 0a 20 20 20 20 20 20 20  nstants..       
a0f0: 20 20 20 20 20 70 72 69 76 61 74 65 20 63 6f 6e       private con
a100: 73 74 20 63 68 61 72 20 53 77 69 74 63 68 20 3d  st char Switch =
a110: 20 27 2d 27 3b 0d 0a 20 20 20 20 20 20 20 20 20   '-';..         
a120: 20 20 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74     private const
a130: 20 63 68 61 72 20 41 6c 74 53 77 69 74 63 68 20   char AltSwitch 
a140: 3d 20 27 2f 27 3b 0d 0a 0d 0a 20 20 20 20 20 20  = '/';....      
a150: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
a160: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a170: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a180: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a190: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
a1a0: 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
a1b0: 20 73 74 61 74 69 63 20 72 65 61 64 6f 6e 6c 79   static readonly
a1c0: 20 63 68 61 72 5b 5d 20 53 77 69 74 63 68 43 68   char[] SwitchCh
a1d0: 61 72 73 20 3d 20 7b 0d 0a 20 20 20 20 20 20 20  ars = {..       
a1e0: 20 20 20 20 20 20 20 20 20 53 77 69 74 63 68 2c           Switch,
a1f0: 20 41 6c 74 53 77 69 74 63 68 0d 0a 20 20 20 20   AltSwitch..    
a200: 20 20 20 20 20 20 20 20 7d 3b 0d 0a 20 20 20 20          };..    
a210: 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
a220: 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  on....          
a230: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
a240: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a250: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a260: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a270: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
a280: 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 72 69       #region Pri
a290: 76 61 74 65 20 43 6f 6e 73 74 72 75 63 74 6f 72  vate Constructor
a2a0: 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  s..            p
a2b0: 72 69 76 61 74 65 20 43 6f 6e 66 69 67 75 72 61  rivate Configura
a2c0: 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20  tion(..         
a2d0: 20 20 20 20 20 20 20 41 73 73 65 6d 62 6c 79 20         Assembly 
a2e0: 61 73 73 65 6d 62 6c 79 2c 0d 0a 20 20 20 20 20  assembly,..     
a2f0: 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
a300: 67 20 6c 6f 67 46 69 6c 65 4e 61 6d 65 2c 0d 0a  g logFileName,..
a310: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a320: 73 74 72 69 6e 67 20 64 69 72 65 63 74 6f 72 79  string directory
a330: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
a340: 20 20 20 73 74 72 69 6e 67 20 63 6f 72 65 46 69     string coreFi
a350: 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20  leName,..       
a360: 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
a370: 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 2c 0d 0a 20  linqFileName,.. 
a380: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
a390: 74 72 69 6e 67 20 64 65 73 69 67 6e 65 72 46 69  tring designerFi
a3a0: 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20  leName,..       
a3b0: 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
a3c0: 74 72 61 63 65 46 6f 72 6d 61 74 2c 0d 0a 20 20  traceFormat,..  
a3d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 49 6e                In
a3e0: 73 74 61 6c 6c 46 6c 61 67 73 20 69 6e 73 74 61  stallFlags insta
a3f0: 6c 6c 46 6c 61 67 73 2c 0d 0a 20 20 20 20 20 20  llFlags,..      
a400: 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 50            TraceP
a410: 72 69 6f 72 69 74 79 20 74 72 61 63 65 50 72 69  riority tracePri
a420: 6f 72 69 74 79 2c 0d 0a 20 20 20 20 20 20 20 20  ority,..        
a430: 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 69 6e 73          bool ins
a440: 74 61 6c 6c 2c 0d 0a 20 20 20 20 20 20 20 20 20  tall,..         
a450: 20 20 20 20 20 20 20 62 6f 6f 6c 20 6e 6f 44 65         bool noDe
a460: 73 6b 74 6f 70 2c 0d 0a 20 20 20 20 20 20 20 20  sktop,..        
a470: 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 6e 6f 43          bool noC
a480: 6f 6d 70 61 63 74 2c 0d 0a 20 20 20 20 20 20 20  ompact,..       
a490: 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 6e 6f           bool no
a4a0: 4e 65 74 46 78 32 30 2c 0d 0a 20 20 20 20 20 20  NetFx20,..      
a4b0: 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 6e            bool n
a4c0: 6f 4e 65 74 46 78 34 30 2c 0d 0a 20 20 20 20 20  oNetFx40,..     
a4d0: 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
a4e0: 6e 6f 56 73 32 30 30 38 2c 0d 0a 20 20 20 20 20  noVs2008,..     
a4f0: 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
a500: 6e 6f 56 73 32 30 31 30 2c 0d 0a 20 20 20 20 20  noVs2010,..     
a510: 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
a520: 6e 6f 54 72 61 63 65 2c 0d 0a 20 20 20 20 20 20  noTrace,..      
a530: 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 6e            bool n
a540: 6f 43 6f 6e 73 6f 6c 65 2c 0d 0a 20 20 20 20 20  oConsole,..     
a550: 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
a560: 6e 6f 4c 6f 67 2c 0d 0a 20 20 20 20 20 20 20 20  noLog,..        
a570: 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61          bool wha
a580: 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf,..          
a590: 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f        bool verbo
a5a0: 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se,..           
a5b0: 20 20 20 20 20 62 6f 6f 6c 20 63 6f 6e 66 69 72       bool confir
a5c0: 6d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  m..             
a5d0: 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20     )..          
a5e0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
a5f0: 20 20 20 20 20 74 68 69 73 2e 61 73 73 65 6d 62       this.assemb
a600: 6c 79 20 3d 20 61 73 73 65 6d 62 6c 79 3b 0d 0a  ly = assembly;..
a610: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a620: 74 68 69 73 2e 6c 6f 67 46 69 6c 65 4e 61 6d 65  this.logFileName
a630: 20 3d 20 6c 6f 67 46 69 6c 65 4e 61 6d 65 3b 0d   = logFileName;.
a640: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
a650: 20 74 68 69 73 2e 64 69 72 65 63 74 6f 72 79 20   this.directory 
a660: 3d 20 64 69 72 65 63 74 6f 72 79 3b 0d 0a 20 20  = directory;..  
a670: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
a680: 69 73 2e 63 6f 72 65 46 69 6c 65 4e 61 6d 65 20  is.coreFileName 
a690: 3d 20 63 6f 72 65 46 69 6c 65 4e 61 6d 65 3b 0d  = coreFileName;.
a6a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
a6b0: 20 74 68 69 73 2e 6c 69 6e 71 46 69 6c 65 4e 61   this.linqFileNa
a6c0: 6d 65 20 3d 20 6c 69 6e 71 46 69 6c 65 4e 61 6d  me = linqFileNam
a6d0: 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
a6e0: 20 20 20 20 74 68 69 73 2e 64 65 73 69 67 6e 65      this.designe
a6f0: 72 46 69 6c 65 4e 61 6d 65 20 3d 20 64 65 73 69  rFileName = desi
a700: 67 6e 65 72 46 69 6c 65 4e 61 6d 65 3b 0d 0a 20  gnerFileName;.. 
a710: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
a720: 68 69 73 2e 74 72 61 63 65 46 6f 72 6d 61 74 20  his.traceFormat 
a730: 3d 20 74 72 61 63 65 46 6f 72 6d 61 74 3b 0d 0a  = traceFormat;..
a740: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a750: 74 68 69 73 2e 69 6e 73 74 61 6c 6c 46 6c 61 67  this.installFlag
a760: 73 20 3d 20 69 6e 73 74 61 6c 6c 46 6c 61 67 73  s = installFlags
a770: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
a780: 20 20 20 74 68 69 73 2e 74 72 61 63 65 50 72 69     this.tracePri
a790: 6f 72 69 74 79 20 3d 20 74 72 61 63 65 50 72 69  ority = tracePri
a7a0: 6f 72 69 74 79 3b 0d 0a 20 20 20 20 20 20 20 20  ority;..        
a7b0: 20 20 20 20 20 20 20 20 74 68 69 73 2e 69 6e 73          this.ins
a7c0: 74 61 6c 6c 20 3d 20 69 6e 73 74 61 6c 6c 3b 0d  tall = install;.
a7d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
a7e0: 20 74 68 69 73 2e 6e 6f 44 65 73 6b 74 6f 70 20   this.noDesktop 
a7f0: 3d 20 6e 6f 44 65 73 6b 74 6f 70 3b 0d 0a 20 20  = noDesktop;..  
a800: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
a810: 69 73 2e 6e 6f 43 6f 6d 70 61 63 74 20 3d 20 6e  is.noCompact = n
a820: 6f 43 6f 6d 70 61 63 74 3b 0d 0a 20 20 20 20 20  oCompact;..     
a830: 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e             this.
a840: 6e 6f 4e 65 74 46 78 32 30 20 3d 20 6e 6f 4e 65  noNetFx20 = noNe
a850: 74 46 78 32 30 3b 0d 0a 20 20 20 20 20 20 20 20  tFx20;..        
a860: 20 20 20 20 20 20 20 20 74 68 69 73 2e 6e 6f 4e          this.noN
a870: 65 74 46 78 34 30 20 3d 20 6e 6f 4e 65 74 46 78  etFx40 = noNetFx
a880: 34 30 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  40;..           
a890: 20 20 20 20 20 74 68 69 73 2e 6e 6f 56 73 32 30       this.noVs20
a8a0: 30 38 20 3d 20 6e 6f 56 73 32 30 30 38 3b 0d 0a  08 = noVs2008;..
a8b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a8c0: 74 68 69 73 2e 6e 6f 56 73 32 30 31 30 20 3d 20  this.noVs2010 = 
a8d0: 6e 6f 56 73 32 30 31 30 3b 0d 0a 20 20 20 20 20  noVs2010;..     
a8e0: 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e             this.
a8f0: 6e 6f 54 72 61 63 65 20 3d 20 6e 6f 54 72 61 63  noTrace = noTrac
a900: 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
a910: 20 20 20 20 74 68 69 73 2e 6e 6f 43 6f 6e 73 6f      this.noConso
a920: 6c 65 20 3d 20 6e 6f 43 6f 6e 73 6f 6c 65 3b 0d  le = noConsole;.
a930: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
a940: 20 74 68 69 73 2e 6e 6f 4c 6f 67 20 3d 20 6e 6f   this.noLog = no
a950: 4c 6f 67 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  Log;..          
a960: 20 20 20 20 20 20 74 68 69 73 2e 77 68 61 74 49        this.whatI
a970: 66 20 3d 20 77 68 61 74 49 66 3b 0d 0a 20 20 20  f = whatIf;..   
a980: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69               thi
a990: 73 2e 76 65 72 62 6f 73 65 20 3d 20 76 65 72 62  s.verbose = verb
a9a0: 6f 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ose;..          
a9b0: 20 20 20 20 20 20 74 68 69 73 2e 63 6f 6e 66 69        this.confi
a9c0: 72 6d 20 3d 20 63 6f 6e 66 69 72 6d 3b 0d 0a 20  rm = confirm;.. 
a9d0: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
a9e0: 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65            #endre
a9f0: 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
aa00: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
aa10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
aa20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
aa30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
aa40: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
aa50: 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50         #region P
aa60: 72 69 76 61 74 65 20 53 74 61 74 69 63 20 4d 65  rivate Static Me
aa70: 74 68 6f 64 73 0d 0a 20 20 20 20 20 20 20 20 20  thods..         
aa80: 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
aa90: 63 20 76 6f 69 64 20 47 65 74 44 65 66 61 75 6c  c void GetDefaul
aaa0: 74 46 69 6c 65 4e 61 6d 65 73 28 0d 0a 20 20 20  tFileNames(..   
aab0: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66               ref
aac0: 20 73 74 72 69 6e 67 20 64 69 72 65 63 74 6f 72   string director
aad0: 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y,..            
aae0: 20 20 20 20 72 65 66 20 73 74 72 69 6e 67 20 63      ref string c
aaf0: 6f 72 65 46 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20  oreFileName,..  
ab00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
ab10: 66 20 73 74 72 69 6e 67 20 6c 69 6e 71 46 69 6c  f string linqFil
ab20: 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20  eName,..        
ab30: 20 20 20 20 20 20 20 20 72 65 66 20 73 74 72 69          ref stri
ab40: 6e 67 20 64 65 73 69 67 6e 65 72 46 69 6c 65 4e  ng designerFileN
ab50: 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ame..           
ab60: 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
ab70: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
ab80: 20 20 20 20 20 20 20 69 66 20 28 74 68 69 73 41         if (thisA
ab90: 73 73 65 6d 62 6c 79 20 3d 3d 20 6e 75 6c 6c 29  ssembly == null)
aba0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
abb0: 20 20 20 20 20 20 72 65 74 75 72 6e 3b 0d 0a 0d        return;...
abc0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
abd0: 20 64 69 72 65 63 74 6f 72 79 20 3d 20 50 61 74   directory = Pat
abe0: 68 2e 47 65 74 44 69 72 65 63 74 6f 72 79 4e 61  h.GetDirectoryNa
abf0: 6d 65 28 74 68 69 73 41 73 73 65 6d 62 6c 79 2e  me(thisAssembly.
ac00: 4c 6f 63 61 74 69 6f 6e 29 3b 0d 0a 0d 0a 20 20  Location);....  
ac10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
ac20: 20 28 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f   (String.IsNullO
ac30: 72 45 6d 70 74 79 28 64 69 72 65 63 74 6f 72 79  rEmpty(directory
ac40: 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
ac50: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 3b 0d          return;.
ac60: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
ac70: 20 20 20 63 6f 72 65 46 69 6c 65 4e 61 6d 65 20     coreFileName 
ac80: 3d 20 50 61 74 68 2e 43 6f 6d 62 69 6e 65 28 64  = Path.Combine(d
ac90: 69 72 65 63 74 6f 72 79 2c 0d 0a 20 20 20 20 20  irectory,..     
aca0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 49                 I
acb0: 6e 73 74 61 6c 6c 65 72 2e 43 6f 72 65 46 69 6c  nstaller.CoreFil
acc0: 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  eName);....     
acd0: 20 20 20 20 20 20 20 20 20 20 20 6c 69 6e 71 46             linqF
ace0: 69 6c 65 4e 61 6d 65 20 3d 20 50 61 74 68 2e 43  ileName = Path.C
acf0: 6f 6d 62 69 6e 65 28 64 69 72 65 63 74 6f 72 79  ombine(directory
ad00: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
ad10: 20 20 20 20 20 20 20 49 6e 73 74 61 6c 6c 65 72         Installer
ad20: 2e 4c 69 6e 71 46 69 6c 65 4e 61 6d 65 29 3b 0d  .LinqFileName);.
ad30: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
ad40: 20 20 20 64 65 73 69 67 6e 65 72 46 69 6c 65 4e     designerFileN
ad50: 61 6d 65 20 3d 20 50 61 74 68 2e 43 6f 6d 62 69  ame = Path.Combi
ad60: 6e 65 28 64 69 72 65 63 74 6f 72 79 2c 0d 0a 20  ne(directory,.. 
ad70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ad80: 20 20 20 49 6e 73 74 61 6c 6c 65 72 2e 44 65 73     Installer.Des
ad90: 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 29 3b 0d  ignerFileName);.
ada0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
adb0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
adc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
add0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ade0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
adf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ae00: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
ae10: 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
ae20: 62 6f 6f 6c 20 43 68 65 63 6b 4f 70 74 69 6f 6e  bool CheckOption
ae30: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
ae40: 20 20 20 72 65 66 20 73 74 72 69 6e 67 20 61 72     ref string ar
ae50: 67 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  g..             
ae60: 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20     )..          
ae70: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
ae80: 20 20 20 20 20 73 74 72 69 6e 67 20 72 65 73 75       string resu
ae90: 6c 74 20 3d 20 61 72 67 3b 0d 0a 0d 0a 20 20 20  lt = arg;....   
aea0: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
aeb0: 28 21 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f  (!String.IsNullO
aec0: 72 45 6d 70 74 79 28 72 65 73 75 6c 74 29 29 0d  rEmpty(result)).
aed0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
aee0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
aef0: 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
af00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
af10: 2f 2f 20 4e 4f 54 45 3a 20 52 65 6d 6f 76 65 20  // NOTE: Remove 
af20: 61 6c 6c 20 6c 65 61 64 69 6e 67 20 73 77 69 74  all leading swit
af30: 63 68 20 63 68 61 72 73 2e 0d 0a 20 20 20 20 20  ch chars...     
af40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
af50: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
af60: 20 20 20 20 20 20 20 72 65 73 75 6c 74 20 3d 20         result = 
af70: 72 65 73 75 6c 74 2e 54 72 69 6d 53 74 61 72 74  result.TrimStart
af80: 28 53 77 69 74 63 68 43 68 61 72 73 29 3b 0d 0a  (SwitchChars);..
af90: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
afa0: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
afb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
afc0: 20 4e 4f 54 45 3a 20 48 6f 77 20 6d 61 6e 79 20   NOTE: How many 
afd0: 63 68 61 72 73 20 77 65 72 65 20 72 65 6d 6f 76  chars were remov
afe0: 65 64 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ed?..           
aff0: 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
b000: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b010: 20 69 6e 74 20 63 6f 75 6e 74 20 3d 20 61 72 67   int count = arg
b020: 2e 4c 65 6e 67 74 68 20 2d 20 72 65 73 75 6c 74  .Length - result
b030: 2e 4c 65 6e 67 74 68 3b 0d 0a 0d 0a 20 20 20 20  .Length;....    
b040: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b050: 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
b060: 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a          // NOTE:
b070: 20 57 61 73 20 74 68 65 72 65 20 61 74 20 6c 65   Was there at le
b080: 61 73 74 20 6f 6e 65 3f 0d 0a 20 20 20 20 20 20  ast one?..      
b090: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
b0a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
b0b0: 20 20 20 20 20 20 69 66 20 28 63 6f 75 6e 74 20        if (count 
b0c0: 3e 20 30 29 0d 0a 20 20 20 20 20 20 20 20 20 20  > 0)..          
b0d0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
b0e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b0f0: 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
b100: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b110: 20 2f 2f 20 4e 4f 54 45 3a 20 4f 6b 2c 20 72 65   // NOTE: Ok, re
b120: 70 6c 61 63 65 20 74 68 65 69 72 20 6f 72 69 67  place their orig
b130: 69 6e 61 6c 0d 0a 20 20 20 20 20 20 20 20 20 20  inal..          
b140: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
b150: 20 20 20 20 20 20 20 61 72 67 75 6d 65 6e 74 2e         argument.
b160: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
b170: 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
b180: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b190: 20 20 20 20 20 20 61 72 67 20 3d 20 72 65 73 75        arg = resu
b1a0: 6c 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  lt;....         
b1b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
b1c0: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
b1d0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f             // NO
b1e0: 54 45 3a 20 59 65 73 2c 20 74 68 69 73 20 69 73  TE: Yes, this is
b1f0: 20 61 20 73 77 69 74 63 68 2e 0d 0a 20 20 20 20   a switch...    
b200: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b210: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
b220: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b230: 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20  return true;..  
b240: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b250: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
b260: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
b270: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
b280: 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
b290: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
b2a0: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
b2b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b2c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b2d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b2e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
b2f0: 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
b300: 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 4d 61 74   static bool Mat
b310: 63 68 4f 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20  chOption(..     
b320: 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
b330: 67 20 61 72 67 2c 0d 0a 20 20 20 20 20 20 20 20  g arg,..        
b340: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6f          string o
b350: 70 74 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 20  ption..         
b360: 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
b370: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
b380: 20 20 20 20 20 20 20 20 20 69 66 20 28 28 61 72           if ((ar
b390: 67 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 28 6f  g == null) || (o
b3a0: 70 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 29 0d  ption == null)).
b3b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
b3c0: 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
b3d0: 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
b3e0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 74 72        return Str
b3f0: 69 6e 67 2e 43 6f 6d 70 61 72 65 28 61 72 67 2c  ing.Compare(arg,
b400: 20 30 2c 20 6f 70 74 69 6f 6e 2c 20 30 2c 0d 0a   0, option, 0,..
b410: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b420: 20 20 20 20 61 72 67 2e 4c 65 6e 67 74 68 2c 20      arg.Length, 
b430: 53 74 72 69 6e 67 43 6f 6d 70 61 72 69 73 6f 6e  StringComparison
b440: 2e 4f 72 64 69 6e 61 6c 49 67 6e 6f 72 65 43 61  .OrdinalIgnoreCa
b450: 73 65 29 20 3d 3d 20 30 3b 0d 0a 20 20 20 20 20  se) == 0;..     
b460: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
b470: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
b480: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b490: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b4a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b4b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
b4c0: 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
b4d0: 74 65 20 73 74 61 74 69 63 20 62 6f 6f 6c 3f 20  te static bool? 
b4e0: 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28 0d 0a 20  ParseBoolean(.. 
b4f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
b500: 74 72 69 6e 67 20 74 65 78 74 0d 0a 20 20 20 20  tring text..    
b510: 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
b520: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
b530: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
b540: 20 28 21 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c   (!String.IsNull
b550: 4f 72 45 6d 70 74 79 28 74 65 78 74 29 29 0d 0a  OrEmpty(text))..
b560: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b570: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
b580: 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 61 6c 75         bool valu
b590: 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
b5a0: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 62 6f            if (bo
b5b0: 6f 6c 2e 54 72 79 50 61 72 73 65 28 74 65 78 74  ol.TryParse(text
b5c0: 2c 20 6f 75 74 20 76 61 6c 75 65 29 29 0d 0a 20  , out value)).. 
b5d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b5e0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 76 61         return va
b5f0: 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lue;..          
b600: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
b610: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
b620: 6e 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20  n null;..       
b630: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
b640: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
b650: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b660: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b670: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b680: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
b690: 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
b6a0: 20 73 74 61 74 69 63 20 6f 62 6a 65 63 74 20 50   static object P
b6b0: 61 72 73 65 45 6e 75 6d 28 0d 0a 20 20 20 20 20  arseEnum(..     
b6c0: 20 20 20 20 20 20 20 20 20 20 20 54 79 70 65 20             Type 
b6d0: 65 6e 75 6d 54 79 70 65 2c 0d 0a 20 20 20 20 20  enumType,..     
b6e0: 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
b6f0: 67 20 74 65 78 74 2c 0d 0a 20 20 20 20 20 20 20  g text,..       
b700: 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 6e 6f           bool no
b710: 43 61 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20  Case..          
b720: 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
b730: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
b740: 20 20 20 20 20 20 20 20 69 66 20 28 28 65 6e 75          if ((enu
b750: 6d 54 79 70 65 20 3d 3d 20 6e 75 6c 6c 29 20 7c  mType == null) |
b760: 7c 20 21 65 6e 75 6d 54 79 70 65 2e 49 73 45 6e  | !enumType.IsEn
b770: 75 6d 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  um)..           
b780: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
b790: 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  null;....       
b7a0: 20 20 20 20 20 20 20 20 20 69 66 20 28 21 53 74           if (!St
b7b0: 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70  ring.IsNullOrEmp
b7c0: 74 79 28 74 65 78 74 29 29 0d 0a 20 20 20 20 20  ty(text))..     
b7d0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
b7e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b7f0: 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20    try..         
b800: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
b810: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b820: 20 20 20 20 20 20 72 65 74 75 72 6e 20 45 6e 75        return Enu
b830: 6d 2e 50 61 72 73 65 28 65 6e 75 6d 54 79 70 65  m.Parse(enumType
b840: 2c 20 74 65 78 74 2c 20 6e 6f 43 61 73 65 29 3b  , text, noCase);
b850: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
b860: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
b870: 20 20 20 20 20 20 20 20 20 20 20 20 20 63 61 74               cat
b880: 63 68 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ch..            
b890: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
b8a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b8b0: 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67     // do nothing
b8c0: 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
b8d0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
b8e0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
b8f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
b900: 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 20 20 20  eturn null;..   
b910: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
b920: 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
b930: 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  on....          
b940: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
b950: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b960: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b970: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b980: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
b990: 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62       #region Pub
b9a0: 6c 69 63 20 53 74 61 74 69 63 20 4d 65 74 68 6f  lic Static Metho
b9b0: 64 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ds..            
b9c0: 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 43 6f  public static Co
b9d0: 6e 66 69 67 75 72 61 74 69 6f 6e 20 43 72 65 61  nfiguration Crea
b9e0: 74 65 44 65 66 61 75 6c 74 28 29 0d 0a 20 20 20  teDefault()..   
b9f0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
ba00: 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
ba10: 6e 67 20 64 69 72 65 63 74 6f 72 79 20 3d 20 6e  ng directory = n
ba20: 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ull;..          
ba30: 20 20 20 20 20 20 73 74 72 69 6e 67 20 63 6f 72        string cor
ba40: 65 46 69 6c 65 4e 61 6d 65 20 3d 20 6e 75 6c 6c  eFileName = null
ba50: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
ba60: 20 20 20 73 74 72 69 6e 67 20 6c 69 6e 71 46 69     string linqFi
ba70: 6c 65 4e 61 6d 65 20 3d 20 6e 75 6c 6c 3b 0d 0a  leName = null;..
ba80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ba90: 73 74 72 69 6e 67 20 64 65 73 69 67 6e 65 72 46  string designerF
baa0: 69 6c 65 4e 61 6d 65 20 3d 20 6e 75 6c 6c 3b 0d  ileName = null;.
bab0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
bac0: 20 20 20 47 65 74 44 65 66 61 75 6c 74 46 69 6c     GetDefaultFil
bad0: 65 4e 61 6d 65 73 28 0d 0a 20 20 20 20 20 20 20  eNames(..       
bae0: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66               ref
baf0: 20 64 69 72 65 63 74 6f 72 79 2c 20 72 65 66 20   directory, ref 
bb00: 63 6f 72 65 46 69 6c 65 4e 61 6d 65 2c 20 72 65  coreFileName, re
bb10: 66 20 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 2c 0d  f linqFileName,.
bb20: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
bb30: 20 20 20 20 20 72 65 66 20 64 65 73 69 67 6e 65       ref designe
bb40: 72 46 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20  rFileName);.... 
bb50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
bb60: 65 74 75 72 6e 20 6e 65 77 20 43 6f 6e 66 69 67  eturn new Config
bb70: 75 72 61 74 69 6f 6e 28 74 68 69 73 41 73 73 65  uration(thisAsse
bb80: 6d 62 6c 79 2c 20 6e 75 6c 6c 2c 20 64 69 72 65  mbly, null, dire
bb90: 63 74 6f 72 79 2c 0d 0a 20 20 20 20 20 20 20 20  ctory,..        
bba0: 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 72 65              core
bbb0: 46 69 6c 65 4e 61 6d 65 2c 20 6c 69 6e 71 46 69  FileName, linqFi
bbc0: 6c 65 4e 61 6d 65 2c 20 64 65 73 69 67 6e 65 72  leName, designer
bbd0: 46 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20  FileName,..     
bbe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
bbf0: 72 61 63 65 4f 70 73 2e 54 72 61 63 65 46 6f 72  raceOps.TraceFor
bc00: 6d 61 74 2c 20 49 6e 73 74 61 6c 6c 46 6c 61 67  mat, InstallFlag
bc10: 73 2e 44 65 66 61 75 6c 74 2c 0d 0a 20 20 20 20  s.Default,..    
bc20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bc30: 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 44 65  TracePriority.De
bc40: 66 61 75 6c 74 2c 20 74 72 75 65 2c 20 66 61 6c  fault, true, fal
bc50: 73 65 2c 20 74 72 75 65 2c 20 66 61 6c 73 65 2c  se, true, false,
bc60: 20 66 61 6c 73 65 2c 0d 0a 20 20 20 20 20 20 20   false,..       
bc70: 20 20 20 20 20 20 20 20 20 20 20 20 20 66 61 6c               fal
bc80: 73 65 2c 20 66 61 6c 73 65 2c 20 66 61 6c 73 65  se, false, false
bc90: 2c 20 66 61 6c 73 65 2c 20 66 61 6c 73 65 2c 20  , false, false, 
bca0: 74 72 75 65 2c 20 74 72 75 65 2c 20 66 61 6c 73  true, true, fals
bcb0: 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e);..           
bcc0: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
bcd0: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
bce0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bcf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bd00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bd10: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
bd20: 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74       public stat
bd30: 69 63 20 62 6f 6f 6c 20 46 72 6f 6d 41 72 67 73  ic bool FromArgs
bd40: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
bd50: 20 20 20 73 74 72 69 6e 67 5b 5d 20 61 72 67 73     string[] args
bd60: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
bd70: 20 20 20 62 6f 6f 6c 20 73 74 72 69 63 74 2c 0d     bool strict,.
bd80: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
bd90: 20 72 65 66 20 43 6f 6e 66 69 67 75 72 61 74 69   ref Configurati
bda0: 6f 6e 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  on configuration
bdb0: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
bdc0: 20 20 20 72 65 66 20 73 74 72 69 6e 67 20 65 72     ref string er
bdd0: 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ror..           
bde0: 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
bdf0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
be00: 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20         try..    
be10: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
be20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
be30: 20 20 20 69 66 20 28 61 72 67 73 20 3d 3d 20 6e     if (args == n
be40: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
be50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
be60: 74 75 72 6e 20 74 72 75 65 3b 0d 0a 0d 0a 20 20  turn true;....  
be70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
be80: 20 20 69 66 20 28 63 6f 6e 66 69 67 75 72 61 74    if (configurat
be90: 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ion == null)..  
bea0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
beb0: 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74        configurat
bec0: 69 6f 6e 20 3d 20 43 6f 6e 66 69 67 75 72 61 74  ion = Configurat
bed0: 69 6f 6e 2e 43 72 65 61 74 65 44 65 66 61 75 6c  ion.CreateDefaul
bee0: 74 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  t();....        
bef0: 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20              int 
bf00: 6c 65 6e 67 74 68 20 3d 20 61 72 67 73 2e 4c 65  length = args.Le
bf10: 6e 67 74 68 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ngth;....       
bf20: 20 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72               for
bf30: 20 28 69 6e 74 20 69 6e 64 65 78 20 3d 20 30 3b   (int index = 0;
bf40: 20 69 6e 64 65 78 20 3c 20 6c 65 6e 67 74 68 3b   index < length;
bf50: 20 69 6e 64 65 78 2b 2b 29 0d 0a 20 20 20 20 20   index++)..     
bf60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
bf70: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
bf80: 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
bf90: 20 61 72 67 20 3d 20 61 72 67 73 5b 69 6e 64 65   arg = args[inde
bfa0: 78 5d 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  x];....         
bfb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
bfc0: 66 20 28 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c  f (String.IsNull
bfd0: 4f 72 45 6d 70 74 79 28 61 72 67 29 29 0d 0a 20  OrEmpty(arg)).. 
bfe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bff0: 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69             conti
c000: 6e 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  nue;....        
c010: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c020: 73 74 72 69 6e 67 20 6e 65 77 41 72 67 20 3d 20  string newArg = 
c030: 61 72 67 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  arg;....        
c040: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c050: 69 66 20 28 43 68 65 63 6b 4f 70 74 69 6f 6e 28  if (CheckOption(
c060: 72 65 66 20 6e 65 77 41 72 67 29 29 0d 0a 20 20  ref newArg))..  
c070: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c080: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
c090: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c0a0: 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
c0b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c0c0: 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 41 6c       // NOTE: Al
c0d0: 6c 20 74 68 65 20 73 75 70 70 6f 72 74 65 64 20  l the supported 
c0e0: 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 20 6f 70 74  command line opt
c0f0: 69 6f 6e 73 20 6d 75 73 74 0d 0a 20 20 20 20 20  ions must..     
c100: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c110: 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
c120: 68 61 76 65 20 61 20 76 61 6c 75 65 3b 20 74 68  have a value; th
c130: 65 72 65 66 6f 72 65 2c 20 61 74 74 65 6d 70 74  erefore, attempt
c140: 20 74 6f 20 61 64 76 61 6e 63 65 0d 0a 20 20 20   to advance..   
c150: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c160: 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
c170: 20 20 74 6f 20 69 74 20 6e 6f 77 2e 20 20 49 66    to it now.  If
c180: 20 77 65 20 66 61 69 6c 2c 20 77 65 20 61 72 65   we fail, we are
c190: 20 64 6f 6e 65 2e 0d 0a 20 20 20 20 20 20 20 20   done...        
c1a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c1b0: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
c1c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c1d0: 20 20 20 20 69 6e 64 65 78 2b 2b 3b 0d 0a 0d 0a      index++;....
c1e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c1f0: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
c200: 69 6e 64 65 78 20 3e 3d 20 6c 65 6e 67 74 68 29  index >= length)
c210: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
c220: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
c230: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
c240: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c250: 20 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70   error = TraceOp
c260: 73 2e 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20  s.Trace(..      
c270: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c280: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
c290: 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65  acePriority.Lowe
c2a0: 73 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  st,..           
c2b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c2c0: 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
c2d0: 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46  llback, String.F
c2e0: 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
c2f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c300: 20 20 20 20 20 20 20 20 20 20 20 20 22 4d 69 73              "Mis
c310: 73 69 6e 67 20 76 61 6c 75 65 20 66 6f 72 20 6f  sing value for o
c320: 70 74 69 6f 6e 3a 20 7b 30 7d 22 2c 0d 0a 20 20  ption: {0}",..  
c330: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c340: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c350: 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67    ForDisplay(arg
c360: 29 29 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72  )), traceCategor
c370: 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
c380: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c390: 20 20 20 20 20 20 20 69 66 20 28 73 74 72 69 63         if (stric
c3a0: 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t)..            
c3b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c3c0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
c3d0: 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  alse;....       
c3e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c3f0: 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0d           break;.
c400: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
c410: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
c420: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
c430: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
c440: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
c450: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
c460: 20 4e 4f 54 45 3a 20 47 72 61 62 20 74 68 65 20   NOTE: Grab the 
c470: 74 65 78 74 75 61 6c 20 76 61 6c 75 65 20 6f 66  textual value of
c480: 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20 6c 69   this command li
c490: 6e 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ne..            
c4a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c4b0: 2f 2f 20 20 20 20 20 20 20 6f 70 74 69 6f 6e 2e  //       option.
c4c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
c4d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
c4e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
c4f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
c500: 72 69 6e 67 20 74 65 78 74 20 3d 20 61 72 67 73  ring text = args
c510: 5b 69 6e 64 65 78 5d 3b 0d 0a 0d 0a 20 20 20 20  [index];....    
c520: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c530: 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
c540: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c550: 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a          // NOTE:
c560: 20 46 69 67 75 72 65 20 6f 75 74 20 77 68 69 63   Figure out whic
c570: 68 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 20 6f  h command line o
c580: 70 74 69 6f 6e 20 74 68 69 73 20 69 73 0d 0a 20  ption this is.. 
c590: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c5a0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
c5b0: 20 20 20 20 28 62 61 73 65 64 20 6f 6e 20 61 20      (based on a 
c5c0: 70 61 72 74 69 61 6c 20 6e 61 6d 65 20 6d 61 74  partial name mat
c5d0: 63 68 29 20 61 6e 64 20 74 68 65 6e 20 74 72 79  ch) and then try
c5e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
c5f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
c600: 20 20 20 20 20 20 20 74 6f 20 69 6e 74 65 72 70         to interp
c610: 72 65 74 20 74 68 65 20 74 65 78 74 75 61 6c 20  ret the textual 
c620: 76 61 6c 75 65 20 61 73 20 74 68 65 20 63 6f 72  value as the cor
c630: 72 65 63 74 0d 0a 20 20 20 20 20 20 20 20 20 20  rect..          
c640: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c650: 20 20 2f 2f 20 20 20 20 20 20 20 74 79 70 65 2e    //       type.
c660: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
c670: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
c680: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
c690: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
c6a0: 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65   (MatchOption(ne
c6b0: 77 41 72 67 2c 20 22 73 74 72 69 63 74 22 29 29  wArg, "strict"))
c6c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
c6d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
c6e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
c6f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c700: 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50   bool? value = P
c710: 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74  arseBoolean(text
c720: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
c730: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c740: 20 20 20 20 20 20 69 66 20 28 76 61 6c 75 65 20        if (value 
c750: 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
c760: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c770: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
c780: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c790: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c7a0: 20 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70   error = TraceOp
c7b0: 73 2e 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20  s.Trace(..      
c7c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c7d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c7e0: 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e    TracePriority.
c7f0: 4c 6f 77 65 73 74 2c 0d 0a 20 20 20 20 20 20 20  Lowest,..       
c800: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c810: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c820: 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20   traceCallback, 
c830: 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
c840: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c850: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c860: 20 20 20 20 20 20 20 20 22 49 6e 76 61 6c 69 64          "Invalid
c870: 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c   {0} boolean val
c880: 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20  ue: {1}",..     
c890: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c8a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c8b0: 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72     ForDisplay(ar
c8c0: 67 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74  g), ForDisplay(t
c8d0: 65 78 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  ext)),..        
c8e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c8f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c900: 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
c910: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
c920: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c930: 20 20 20 20 20 20 20 69 66 20 28 73 74 72 69 63         if (stric
c940: 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t)..            
c950: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c960: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
c970: 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20  rn false;....   
c980: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c990: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c9a0: 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20   continue;..    
c9b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c9c0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
c9d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
c9e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c9f0: 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
ca00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ca10: 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 41 6c       // NOTE: Al
ca20: 6c 6f 77 20 74 68 65 20 63 6f 6d 6d 61 6e 64 20  low the command 
ca30: 6c 69 6e 65 20 61 72 67 75 6d 65 6e 74 73 20 74  line arguments t
ca40: 6f 20 6f 76 65 72 72 69 64 65 0d 0a 20 20 20 20  o override..    
ca50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ca60: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
ca70: 20 20 20 20 20 74 68 65 20 22 73 74 72 69 63 74       the "strict
ca80: 6e 65 73 73 22 20 73 65 74 74 69 6e 67 20 70 72  ness" setting pr
ca90: 6f 76 69 64 65 64 20 62 79 20 6f 75 72 20 63 61  ovided by our ca
caa0: 6c 6c 65 72 2e 0d 0a 20 20 20 20 20 20 20 20 20  ller...         
cab0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cac0: 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
cad0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cae0: 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 63             stric
caf0: 74 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b  t = (bool)value;
cb00: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
cb10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
cb20: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
cb30: 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73               els
cb40: 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f  e if (MatchOptio
cb50: 6e 28 6e 65 77 41 72 67 2c 20 22 6c 6f 67 46 69  n(newArg, "logFi
cb60: 6c 65 4e 61 6d 65 22 29 29 0d 0a 20 20 20 20 20  leName"))..     
cb70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cb80: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
cb90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cba0: 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67            config
cbb0: 75 72 61 74 69 6f 6e 2e 6c 6f 67 46 69 6c 65 4e  uration.logFileN
cbc0: 61 6d 65 20 3d 20 74 65 78 74 3b 0d 0a 20 20 20  ame = text;..   
cbd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cbe0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
cbf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cc00: 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20          else if 
cc10: 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77  (MatchOption(new
cc20: 41 72 67 2c 20 22 64 69 72 65 63 74 6f 72 79 22  Arg, "directory"
cc30: 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
cc40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cc50: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
cc60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cc70: 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e     configuration
cc80: 2e 64 69 72 65 63 74 6f 72 79 20 3d 20 74 65 78  .directory = tex
cc90: 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  t;....          
cca0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ccb0: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
ccc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ccd0: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54            // NOT
cce0: 45 3a 20 2a 53 50 45 43 49 41 4c 2a 20 4d 75 73  E: *SPECIAL* Mus
ccf0: 74 20 72 65 66 72 65 73 68 20 74 68 65 20 66 69  t refresh the fi
cd00: 6c 65 20 6e 61 6d 65 73 0d 0a 20 20 20 20 20 20  le names..      
cd10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cd20: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
cd30: 20 20 20 68 65 72 65 20 62 65 63 61 75 73 65 20     here because 
cd40: 74 68 65 20 75 6e 64 65 72 6c 79 69 6e 67 20 64  the underlying d
cd50: 69 72 65 63 74 6f 72 79 0d 0a 20 20 20 20 20 20  irectory..      
cd60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cd70: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
cd80: 20 20 20 68 61 73 20 63 68 61 6e 67 65 64 2e 0d     has changed..
cd90: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
cda0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cdb0: 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
cdc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cdd0: 20 20 20 20 20 73 74 72 69 6e 67 20 63 6f 72 65       string core
cde0: 46 69 6c 65 4e 61 6d 65 20 3d 20 63 6f 6e 66 69  FileName = confi
cdf0: 67 75 72 61 74 69 6f 6e 2e 63 6f 72 65 46 69 6c  guration.coreFil
ce00: 65 4e 61 6d 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  eName;....      
ce10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ce20: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21 53            if (!S
ce30: 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d  tring.IsNullOrEm
ce40: 70 74 79 28 63 6f 72 65 46 69 6c 65 4e 61 6d 65  pty(coreFileName
ce50: 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
ce60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ce70: 20 20 20 20 20 20 20 20 63 6f 72 65 46 69 6c 65          coreFile
ce80: 4e 61 6d 65 20 3d 20 50 61 74 68 2e 47 65 74 46  Name = Path.GetF
ce90: 69 6c 65 4e 61 6d 65 28 63 6f 72 65 46 69 6c 65  ileName(coreFile
cea0: 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  Name);....      
ceb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cec0: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 53 74            if (St
ced0: 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70  ring.IsNullOrEmp
cee0: 74 79 28 63 6f 72 65 46 69 6c 65 4e 61 6d 65 29  ty(coreFileName)
cef0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
cf00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cf10: 20 20 20 20 20 20 20 63 6f 72 65 46 69 6c 65 4e         coreFileN
cf20: 61 6d 65 20 3d 20 49 6e 73 74 61 6c 6c 65 72 2e  ame = Installer.
cf30: 43 6f 72 65 46 69 6c 65 4e 61 6d 65 3b 0d 0a 0d  CoreFileName;...
cf40: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
cf50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cf60: 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 63   configuration.c
cf70: 6f 72 65 46 69 6c 65 4e 61 6d 65 20 3d 20 50 61  oreFileName = Pa
cf80: 74 68 2e 43 6f 6d 62 69 6e 65 28 0d 0a 20 20 20  th.Combine(..   
cf90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cfa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cfb0: 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 64   configuration.d
cfc0: 69 72 65 63 74 6f 72 79 2c 20 63 6f 72 65 46 69  irectory, coreFi
cfd0: 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20  leName);....    
cfe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cff0: 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
d000: 6e 67 20 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 20  ng linqFileName 
d010: 3d 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e  = configuration.
d020: 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 3b 0d 0a 0d  linqFileName;...
d030: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
d040: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d050: 20 69 66 20 28 21 53 74 72 69 6e 67 2e 49 73 4e   if (!String.IsN
d060: 75 6c 6c 4f 72 45 6d 70 74 79 28 6c 69 6e 71 46  ullOrEmpty(linqF
d070: 69 6c 65 4e 61 6d 65 29 29 0d 0a 20 20 20 20 20  ileName))..     
d080: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d090: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6c                 l
d0a0: 69 6e 71 46 69 6c 65 4e 61 6d 65 20 3d 20 50 61  inqFileName = Pa
d0b0: 74 68 2e 47 65 74 46 69 6c 65 4e 61 6d 65 28 6c  th.GetFileName(l
d0c0: 69 6e 71 46 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d  inqFileName);...
d0d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
d0e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d0f0: 20 69 66 20 28 53 74 72 69 6e 67 2e 49 73 4e 75   if (String.IsNu
d100: 6c 6c 4f 72 45 6d 70 74 79 28 6c 69 6e 71 46 69  llOrEmpty(linqFi
d110: 6c 65 4e 61 6d 65 29 29 0d 0a 20 20 20 20 20 20  leName))..      
d120: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d130: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6c 69                li
d140: 6e 71 46 69 6c 65 4e 61 6d 65 20 3d 20 49 6e 73  nqFileName = Ins
d150: 74 61 6c 6c 65 72 2e 4c 69 6e 71 46 69 6c 65 4e  taller.LinqFileN
d160: 61 6d 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ame;....        
d170: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d180: 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72          configur
d190: 61 74 69 6f 6e 2e 6c 69 6e 71 46 69 6c 65 4e 61  ation.linqFileNa
d1a0: 6d 65 20 3d 20 50 61 74 68 2e 43 6f 6d 62 69 6e  me = Path.Combin
d1b0: 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
d1c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d1d0: 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72          configur
d1e0: 61 74 69 6f 6e 2e 64 69 72 65 63 74 6f 72 79 2c  ation.directory,
d1f0: 20 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 29 3b 0d   linqFileName);.
d200: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
d210: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d220: 20 20 20 73 74 72 69 6e 67 20 64 65 73 69 67 6e     string design
d230: 65 72 46 69 6c 65 4e 61 6d 65 20 3d 20 63 6f 6e  erFileName = con
d240: 66 69 67 75 72 61 74 69 6f 6e 2e 64 65 73 69 67  figuration.desig
d250: 6e 65 72 46 69 6c 65 4e 61 6d 65 3b 0d 0a 0d 0a  nerFileName;....
d260: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d270: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d280: 69 66 20 28 21 53 74 72 69 6e 67 2e 49 73 4e 75  if (!String.IsNu
d290: 6c 6c 4f 72 45 6d 70 74 79 28 64 65 73 69 67 6e  llOrEmpty(design
d2a0: 65 72 46 69 6c 65 4e 61 6d 65 29 29 0d 0a 20 20  erFileName))..  
d2b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d2c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d2d0: 20 20 64 65 73 69 67 6e 65 72 46 69 6c 65 4e 61    designerFileNa
d2e0: 6d 65 20 3d 20 50 61 74 68 2e 47 65 74 46 69 6c  me = Path.GetFil
d2f0: 65 4e 61 6d 65 28 64 65 73 69 67 6e 65 72 46 69  eName(designerFi
d300: 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20  leName);....    
d310: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d320: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
d330: 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45  String.IsNullOrE
d340: 6d 70 74 79 28 64 65 73 69 67 6e 65 72 46 69 6c  mpty(designerFil
d350: 65 4e 61 6d 65 29 29 0d 0a 20 20 20 20 20 20 20  eName))..       
d360: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d370: 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65 73               des
d380: 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 20 3d 20  ignerFileName = 
d390: 49 6e 73 74 61 6c 6c 65 72 2e 44 65 73 69 67 6e  Installer.Design
d3a0: 65 72 46 69 6c 65 4e 61 6d 65 3b 0d 0a 0d 0a 20  erFileName;.... 
d3b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d3c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
d3d0: 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 64 65 73  onfiguration.des
d3e0: 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 20 3d 20  ignerFileName = 
d3f0: 50 61 74 68 2e 43 6f 6d 62 69 6e 65 28 0d 0a 20  Path.Combine(.. 
d400: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d410: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d420: 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e     configuration
d430: 2e 64 69 72 65 63 74 6f 72 79 2c 20 64 65 73 69  .directory, desi
d440: 67 6e 65 72 46 69 6c 65 4e 61 6d 65 29 3b 0d 0a  gnerFileName);..
d450: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d460: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
d470: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d480: 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20             else 
d490: 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28  if (MatchOption(
d4a0: 6e 65 77 41 72 67 2c 20 22 63 6f 72 65 46 69 6c  newArg, "coreFil
d4b0: 65 4e 61 6d 65 22 29 29 0d 0a 20 20 20 20 20 20  eName"))..      
d4c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d4d0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
d4e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d4f0: 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75           configu
d500: 72 61 74 69 6f 6e 2e 63 6f 72 65 46 69 6c 65 4e  ration.coreFileN
d510: 61 6d 65 20 3d 20 74 65 78 74 3b 0d 0a 20 20 20  ame = text;..   
d520: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d530: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
d540: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d550: 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20          else if 
d560: 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77  (MatchOption(new
d570: 41 72 67 2c 20 22 6c 69 6e 71 46 69 6c 65 4e 61  Arg, "linqFileNa
d580: 6d 65 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20  me"))..         
d590: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d5a0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
d5b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d5c0: 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74        configurat
d5d0: 69 6f 6e 2e 6c 69 6e 71 46 69 6c 65 4e 61 6d 65  ion.linqFileName
d5e0: 20 3d 20 74 65 78 74 3b 0d 0a 20 20 20 20 20 20   = text;..      
d5f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d600: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
d610: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d620: 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61       else if (Ma
d630: 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67  tchOption(newArg
d640: 2c 20 22 64 65 73 69 67 6e 65 72 46 69 6c 65 4e  , "designerFileN
d650: 61 6d 65 22 29 29 0d 0a 20 20 20 20 20 20 20 20  ame"))..        
d660: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d670: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
d680: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d690: 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61         configura
d6a0: 74 69 6f 6e 2e 64 65 73 69 67 6e 65 72 46 69 6c  tion.designerFil
d6b0: 65 4e 61 6d 65 20 3d 20 74 65 78 74 3b 0d 0a 20  eName = text;.. 
d6c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d6d0: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
d6e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d6f0: 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69            else i
d700: 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e  f (MatchOption(n
d710: 65 77 41 72 67 2c 20 22 74 72 61 63 65 46 6f 72  ewArg, "traceFor
d720: 6d 61 74 22 29 29 0d 0a 20 20 20 20 20 20 20 20  mat"))..        
d730: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d740: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
d750: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d760: 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61         configura
d770: 74 69 6f 6e 2e 74 72 61 63 65 46 6f 72 6d 61 74  tion.traceFormat
d780: 20 3d 20 74 65 78 74 3b 0d 0a 20 20 20 20 20 20   = text;..      
d790: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d7a0: 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f            TraceO
d7b0: 70 73 2e 54 72 61 63 65 46 6f 72 6d 61 74 20 3d  ps.TraceFormat =
d7c0: 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 74   configuration.t
d7d0: 72 61 63 65 46 6f 72 6d 61 74 3b 0d 0a 20 20 20  raceFormat;..   
d7e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d7f0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
d800: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d810: 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20          else if 
d820: 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77  (MatchOption(new
d830: 41 72 67 2c 20 22 74 72 61 63 65 50 72 69 6f 72  Arg, "tracePrior
d840: 69 74 79 22 29 29 0d 0a 20 20 20 20 20 20 20 20  ity"))..        
d850: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d860: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
d870: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d880: 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 76 61         object va
d890: 6c 75 65 20 3d 20 50 61 72 73 65 45 6e 75 6d 28  lue = ParseEnum(
d8a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
d8b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d8c0: 20 20 20 20 20 20 74 79 70 65 6f 66 28 54 72 61        typeof(Tra
d8d0: 63 65 50 72 69 6f 72 69 74 79 29 2c 20 74 65 78  cePriority), tex
d8e0: 74 2c 20 74 72 75 65 29 3b 0d 0a 0d 0a 20 20 20  t, true);....   
d8f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d900: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
d910: 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d  (value == null).
d920: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
d930: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d940: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
d950: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d960: 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
d970: 54 72 61 63 65 4f 70 73 2e 54 72 61 63 65 28 0d  TraceOps.Trace(.
d980: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
d990: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d9a0: 20 20 20 20 20 20 20 20 20 54 72 61 63 65 50 72           TracePr
d9b0: 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 0d 0a  iority.Lowest,..
d9c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d9d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d9e0: 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c          traceCal
d9f0: 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f  lback, String.Fo
da00: 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
da10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
da20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
da30: 49 6e 76 61 6c 69 64 20 74 72 61 63 65 20 70 72  Invalid trace pr
da40: 69 6f 72 69 74 79 20 76 61 6c 75 65 3a 20 7b 30  iority value: {0
da50: 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }",..           
da60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
da70: 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72               For
da80: 44 69 73 70 6c 61 79 28 74 65 78 74 29 29 2c 20  Display(text)), 
da90: 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
daa0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
dab0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dac0: 20 20 20 20 20 20 20 69 66 20 28 73 74 72 69 63         if (stric
dad0: 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t)..            
dae0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
daf0: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
db00: 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20  rn false;....   
db10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
db20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
db30: 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20   continue;..    
db40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
db50: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
db60: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
db70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
db80: 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 74   configuration.t
db90: 72 61 63 65 50 72 69 6f 72 69 74 79 20 3d 20 28  racePriority = (
dba0: 54 72 61 63 65 50 72 69 6f 72 69 74 79 29 76 61  TracePriority)va
dbb0: 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lue;..          
dbc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dbd0: 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 54        TraceOps.T
dbe0: 72 61 63 65 50 72 69 6f 72 69 74 79 20 3d 20 63  racePriority = c
dbf0: 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 74 72 61  onfiguration.tra
dc00: 63 65 50 72 69 6f 72 69 74 79 3b 0d 0a 20 20 20  cePriority;..   
dc10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dc20: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
dc30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dc40: 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20          else if 
dc50: 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77  (MatchOption(new
dc60: 41 72 67 2c 20 22 69 6e 73 74 61 6c 6c 22 29 29  Arg, "install"))
dc70: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
dc80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
dc90: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
dca0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dcb0: 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50   bool? value = P
dcc0: 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74  arseBoolean(text
dcd0: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
dce0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dcf0: 20 20 20 20 20 20 69 66 20 28 76 61 6c 75 65 20        if (value 
dd00: 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
dd10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dd20: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
dd30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dd40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dd50: 20 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70   error = TraceOp
dd60: 73 2e 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20  s.Trace(..      
dd70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dd80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dd90: 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e    TracePriority.
dda0: 4c 6f 77 65 73 74 2c 0d 0a 20 20 20 20 20 20 20  Lowest,..       
ddb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ddc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ddd0: 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20   traceCallback, 
dde0: 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
ddf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
de00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
de10: 20 20 20 20 20 20 20 20 22 49 6e 76 61 6c 69 64          "Invalid
de20: 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c   {0} boolean val
de30: 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20  ue: {1}",..     
de40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
de50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
de60: 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72     ForDisplay(ar
de70: 67 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74  g), ForDisplay(t
de80: 65 78 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  ext)),..        
de90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dea0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
deb0: 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
dec0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
ded0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dee0: 20 20 20 20 20 20 20 69 66 20 28 73 74 72 69 63         if (stric
def0: 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t)..            
df00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
df10: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
df20: 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20  rn false;....   
df30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
df40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
df50: 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20   continue;..    
df60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
df70: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
df80: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
df90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dfa0: 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 69   configuration.i
dfb0: 6e 73 74 61 6c 6c 20 3d 20 28 62 6f 6f 6c 29 76  nstall = (bool)v
dfc0: 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alue;..         
dfd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dfe0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
dff0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e000: 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68    else if (Match
e010: 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22  Option(newArg, "
e020: 69 6e 73 74 61 6c 6c 46 6c 61 67 73 22 29 29 0d  installFlags")).
e030: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
e040: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
e050: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e060: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e070: 6f 62 6a 65 63 74 20 76 61 6c 75 65 20 3d 20 50  object value = P
e080: 61 72 73 65 45 6e 75 6d 28 0d 0a 20 20 20 20 20  arseEnum(..     
e090: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e0a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
e0b0: 79 70 65 6f 66 28 49 6e 73 74 61 6c 6c 46 6c 61  ypeof(InstallFla
e0c0: 67 73 29 2c 20 74 65 78 74 2c 20 74 72 75 65 29  gs), text, true)
e0d0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
e0e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e0f0: 20 20 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d       if (value =
e100: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
e110: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e120: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
e130: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e140: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e150: 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73  error = TraceOps
e160: 2e 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20  .Trace(..       
e170: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e180: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e190: 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c   TracePriority.L
e1a0: 6f 77 65 73 74 2c 0d 0a 20 20 20 20 20 20 20 20  owest,..        
e1b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e1c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e1d0: 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53  traceCallback, S
e1e0: 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
e1f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e200: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e210: 20 20 20 20 20 20 20 22 49 6e 76 61 6c 69 64 20         "Invalid 
e220: 69 6e 73 74 61 6c 6c 20 66 6c 61 67 73 20 76 61  install flags va
e230: 6c 75 65 3a 20 7b 30 7d 22 2c 0d 0a 20 20 20 20  lue: {0}",..    
e240: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e250: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e260: 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 74      ForDisplay(t
e270: 65 78 74 29 29 2c 20 74 72 61 63 65 43 61 74 65  ext)), traceCate
e280: 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
e290: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e2a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
e2b0: 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20   (strict)..     
e2c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e2d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e2e0: 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
e2f0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
e300: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e310: 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65          continue
e320: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
e330: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e340: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
e350: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e360: 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72          configur
e370: 61 74 69 6f 6e 2e 69 6e 73 74 61 6c 6c 46 6c 61  ation.installFla
e380: 67 73 20 3d 20 28 49 6e 73 74 61 6c 6c 46 6c 61  gs = (InstallFla
e390: 67 73 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20  gs)value;..     
e3a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e3b0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
e3c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e3d0: 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d        else if (M
e3e0: 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72  atchOption(newAr
e3f0: 67 2c 20 22 77 68 61 74 49 66 22 29 29 0d 0a 20  g, "whatIf")).. 
e400: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e410: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
e420: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e430: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
e440: 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61 72 73  ol? value = Pars
e450: 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d  eBoolean(text);.
e460: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
e470: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e480: 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20     if (value == 
e490: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
e4a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e4b0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
e4c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e4d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
e4e0: 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 54  ror = TraceOps.T
e4f0: 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20  race(..         
e500: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e510: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
e520: 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77  racePriority.Low
e530: 65 73 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  est,..          
e540: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e550: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
e560: 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72  aceCallback, Str
e570: 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
e580: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e590: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e5a0: 20 20 20 20 20 22 49 6e 76 61 6c 69 64 20 7b 30       "Invalid {0
e5b0: 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a  } boolean value:
e5c0: 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20   {1}",..        
e5d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e5e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e5f0: 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29 2c  ForDisplay(arg),
e600: 20 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74   ForDisplay(text
e610: 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
e620: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e630: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
e640: 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
e650: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e660: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e670: 20 20 20 20 69 66 20 28 73 74 72 69 63 74 29 0d      if (strict).
e680: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
e690: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e6a0: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
e6b0: 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  false;....      
e6c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e6d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
e6e0: 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20  ntinue;..       
e6f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e700: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
e710: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e720: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
e730: 6e 66 69 67 75 72 61 74 69 6f 6e 2e 77 68 61 74  nfiguration.what
e740: 49 66 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65  If = (bool)value
e750: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
e760: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
e770: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
e780: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c                el
e790: 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69  se if (MatchOpti
e7a0: 6f 6e 28 6e 65 77 41 72 67 2c 20 22 76 65 72 62  on(newArg, "verb
e7b0: 6f 73 65 22 29 29 0d 0a 20 20 20 20 20 20 20 20  ose"))..        
e7c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e7d0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
e7e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e7f0: 20 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c         bool? val
e800: 75 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61  ue = ParseBoolea
e810: 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20  n(text);....    
e820: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e830: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
e840: 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  value == null)..
e850: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e860: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e870: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
e880: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e890: 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54         error = T
e8a0: 72 61 63 65 4f 70 73 2e 54 72 61 63 65 28 0d 0a  raceOps.Trace(..
e8b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e8c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e8d0: 20 20 20 20 20 20 20 20 54 72 61 63 65 50 72 69          TracePri
e8e0: 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 0d 0a 20  ority.Lowest,.. 
e8f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e900: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e910: 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c         traceCall
e920: 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72  back, String.For
e930: 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
e940: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e950: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 49                "I
e960: 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65  nvalid {0} boole
e970: 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d  an value: {1}",.
e980: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
e990: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e9a0: 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70           ForDisp
e9b0: 6c 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69 73  lay(arg), ForDis
e9c0: 70 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20 20  play(text)),..  
e9d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e9e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e9f0: 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
ea00: 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
ea10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ea20: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
ea30: 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20  (strict)..      
ea40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ea50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ea60: 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
ea70: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
ea80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ea90: 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b         continue;
eaa0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
eab0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
eac0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
ead0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
eae0: 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61         configura
eaf0: 74 69 6f 6e 2e 76 65 72 62 6f 73 65 20 3d 20 28  tion.verbose = (
eb00: 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20  bool)value;..   
eb10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
eb20: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
eb30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
eb40: 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20          else if 
eb50: 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77  (MatchOption(new
eb60: 41 72 67 2c 20 22 63 6f 6e 66 69 72 6d 22 29 29  Arg, "confirm"))
eb70: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
eb80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
eb90: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
eba0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ebb0: 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50   bool? value = P
ebc0: 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74  arseBoolean(text
ebd0: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
ebe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ebf0: 20 20 20 20 20 20 69 66 20 28 76 61 6c 75 65 20        if (value 
ec00: 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
ec10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ec20: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
ec30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ec40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ec50: 20 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70   error = TraceOp
ec60: 73 2e 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20  s.Trace(..      
ec70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ec80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ec90: 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e    TracePriority.
eca0: 4c 6f 77 65 73 74 2c 0d 0a 20 20 20 20 20 20 20  Lowest,..       
ecb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ecc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ecd0: 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20   traceCallback, 
ece0: 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
ecf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ed00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ed10: 20 20 20 20 20 20 20 20 22 49 6e 76 61 6c 69 64          "Invalid
ed20: 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c   {0} boolean val
ed30: 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20  ue: {1}",..     
ed40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ed50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ed60: 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72     ForDisplay(ar
ed70: 67 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74  g), ForDisplay(t
ed80: 65 78 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  ext)),..        
ed90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
eda0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
edb0: 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
edc0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
edd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ede0: 20 20 20 20 20 20 20 69 66 20 28 73 74 72 69 63         if (stric
edf0: 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t)..            
ee00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ee10: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
ee20: 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20  rn false;....   
ee30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ee40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ee50: 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20   continue;..    
ee60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ee70: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
ee80: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
ee90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
eea0: 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 63   configuration.c
eeb0: 6f 6e 66 69 72 6d 20 3d 20 28 62 6f 6f 6c 29 76  onfirm = (bool)v
eec0: 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alue;..         
eed0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
eee0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
eef0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ef00: 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68    else if (Match
ef10: 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22  Option(newArg, "
ef20: 6e 6f 44 65 73 6b 74 6f 70 22 29 29 0d 0a 20 20  noDesktop"))..  
ef30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ef40: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
ef50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ef60: 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
ef70: 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65  l? value = Parse
ef80: 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a  Boolean(text);..
ef90: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
efa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
efb0: 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e    if (value == n
efc0: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
efd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
efe0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
eff0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f000: 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
f010: 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 54 72  or = TraceOps.Tr
f020: 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ace(..          
f030: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f040: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
f050: 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65  acePriority.Lowe
f060: 73 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  st,..           
f070: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f080: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
f090: 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69  ceCallback, Stri
f0a0: 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
f0b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f0c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f0d0: 20 20 20 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d      "Invalid {0}
f0e0: 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20   boolean value: 
f0f0: 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  {1}",..         
f100: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f110: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46                 F
f120: 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29 2c 20  orDisplay(arg), 
f130: 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74 29  ForDisplay(text)
f140: 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
f150: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f160: 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
f170: 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
f180: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f190: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f1a0: 20 20 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a     if (strict)..
f1b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f1c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f1d0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
f1e0: 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  alse;....       
f1f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f200: 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
f210: 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20  tinue;..        
f220: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f230: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
f240: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f250: 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
f260: 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 44 65 73  figuration.noDes
f270: 6b 74 6f 70 20 3d 20 28 62 6f 6f 6c 29 76 61 6c  ktop = (bool)val
f280: 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
f290: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f2a0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
f2b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f2c0: 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70  else if (MatchOp
f2d0: 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 6e 6f  tion(newArg, "no
f2e0: 43 6f 6d 70 61 63 74 22 29 29 0d 0a 20 20 20 20  Compact"))..    
f2f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f300: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
f310: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f320: 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 3f             bool?
f330: 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65 42 6f   value = ParseBo
f340: 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a  olean(text);....
f350: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f360: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f370: 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c  if (value == nul
f380: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
f390: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f3a0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
f3b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f3c0: 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
f3d0: 20 3d 20 54 72 61 63 65 4f 70 73 2e 54 72 61 63   = TraceOps.Trac
f3e0: 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
f3f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f400: 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
f410: 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74  ePriority.Lowest
f420: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
f430: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f440: 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
f450: 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67  Callback, String
f460: 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
f470: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f480: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f490: 20 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62    "Invalid {0} b
f4a0: 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31  oolean value: {1
f4b0: 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }",..           
f4c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f4d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72               For
f4e0: 44 69 73 70 6c 61 79 28 61 72 67 29 2c 20 46 6f  Display(arg), Fo
f4f0: 72 44 69 73 70 6c 61 79 28 74 65 78 74 29 29 2c  rDisplay(text)),
f500: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
f510: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f520: 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
f530: 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
f540: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f550: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f560: 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20   if (strict)..  
f570: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f580: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f590: 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
f5a0: 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  se;....         
f5b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f5c0: 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69             conti
f5d0: 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  nue;..          
f5e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f5f0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
f600: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f610: 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69             confi
f620: 67 75 72 61 74 69 6f 6e 2e 6e 6f 43 6f 6d 70 61  guration.noCompa
f630: 63 74 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65  ct = (bool)value
f640: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
f650: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
f660: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
f670: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c                el
f680: 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69  se if (MatchOpti
f690: 6f 6e 28 6e 65 77 41 72 67 2c 20 22 6e 6f 4e 65  on(newArg, "noNe
f6a0: 74 46 78 32 30 22 29 29 0d 0a 20 20 20 20 20 20  tFx20"))..      
f6b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f6c0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
f6d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f6e0: 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76           bool? v
f6f0: 61 6c 75 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c  alue = ParseBool
f700: 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20  ean(text);....  
f710: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f720: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
f730: 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29   (value == null)
f740: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
f750: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f760: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
f770: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f780: 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
f790: 20 54 72 61 63 65 4f 70 73 2e 54 72 61 63 65 28   TraceOps.Trace(
f7a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
f7b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f7c0: 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 50            TraceP
f7d0: 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 0d  riority.Lowest,.
f7e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
f7f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f800: 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
f810: 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46  llback, String.F
f820: 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
f830: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f840: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f850: 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f  "Invalid {0} boo
f860: 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22  lean value: {1}"
f870: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
f880: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f890: 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69             ForDi
f8a0: 73 70 6c 61 79 28 61 72 67 29 2c 20 46 6f 72 44  splay(arg), ForD
f8b0: 69 73 70 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a  isplay(text)),..
f8c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f8d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f8e0: 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74          traceCat
f8f0: 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
f900: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f910: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
f920: 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20  f (strict)..    
f930: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f940: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f950: 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
f960: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
f970: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f980: 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75           continu
f990: 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
f9a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f9b0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
f9c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f9d0: 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75           configu
f9e0: 72 61 74 69 6f 6e 2e 6e 6f 4e 65 74 46 78 32 30  ration.noNetFx20
f9f0: 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d   = (bool)value;.
fa00: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
fa10: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
fa20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fa30: 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65              else
fa40: 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e   if (MatchOption
fa50: 28 6e 65 77 41 72 67 2c 20 22 6e 6f 4e 65 74 46  (newArg, "noNetF
fa60: 78 34 30 22 29 29 0d 0a 20 20 20 20 20 20 20 20  x40"))..        
fa70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fa80: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
fa90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
faa0: 20 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c         bool? val
fab0: 75 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61  ue = ParseBoolea
fac0: 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20  n(text);....    
fad0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fae0: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
faf0: 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  value == null)..
fb00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fb10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fb20: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
fb30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fb40: 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54         error = T
fb50: 72 61 63 65 4f 70 73 2e 54 72 61 63 65 28 0d 0a  raceOps.Trace(..
fb60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fb70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fb80: 20 20 20 20 20 20 20 20 54 72 61 63 65 50 72 69          TracePri
fb90: 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 0d 0a 20  ority.Lowest,.. 
fba0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fbb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fbc0: 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c         traceCall
fbd0: 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72  back, String.For
fbe0: 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
fbf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fc00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 49                "I
fc10: 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65  nvalid {0} boole
fc20: 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d  an value: {1}",.
fc30: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
fc40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fc50: 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70           ForDisp
fc60: 6c 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69 73  lay(arg), ForDis
fc70: 70 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20 20  play(text)),..  
fc80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fc90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fca0: 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
fcb0: 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
fcc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fcd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
fce0: 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20  (strict)..      
fcf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fd00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fd10: 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
fd20: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
fd30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fd40: 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b         continue;
fd50: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
fd60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fd70: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
fd80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fd90: 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61         configura
fda0: 74 69 6f 6e 2e 6e 6f 4e 65 74 46 78 34 30 20 3d  tion.noNetFx40 =
fdb0: 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20   (bool)value;.. 
fdc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fdd0: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
fde0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fdf0: 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69            else i
fe00: 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e  f (MatchOption(n
fe10: 65 77 41 72 67 2c 20 22 6e 6f 56 73 32 30 30 38  ewArg, "noVs2008
fe20: 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  "))..           
fe30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fe40: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
fe50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fe60: 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20      bool? value 
fe70: 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74  = ParseBoolean(t
fe80: 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ext);....       
fe90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fea0: 20 20 20 20 20 20 20 20 20 69 66 20 28 76 61 6c           if (val
feb0: 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ue == null)..   
fec0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fed0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
fee0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fef0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ff00: 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72 61 63      error = Trac
ff10: 65 4f 70 73 2e 54 72 61 63 65 28 0d 0a 20 20 20  eOps.Trace(..   
ff20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ff30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ff40: 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69       TracePriori
ff50: 74 79 2e 4c 6f 77 65 73 74 2c 0d 0a 20 20 20 20  ty.Lowest,..    
ff60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ff70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ff80: 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63      traceCallbac
ff90: 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  k, String.Format
ffa0: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
ffb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ffc0: 20 20 20 20 20 20 20 20 20 20 20 22 49 6e 76 61             "Inva
ffd0: 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20  lid {0} boolean 
ffe0: 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20  value: {1}",..  
fff0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10010 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79        ForDisplay
10020 28 61 72 67 29 2c 20 46 6f 72 44 69 73 70 6c 61  (arg), ForDispla
10030 79 28 74 65 78 74 29 29 2c 0d 0a 20 20 20 20 20  y(text)),..     
10040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10060 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
10070 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
10080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10090 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73 74            if (st
100a0 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20  rict)..         
100b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
100c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
100d0 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a  eturn false;....
100e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
100f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10100 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20      continue;.. 
10110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
10130 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
10140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10150 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f      configuratio
10160 6e 2e 6e 6f 56 73 32 30 30 38 20 3d 20 28 62 6f  n.noVs2008 = (bo
10170 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20  ol)value;..     
10180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10190 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
101a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
101b0 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d        else if (M
101c0 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72  atchOption(newAr
101d0 67 2c 20 22 6e 6f 56 73 32 30 31 30 22 29 29 0d  g, "noVs2010")).
101e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
101f0 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
10200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10220 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61  bool? value = Pa
10230 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29  rseBoolean(text)
10240 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
10250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10260 20 20 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d       if (value =
10270 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
10280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10290 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
102a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
102b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
102c0 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73  error = TraceOps
102d0 2e 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20  .Trace(..       
102e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
102f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10300 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c   TracePriority.L
10310 6f 77 65 73 74 2c 0d 0a 20 20 20 20 20 20 20 20  owest,..        
10320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10340 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53  traceCallback, S
10350 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
10360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10380 20 20 20 20 20 20 20 22 49 6e 76 61 6c 69 64 20         "Invalid 
10390 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75  {0} boolean valu
103a0 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20  e: {1}",..      
103b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
103c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
103d0 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67    ForDisplay(arg
103e0 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74 65  ), ForDisplay(te
103f0 78 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  xt)),..         
10400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
10420 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
10430 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
10440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10450 20 20 20 20 20 20 69 66 20 28 73 74 72 69 63 74        if (strict
10460 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
10470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10480 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
10490 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20  n false;....    
104a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
104b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
104c0 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20  continue;..     
104d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
104e0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
104f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10510 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f  configuration.no
10520 56 73 32 30 31 30 20 3d 20 28 62 6f 6f 6c 29 76  Vs2010 = (bool)v
10530 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alue;..         
10540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10550 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
10560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10570 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68    else if (Match
10580 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22  Option(newArg, "
10590 6e 6f 54 72 61 63 65 22 29 29 0d 0a 20 20 20 20  noTrace"))..    
105a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
105b0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
105c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
105d0 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 3f             bool?
105e0 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65 42 6f   value = ParseBo
105f0 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a  olean(text);....
10600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10620 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c  if (value == nul
10630 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
10640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10650 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
10660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10670 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
10680 20 3d 20 54 72 61 63 65 4f 70 73 2e 54 72 61 63   = TraceOps.Trac
10690 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
106a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
106b0 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
106c0 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74  ePriority.Lowest
106d0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
106e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
106f0 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
10700 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67  Callback, String
10710 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
10720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10740 20 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62    "Invalid {0} b
10750 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31  oolean value: {1
10760 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }",..           
10770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10780 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72               For
10790 44 69 73 70 6c 61 79 28 61 72 67 29 2c 20 46 6f  Display(arg), Fo
107a0 72 44 69 73 70 6c 61 79 28 74 65 78 74 29 29 2c  rDisplay(text)),
107b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
107c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
107d0 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
107e0 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
107f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10810 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20   if (strict)..  
10820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10840 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
10850 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  se;....         
10860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10870 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69             conti
10880 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  nue;..          
10890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
108a0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
108b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
108c0 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69             confi
108d0 67 75 72 61 74 69 6f 6e 2e 6e 6f 54 72 61 63 65  guration.noTrace
108e0 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d   = (bool)value;.
108f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
10900 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
10910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10920 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65              else
10930 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e   if (MatchOption
10940 28 6e 65 77 41 72 67 2c 20 22 6e 6f 43 6f 6e 73  (newArg, "noCons
10950 6f 6c 65 22 29 29 0d 0a 20 20 20 20 20 20 20 20  ole"))..        
10960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10970 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
10980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10990 20 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c         bool? val
109a0 75 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61  ue = ParseBoolea
109b0 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20  n(text);....    
109c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
109d0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
109e0 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  value == null)..
109f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10a10 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
10a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10a30 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54         error = T
10a40 72 61 63 65 4f 70 73 2e 54 72 61 63 65 28 0d 0a  raceOps.Trace(..
10a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10a70 20 20 20 20 20 20 20 20 54 72 61 63 65 50 72 69          TracePri
10a80 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 0d 0a 20  ority.Lowest,.. 
10a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10ab0 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c         traceCall
10ac0 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72  back, String.For
10ad0 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
10ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 49                "I
10b00 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65  nvalid {0} boole
10b10 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d  an value: {1}",.
10b20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
10b30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10b40 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70           ForDisp
10b50 6c 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69 73  lay(arg), ForDis
10b60 70 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20 20  play(text)),..  
10b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10b90 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
10ba0 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
10bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
10bd0 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20  (strict)..      
10be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10c00 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
10c10 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
10c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10c30 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b         continue;
10c40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
10c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10c60 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
10c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10c80 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61         configura
10c90 74 69 6f 6e 2e 6e 6f 43 6f 6e 73 6f 6c 65 20 3d  tion.noConsole =
10ca0 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20   (bool)value;.. 
10cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10cc0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
10cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10ce0 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69            else i
10cf0 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e  f (MatchOption(n
10d00 65 77 41 72 67 2c 20 22 6e 6f 4c 6f 67 22 29 29  ewArg, "noLog"))
10d10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
10d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
10d30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
10d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10d50 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50   bool? value = P
10d60 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74  arseBoolean(text
10d70 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
10d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10d90 20 20 20 20 20 20 69 66 20 28 76 61 6c 75 65 20        if (value 
10da0 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
10db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10dc0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
10dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10df0 20 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70   error = TraceOp
10e00 73 2e 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20  s.Trace(..      
10e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10e30 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e    TracePriority.
10e40 4c 6f 77 65 73 74 2c 0d 0a 20 20 20 20 20 20 20  Lowest,..       
10e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10e70 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20   traceCallback, 
10e80 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
10e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10eb0 20 20 20 20 20 20 20 20 22 49 6e 76 61 6c 69 64          "Invalid
10ec0 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c   {0} boolean val
10ed0 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20  ue: {1}",..     
10ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10f00 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72     ForDisplay(ar
10f10 67 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74  g), ForDisplay(t
10f20 65 78 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  ext)),..        
10f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10f50 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
10f60 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
10f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10f80 20 20 20 20 20 20 20 69 66 20 28 73 74 72 69 63         if (stric
10f90 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t)..            
10fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10fb0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
10fc0 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20  rn false;....   
10fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10ff0 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20   continue;..    
11000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11010 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
11020 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
11030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11040 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e   configuration.n
11050 6f 4c 6f 67 20 3d 20 28 62 6f 6f 6c 29 76 61 6c  oLog = (bool)val
11060 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
11070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11080 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
11090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
110a0 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20  else..          
110b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
110c0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
110d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
110e0 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72 61       error = Tra
110f0 63 65 4f 70 73 2e 54 72 61 63 65 28 0d 0a 20 20  ceOps.Trace(..  
11100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11120 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e    TracePriority.
11130 4c 6f 77 65 73 74 2c 0d 0a 20 20 20 20 20 20 20  Lowest,..       
11140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11150 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
11160 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69  ceCallback, Stri
11170 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
11180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
111a0 22 55 6e 73 75 70 70 6f 72 74 65 64 20 63 6f 6d  "Unsupported com
111b0 6d 61 6e 64 20 6c 69 6e 65 20 6f 70 74 69 6f 6e  mand line option
111c0 3a 20 7b 30 7d 22 2c 0d 0a 20 20 20 20 20 20 20  : {0}",..       
111d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
111e0 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72               For
111f0 44 69 73 70 6c 61 79 28 61 72 67 29 29 2c 20 74  Display(arg)), t
11200 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
11210 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
11220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11230 20 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20    if (strict).. 
11240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11260 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
11270 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
11280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
11290 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
112a0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
112b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
112c0 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20      else..      
112d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
112e0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
112f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11300 20 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70   error = TraceOp
11310 73 2e 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20  s.Trace(..      
11320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11330 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 50            TraceP
11340 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 0d  riority.Lowest,.
11350 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
11360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11370 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20   traceCallback, 
11380 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
11390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
113a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
113b0 22 55 6e 73 75 70 70 6f 72 74 65 64 20 63 6f 6d  "Unsupported com
113c0 6d 61 6e 64 20 6c 69 6e 65 20 61 72 67 75 6d 65  mand line argume
113d0 6e 74 3a 20 7b 30 7d 22 2c 0d 0a 20 20 20 20 20  nt: {0}",..     
113e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
113f0 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69             ForDi
11400 73 70 6c 61 79 28 61 72 67 29 29 2c 20 74 72 61  splay(arg)), tra
11410 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
11420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11430 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
11440 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20  strict)..       
11450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11460 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
11470 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
11480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11490 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
114a0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
114b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
114c0 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20  return true;..  
114d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
114e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
114f0 20 63 61 74 63 68 20 28 45 78 63 65 70 74 69 6f   catch (Exceptio
11500 6e 20 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20  n e)..          
11510 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
11520 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
11530 63 65 4f 70 73 2e 54 72 61 63 65 28 0d 0a 20 20  ceOps.Trace(..  
11540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11550 20 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72        TracePrior
11560 69 74 79 2e 48 69 67 68 65 73 74 2c 20 74 72 61  ity.Highest, tra
11570 63 65 43 61 6c 6c 62 61 63 6b 2c 20 65 2c 0d 0a  ceCallback, e,..
11580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11590 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74          traceCat
115a0 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
115b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
115c0 72 72 6f 72 20 3d 20 22 46 61 69 6c 65 64 20 74  rror = "Failed t
115d0 6f 20 6d 6f 64 69 66 79 20 63 6f 6e 66 69 67 75  o modify configu
115e0 72 61 74 69 6f 6e 2e 22 3b 0d 0a 20 20 20 20 20  ration.";..     
115f0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
11600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11610 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20  return false;.. 
11620 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
11630 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
11640 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11650 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11660 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11670 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
11680 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
11690 75 62 6c 69 63 20 73 74 61 74 69 63 20 62 6f 6f  ublic static boo
116a0 6c 20 50 72 6f 63 65 73 73 28 0d 0a 20 20 20 20  l Process(..    
116b0 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
116c0 6e 67 5b 5d 20 61 72 67 73 2c 0d 0a 20 20 20 20  ng[] args,..    
116d0 20 20 20 20 20 20 20 20 20 20 20 20 43 6f 6e 66              Conf
116e0 69 67 75 72 61 74 69 6f 6e 20 63 6f 6e 66 69 67  iguration config
116f0 75 72 61 74 69 6f 6e 2c 0d 0a 20 20 20 20 20 20  uration,..      
11700 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 73            bool s
11710 74 72 69 63 74 2c 0d 0a 20 20 20 20 20 20 20 20  trict,..        
11720 20 20 20 20 20 20 20 20 72 65 66 20 73 74 72 69          ref stri
11730 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20  ng error..      
11740 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
11750 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
11760 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79 0d              try.
11770 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
11780 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
11790 20 20 20 20 20 20 20 20 69 66 20 28 63 6f 6e 66          if (conf
117a0 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c  iguration == nul
117b0 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
117c0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
117d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
117e0 20 20 20 65 72 72 6f 72 20 3d 20 22 49 6e 76 61     error = "Inva
117f0 6c 69 64 20 63 6f 6e 66 69 67 75 72 61 74 69 6f  lid configuratio
11800 6e 2e 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  n.";..          
11810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
11820 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
11830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11840 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
11850 20 20 20 20 20 20 20 20 20 20 41 73 73 65 6d 62            Assemb
11860 6c 79 20 61 73 73 65 6d 62 6c 79 20 3d 20 63 6f  ly assembly = co
11870 6e 66 69 67 75 72 61 74 69 6f 6e 2e 61 73 73 65  nfiguration.asse
11880 6d 62 6c 79 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  mbly;....       
11890 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
118a0 28 61 73 73 65 6d 62 6c 79 20 3d 3d 20 6e 75 6c  (assembly == nul
118b0 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
118c0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
118d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
118e0 20 20 20 65 72 72 6f 72 20 3d 20 22 49 6e 76 61     error = "Inva
118f0 6c 69 64 20 61 73 73 65 6d 62 6c 79 2e 22 3b 0d  lid assembly.";.
11900 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
11910 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
11920 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
11930 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
11940 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
11950 20 20 20 20 20 69 66 20 28 21 63 6f 6e 66 69 67       if (!config
11960 75 72 61 74 69 6f 6e 2e 6e 6f 54 72 61 63 65 29  uration.noTrace)
11970 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
11980 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
11990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
119a0 20 69 66 20 28 21 63 6f 6e 66 69 67 75 72 61 74   if (!configurat
119b0 69 6f 6e 2e 6e 6f 4c 6f 67 20 26 26 0d 0a 20 20  ion.noLog &&..  
119c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
119d0 20 20 20 20 20 20 20 20 20 20 53 74 72 69 6e 67            String
119e0 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 63  .IsNullOrEmpty(c
119f0 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6c 6f 67  onfiguration.log
11a00 46 69 6c 65 4e 61 6d 65 29 29 0d 0a 20 20 20 20  FileName))..    
11a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11a20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
11a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11a40 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e     configuration
11a50 2e 6c 6f 67 46 69 6c 65 4e 61 6d 65 20 3d 20 47  .logFileName = G
11a60 65 74 4c 6f 67 46 69 6c 65 4e 61 6d 65 28 29 3b  etLogFileName();
11a70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
11a80 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
11a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11aa0 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
11ab0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11ac0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11ad0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
11ae0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
11af0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21 63            if (!c
11b00 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 43  onfiguration.noC
11b10 6f 6e 73 6f 6c 65 29 0d 0a 20 20 20 20 20 20 20  onsole)..       
11b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11b30 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
11b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11b50 54 72 61 63 65 2e 4c 69 73 74 65 6e 65 72 73 2e  Trace.Listeners.
11b60 41 64 64 28 6e 65 77 20 43 6f 6e 73 6f 6c 65 54  Add(new ConsoleT
11b70 72 61 63 65 4c 69 73 74 65 6e 65 72 28 29 29 3b  raceListener());
11b80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
11b90 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
11ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11bb0 20 20 20 20 20 20 20 69 66 20 28 21 63 6f 6e 66         if (!conf
11bc0 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 4c 6f 67 20  iguration.noLog 
11bd0 26 26 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  &&..            
11be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11bf0 21 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72  !String.IsNullOr
11c00 45 6d 70 74 79 28 63 6f 6e 66 69 67 75 72 61 74  Empty(configurat
11c10 69 6f 6e 2e 6c 6f 67 46 69 6c 65 4e 61 6d 65 29  ion.logFileName)
11c20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
11c30 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
11c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11c50 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 2e            Trace.
11c60 4c 69 73 74 65 6e 65 72 73 2e 41 64 64 28 6e 65  Listeners.Add(ne
11c70 77 20 54 65 78 74 57 72 69 74 65 72 54 72 61 63  w TextWriterTrac
11c80 65 4c 69 73 74 65 6e 65 72 28 0d 0a 20 20 20 20  eListener(..    
11c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11ca0 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66              conf
11cb0 69 67 75 72 61 74 69 6f 6e 2e 6c 6f 67 46 69 6c  iguration.logFil
11cc0 65 4e 61 6d 65 29 29 3b 0d 0a 20 20 20 20 20 20  eName));..      
11cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11ce0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
11cf0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
11d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11d10 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
11d20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54            // NOT
11d30 45 3a 20 44 75 6d 70 20 74 68 65 20 63 6f 6e 66  E: Dump the conf
11d40 69 67 75 72 61 74 69 6f 6e 20 6e 6f 77 20 69 6e  iguration now in
11d50 20 63 61 73 65 20 77 65 20 6e 65 65 64 20 74 6f   case we need to
11d60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
11d70 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 74        //       t
11d80 72 6f 75 62 6c 65 73 68 6f 6f 74 20 61 6e 79 20  roubleshoot any 
11d90 69 73 73 75 65 73 2e 0d 0a 20 20 20 20 20 20 20  issues...       
11da0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
11db0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
11dc0 20 20 20 20 20 69 66 20 28 63 6f 6e 66 69 67 75       if (configu
11dd0 72 61 74 69 6f 6e 2e 74 72 61 63 65 50 72 69 6f  ration.tracePrio
11de0 72 69 74 79 20 3c 3d 20 54 72 61 63 65 50 72 69  rity <= TracePri
11df0 6f 72 69 74 79 2e 4d 65 64 69 75 6d 29 0d 0a 20  ority.Medium).. 
11e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11e10 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61         configura
11e20 74 69 6f 6e 2e 44 75 6d 70 28 29 3b 0d 0a 0d 0a  tion.Dump();....
11e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11e40 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
11e50 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e              // N
11e60 4f 54 45 3a 20 53 68 6f 77 20 77 68 65 72 65 20  OTE: Show where 
11e70 77 65 20 61 72 65 20 72 75 6e 6e 69 6e 67 20 66  we are running f
11e80 72 6f 6d 20 61 6e 64 20 68 6f 77 20 77 65 20 77  rom and how we w
11e90 65 72 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ere..           
11ea0 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
11eb0 20 20 69 6e 76 6f 6b 65 64 2e 0d 0a 20 20 20 20    invoked...    
11ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11ed0 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
11ee0 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6c          string l
11ef0 6f 63 61 74 69 6f 6e 20 3d 20 61 73 73 65 6d 62  ocation = assemb
11f00 6c 79 2e 4c 6f 63 61 74 69 6f 6e 3b 0d 0a 0d 0a  ly.Location;....
11f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11f20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 54 72 61      TraceOps.Tra
11f30 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ce(..           
11f40 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
11f50 63 65 50 72 69 6f 72 69 74 79 2e 4d 65 64 69 75  cePriority.Mediu
11f60 6d 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b  m, traceCallback
11f70 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  , String.Format(
11f80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
11f90 20 20 20 20 20 20 20 20 20 20 22 52 75 6e 6e 69            "Runni
11fa0 6e 67 20 66 72 6f 6d 3a 20 7b 30 7d 22 2c 20 46  ng from: {0}", F
11fb0 6f 72 44 69 73 70 6c 61 79 28 6c 6f 63 61 74 69  orDisplay(locati
11fc0 6f 6e 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  on)),..         
11fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
11fe0 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
11ff0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
12000 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 54        TraceOps.T
12010 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20  race(..         
12020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
12030 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4d 65 64  racePriority.Med
12040 69 75 6d 2c 20 74 72 61 63 65 43 61 6c 6c 62 61  ium, traceCallba
12050 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ck, String.Forma
12060 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
12070 20 20 20 20 20 20 20 20 20 20 20 20 22 4f 72 69              "Ori
12080 67 69 6e 61 6c 20 63 6f 6d 6d 61 6e 64 20 6c 69  ginal command li
12090 6e 65 20 69 73 3a 20 7b 30 7d 22 2c 0d 0a 20 20  ne is: {0}",..  
120a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
120b0 20 20 20 20 20 20 45 6e 76 69 72 6f 6e 6d 65 6e        Environmen
120c0 74 2e 43 6f 6d 6d 61 6e 64 4c 69 6e 65 29 2c 20  t.CommandLine), 
120d0 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
120e0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
120f0 20 20 20 20 20 20 20 69 66 20 28 21 63 6f 6e 66         if (!conf
12100 69 67 75 72 61 74 69 6f 6e 2e 77 68 61 74 49 66  iguration.whatIf
12110 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
12120 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
12130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12140 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
12150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
12160 20 4e 4f 54 45 3a 20 49 66 20 74 68 65 20 64 65   NOTE: If the de
12170 62 75 67 67 65 72 20 69 73 20 61 74 74 61 63 68  bugger is attach
12180 65 64 20 61 6e 64 20 57 68 61 74 2d 49 66 20 6d  ed and What-If m
12190 6f 64 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ode..           
121a0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
121b0 20 20 20 20 20 20 69 73 20 5b 6e 6f 77 5d 20 64        is [now] d
121c0 69 73 61 62 6c 65 64 2c 20 69 73 73 75 65 20 61  isabled, issue a
121d0 20 77 61 72 6e 69 6e 67 2e 0d 0a 20 20 20 20 20   warning...     
121e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
121f0 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
12200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
12210 66 20 28 44 65 62 75 67 67 65 72 2e 49 73 41 74  f (Debugger.IsAt
12220 74 61 63 68 65 64 29 0d 0a 20 20 20 20 20 20 20  tached)..       
12230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12240 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 54 72       TraceOps.Tr
12250 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ace(..          
12260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12270 20 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72        TracePrior
12280 69 74 79 2e 4d 65 64 69 75 6d 2c 20 74 72 61 63  ity.Medium, trac
12290 65 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20  eCallback,..    
122a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
122b0 20 20 20 20 20 20 20 20 20 20 20 20 22 46 6f 72              "For
122c0 63 65 64 20 74 6f 20 64 69 73 61 62 6c 65 20 5c  ced to disable \
122d0 22 77 68 61 74 2d 69 66 5c 22 20 6d 6f 64 65 20  "what-if\" mode 
122e0 77 69 74 68 20 22 20 2b 0d 0a 20 20 20 20 20 20  with " +..      
122f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12300 20 20 20 20 20 20 20 20 20 20 22 64 65 62 75 67            "debug
12310 67 65 72 20 61 74 74 61 63 68 65 64 2e 22 2c 20  ger attached.", 
12320 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
12330 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
12340 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
12350 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65              else
12360 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
12370 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
12380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12390 20 54 72 61 63 65 4f 70 73 2e 54 72 61 63 65 28   TraceOps.Trace(
123a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
123b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
123c0 61 63 65 50 72 69 6f 72 69 74 79 2e 48 69 67 68  acePriority.High
123d0 65 72 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63  er, traceCallbac
123e0 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  k,..            
123f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12400 22 4e 6f 20 61 63 74 75 61 6c 20 63 68 61 6e 67  "No actual chang
12410 65 73 20 77 69 6c 6c 20 62 65 20 6d 61 64 65 20  es will be made 
12420 74 6f 20 74 68 69 73 20 22 20 2b 0d 0a 20 20 20  to this " +..   
12430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12440 20 20 20 20 20 20 20 20 20 22 73 79 73 74 65 6d           "system
12450 20 62 65 63 61 75 73 65 20 5c 22 77 68 61 74 2d   because \"what-
12460 69 66 5c 22 20 6d 6f 64 65 20 69 73 20 65 6e 61  if\" mode is ena
12470 62 6c 65 64 2e 22 2c 0d 0a 20 20 20 20 20 20 20  bled.",..       
12480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12490 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
124a0 72 79 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ry);..          
124b0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
124c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
124d0 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
124e0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f             // NO
124f0 54 45 3a 20 49 66 20 74 68 65 20 63 6f 6d 6d 61  TE: If the comma
12500 6e 64 20 6c 69 6e 65 20 68 61 73 20 6e 6f 74 20  nd line has not 
12510 62 65 65 6e 20 6d 61 6e 75 61 6c 6c 79 0d 0a 20  been manually.. 
12520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12530 20 20 20 2f 2f 20 20 20 20 20 20 20 63 6f 6e 66     //       conf
12540 69 72 6d 65 64 20 28 69 2e 65 2e 20 76 69 61 20  irmed (i.e. via 
12550 74 68 65 20 65 78 70 6c 69 63 69 74 20 63 6f 6d  the explicit com
12560 6d 61 6e 64 20 6c 69 6e 65 0d 0a 20 20 20 20 20  mand line..     
12570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
12580 2f 20 20 20 20 20 20 20 6f 70 74 69 6f 6e 29 2c  /       option),
12590 20 74 68 65 6e 20 73 74 6f 70 20 70 72 6f 63 65   then stop proce
125a0 73 73 69 6e 67 20 6e 6f 77 2e 20 20 57 65 20 65  ssing now.  We e
125b0 6e 66 6f 72 63 65 0d 0a 20 20 20 20 20 20 20 20  nforce..        
125c0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
125d0 20 20 20 20 20 74 68 69 73 20 72 75 6c 65 20 73       this rule s
125e0 6f 20 74 68 61 74 20 73 69 6d 70 6c 79 20 64 6f  o that simply do
125f0 75 62 6c 65 2d 63 6c 69 63 6b 69 6e 67 20 74 68  uble-clicking th
12600 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
12610 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
12620 65 78 65 63 75 74 61 62 6c 65 20 77 69 6c 6c 20  executable will 
12630 6e 6f 74 20 72 65 73 75 6c 74 20 69 6e 20 61 6e  not result in an
12640 79 20 63 68 61 6e 67 65 73 20 62 65 69 6e 67 0d  y changes being.
12650 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
12660 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6d 61       //       ma
12670 64 65 20 74 6f 20 74 68 65 20 73 79 73 74 65 6d  de to the system
12680 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
12690 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
126a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
126b0 66 20 28 21 63 6f 6e 66 69 67 75 72 61 74 69 6f  f (!configuratio
126c0 6e 2e 63 6f 6e 66 69 72 6d 29 0d 0a 20 20 20 20  n.confirm)..    
126d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
126e0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
126f0 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
12700 20 3d 20 22 43 61 6e 6e 6f 74 20 63 6f 6e 74 69   = "Cannot conti
12710 6e 75 65 2c 20 74 68 65 20 5c 22 63 6f 6e 66 69  nue, the \"confi
12720 72 6d 5c 22 20 6f 70 74 69 6f 6e 20 69 73 20 22  rm\" option is "
12730 20 2b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   +..            
12740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12750 22 6e 6f 74 20 65 6e 61 62 6c 65 64 2e 22 3b 0d  "not enabled.";.
12760 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
12770 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
12780 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
12790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
127a0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
127b0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72         return tr
127c0 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
127d0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
127e0 20 20 20 20 20 20 20 20 63 61 74 63 68 20 28 45          catch (E
127f0 78 63 65 70 74 69 6f 6e 20 65 29 0d 0a 20 20 20  xception e)..   
12800 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
12810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12820 20 20 20 20 54 72 61 63 65 4f 70 73 2e 54 72 61      TraceOps.Tra
12830 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ce(..           
12840 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
12850 63 65 50 72 69 6f 72 69 74 79 2e 48 69 67 68 65  cePriority.Highe
12860 73 74 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63  st, traceCallbac
12870 6b 2c 20 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  k, e,..         
12880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
12890 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
128a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
128b0 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 46        error = "F
128c0 61 69 6c 65 64 20 74 6f 20 70 72 6f 63 65 73 73  ailed to process
128d0 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 22   configuration."
128e0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
128f0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
12900 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
12910 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
12920 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
12930 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
12940 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12950 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12960 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12970 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
12980 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74         public st
12990 61 74 69 63 20 62 6f 6f 6c 20 43 68 65 63 6b 49  atic bool CheckI
129a0 6d 61 67 65 52 75 6e 74 69 6d 65 56 65 72 73 69  mageRuntimeVersi
129b0 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on(..           
129c0 20 20 20 20 20 43 6f 6e 66 69 67 75 72 61 74 69       Configurati
129d0 6f 6e 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  on configuration
129e0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
129f0 20 20 20 56 65 72 73 69 6f 6e 4c 69 73 74 4d 61     VersionListMa
12a00 70 20 66 72 6f 6d 74 6f 79 6f 75 2c 0d 0a 20 20  p fromtoyou,..  
12a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 56 65                Ve
12a20 72 73 69 6f 6e 4c 69 73 74 20 76 65 72 73 69 6f  rsionList versio
12a30 6e 4c 69 73 74 2c 0d 0a 20 20 20 20 20 20 20 20  nList,..        
12a40 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 73 74 72          bool str
12a50 69 63 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ict,..          
12a60 20 20 20 20 20 20 72 65 66 20 73 74 72 69 6e 67        ref string
12a70 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20   error..        
12a80 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
12a90 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
12aa0 20 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20            try.. 
12ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
12ac0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
12ad0 20 20 20 20 20 20 69 66 20 28 63 6f 6e 66 69 67        if (config
12ae0 75 72 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29  uration == null)
12af0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
12b00 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
12b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12b20 20 65 72 72 6f 72 20 3d 20 22 49 6e 76 61 6c 69   error = "Invali
12b30 64 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e  d configuration.
12b40 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ";..            
12b50 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
12b60 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
12b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
12b80 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
12b90 20 20 20 20 20 20 20 20 41 73 73 65 6d 62 6c 79          Assembly
12ba0 20 61 73 73 65 6d 62 6c 79 20 3d 20 63 6f 6e 66   assembly = conf
12bb0 69 67 75 72 61 74 69 6f 6e 2e 61 73 73 65 6d 62  iguration.assemb
12bc0 6c 79 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ly;....         
12bd0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 61             if (a
12be0 73 73 65 6d 62 6c 79 20 3d 3d 20 6e 75 6c 6c 29  ssembly == null)
12bf0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
12c00 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
12c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12c20 20 65 72 72 6f 72 20 3d 20 22 49 6e 76 61 6c 69   error = "Invali
12c30 64 20 61 73 73 65 6d 62 6c 79 2e 22 3b 0d 0a 20  d assembly.";.. 
12c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12c50 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
12c60 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lse;..          
12c70 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
12c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12c90 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
12ca0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f             // NO
12cb0 54 45 3a 20 57 68 61 74 20 76 65 72 73 69 6f 6e  TE: What version
12cc0 20 6f 66 20 74 68 65 20 72 75 6e 74 69 6d 65 20   of the runtime 
12cd0 77 61 73 20 74 68 65 20 63 6f 72 65 20 28 70 72  was the core (pr
12ce0 69 6d 61 72 79 29 0d 0a 20 20 20 20 20 20 20 20  imary)..        
12cf0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
12d00 20 20 20 20 20 61 73 73 65 6d 62 6c 79 20 63 6f       assembly co
12d10 6d 70 69 6c 65 64 20 61 67 61 69 6e 73 74 20 28  mpiled against (
12d20 65 2e 67 2e 20 22 76 32 2e 30 2e 35 30 37 32 37  e.g. "v2.0.50727
12d30 22 20 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20  " or..          
12d40 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
12d50 20 20 20 22 76 34 2e 30 2e 33 30 33 31 39 22 29     "v4.0.30319")
12d60 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
12d70 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
12d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
12d90 74 72 69 6e 67 20 63 6f 72 65 49 6d 61 67 65 52  tring coreImageR
12da0 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 20 3d 20  untimeVersion = 
12db0 47 65 74 49 6d 61 67 65 52 75 6e 74 69 6d 65 56  GetImageRuntimeV
12dc0 65 72 73 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20  ersion(..       
12dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12de0 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 63   configuration.c
12df0 6f 72 65 46 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d  oreFileName);...
12e00 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
12e10 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
12e20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
12e30 54 4f 44 4f 3a 20 52 65 73 74 72 69 63 74 20 74  TODO: Restrict t
12e40 68 65 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  he configuration
12e50 20 62 61 73 65 64 20 6f 6e 20 77 68 69 63 68 20   based on which 
12e60 69 6d 61 67 65 0d 0a 20 20 20 20 20 20 20 20 20  image..         
12e70 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
12e80 20 20 20 20 72 75 6e 74 69 6d 65 20 76 65 72 73      runtime vers
12e90 69 6f 6e 73 20 28 77 68 69 63 68 20 6d 6f 72 65  ions (which more
12ea0 2d 6f 72 2d 6c 65 73 73 20 63 6f 72 72 65 73 70  -or-less corresp
12eb0 6f 6e 64 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ond..           
12ec0 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
12ed0 20 20 74 6f 20 2e 4e 45 54 20 46 72 61 6d 65 77    to .NET Framew
12ee0 6f 72 6b 20 76 65 72 73 69 6f 6e 73 29 20 61 72  ork versions) ar
12ef0 65 20 73 75 70 70 6f 72 74 65 64 20 62 79 20 74  e supported by t
12f00 68 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  he..            
12f10 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
12f20 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 56 69 73   versions of Vis
12f30 75 61 6c 20 53 74 75 64 69 6f 20 74 68 61 74 20  ual Studio that 
12f40 61 72 65 20 69 6e 73 74 61 6c 6c 65 64 2e 0d 0a  are installed...
12f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12f60 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
12f70 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
12f80 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20  rn true;..      
12f90 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
12fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 63 61 74               cat
12fb0 63 68 20 28 45 78 63 65 70 74 69 6f 6e 20 65 29  ch (Exception e)
12fc0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
12fd0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
12fe0 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70           TraceOp
12ff0 73 2e 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20  s.Trace(..      
13000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13010 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e    TracePriority.
13020 48 69 67 68 65 73 74 2c 20 74 72 61 63 65 43 61  Highest, traceCa
13030 6c 6c 62 61 63 6b 2c 20 65 2c 0d 0a 20 20 20 20  llback, e,..    
13040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13050 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72      traceCategor
13060 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
13070 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
13080 20 3d 20 22 46 61 69 6c 65 64 20 74 6f 20 63 68   = "Failed to ch
13090 65 63 6b 20 69 6d 61 67 65 20 72 75 6e 74 69 6d  eck image runtim
130a0 65 20 76 65 72 73 69 6f 6e 2e 22 3b 0d 0a 20 20  e version.";..  
130b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
130c0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
130d0 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
130e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
130f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e  .            #en
13100 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
13110 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
13120 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13130 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13140 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13150 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
13160 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f            #regio
13170 6e 20 50 75 62 6c 69 63 20 4d 65 74 68 6f 64 73  n Public Methods
13180 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
13190 62 6c 69 63 20 62 6f 6f 6c 20 48 61 73 46 6c 61  blic bool HasFla
131a0 67 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  gs(..           
131b0 20 20 20 20 20 49 6e 73 74 61 6c 6c 46 6c 61 67       InstallFlag
131c0 73 20 68 61 73 46 6c 61 67 73 2c 0d 0a 20 20 20  s hasFlags,..   
131d0 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
131e0 6c 20 61 6c 6c 0d 0a 20 20 20 20 20 20 20 20 20  l all..         
131f0 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
13200 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
13210 20 20 20 20 20 20 20 20 20 69 66 20 28 61 6c 6c           if (all
13220 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
13230 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 28 28         return ((
13240 69 6e 73 74 61 6c 6c 46 6c 61 67 73 20 26 20 68  installFlags & h
13250 61 73 46 6c 61 67 73 29 20 3d 3d 20 68 61 73 46  asFlags) == hasF
13260 6c 61 67 73 29 3b 0d 0a 20 20 20 20 20 20 20 20  lags);..        
13270 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20          else..  
13280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13290 20 20 72 65 74 75 72 6e 20 28 28 69 6e 73 74 61    return ((insta
132a0 6c 6c 46 6c 61 67 73 20 26 20 68 61 73 46 6c 61  llFlags & hasFla
132b0 67 73 29 20 21 3d 20 49 6e 73 74 61 6c 6c 46 6c  gs) != InstallFl
132c0 61 67 73 2e 4e 6f 6e 65 29 3b 0d 0a 20 20 20 20  ags.None);..    
132d0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
132e0 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
132f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13300 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13310 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13320 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
13330 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
13340 69 63 20 76 6f 69 64 20 44 75 6d 70 28 29 0d 0a  ic void Dump()..
13350 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
13360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
13370 66 20 28 74 72 61 63 65 43 61 6c 6c 62 61 63 6b  f (traceCallback
13380 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   != null)..     
13390 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
133a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
133b0 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28    traceCallback(
133c0 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61  String.Format(Na
133d0 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74  meAndValueFormat
133e0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
133f0 20 20 20 20 20 20 20 20 20 20 20 22 41 73 73 65             "Asse
13400 6d 62 6c 79 22 2c 20 46 6f 72 44 69 73 70 6c 61  mbly", ForDispla
13410 79 28 61 73 73 65 6d 62 6c 79 29 29 2c 0d 0a 20  y(assembly)),.. 
13420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13430 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
13440 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
13450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
13460 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69  aceCallback(Stri
13470 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e  ng.Format(NameAn
13480 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20  dValueFormat,.. 
13490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
134a0 20 20 20 20 20 20 20 22 4c 6f 67 46 69 6c 65 4e         "LogFileN
134b0 61 6d 65 22 2c 20 46 6f 72 44 69 73 70 6c 61 79  ame", ForDisplay
134c0 28 6c 6f 67 46 69 6c 65 4e 61 6d 65 29 29 2c 0d  (logFileName)),.
134d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
134e0 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
134f0 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
13500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13510 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74  traceCallback(St
13520 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65  ring.Format(Name
13530 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d  AndValueFormat,.
13540 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
13550 20 20 20 20 20 20 20 20 20 22 44 69 72 65 63 74           "Direct
13560 6f 72 79 22 2c 20 46 6f 72 44 69 73 70 6c 61 79  ory", ForDisplay
13570 28 64 69 72 65 63 74 6f 72 79 29 29 2c 0d 0a 20  (directory)),.. 
13580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13590 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
135a0 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
135b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
135c0 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69  aceCallback(Stri
135d0 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e  ng.Format(NameAn
135e0 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20  dValueFormat,.. 
135f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13600 20 20 20 20 20 20 20 22 43 6f 72 65 46 69 6c 65         "CoreFile
13610 4e 61 6d 65 22 2c 20 46 6f 72 44 69 73 70 6c 61  Name", ForDispla
13620 79 28 63 6f 72 65 46 69 6c 65 4e 61 6d 65 29 29  y(coreFileName))
13630 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
13640 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
13650 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
13660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13670 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28    traceCallback(
13680 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61  String.Format(Na
13690 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74  meAndValueFormat
136a0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
136b0 20 20 20 20 20 20 20 20 20 20 20 22 4c 69 6e 71             "Linq
136c0 46 69 6c 65 4e 61 6d 65 22 2c 20 46 6f 72 44 69  FileName", ForDi
136d0 73 70 6c 61 79 28 6c 69 6e 71 46 69 6c 65 4e 61  splay(linqFileNa
136e0 6d 65 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  me)),..         
136f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
13700 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
13710 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
13720 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
13730 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ack(String.Forma
13740 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f  t(NameAndValueFo
13750 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  rmat,..         
13760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
13770 44 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65  DesignerFileName
13780 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 64 65  ", ForDisplay(de
13790 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 29 29  signerFileName))
137a0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
137b0 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
137c0 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
137d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
137e0 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28    traceCallback(
137f0 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61  String.Format(Na
13800 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74  meAndValueFormat
13810 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
13820 20 20 20 20 20 20 20 20 20 20 20 22 54 72 61 63             "Trac
13830 65 46 6f 72 6d 61 74 22 2c 20 46 6f 72 44 69 73  eFormat", ForDis
13840 70 6c 61 79 28 74 72 61 63 65 46 6f 72 6d 61 74  play(traceFormat
13850 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
13860 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
13870 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
13880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13890 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63      traceCallbac
138a0 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  k(String.Format(
138b0 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d  NameAndValueForm
138c0 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at,..           
138d0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 49 6e               "In
138e0 73 74 61 6c 6c 46 6c 61 67 73 22 2c 20 46 6f 72  stallFlags", For
138f0 44 69 73 70 6c 61 79 28 69 6e 73 74 61 6c 6c 46  Display(installF
13900 6c 61 67 73 29 29 2c 0d 0a 20 20 20 20 20 20 20  lags)),..       
13910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13920 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
13930 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
13940 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c          traceCal
13950 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72  lback(String.For
13960 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65  mat(NameAndValue
13970 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20  Format,..       
13980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13990 20 22 54 72 61 63 65 50 72 69 6f 72 69 74 79 22   "TracePriority"
139a0 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74 72 61  , ForDisplay(tra
139b0 63 65 50 72 69 6f 72 69 74 79 29 29 2c 0d 0a 20  cePriority)),.. 
139c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
139d0 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
139e0 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
139f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
13a00 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69  aceCallback(Stri
13a10 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e  ng.Format(NameAn
13a20 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20  dValueFormat,.. 
13a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13a40 20 20 20 20 20 20 20 22 49 6e 73 74 61 6c 6c 22         "Install"
13a50 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 69 6e 73  , ForDisplay(ins
13a60 74 61 6c 6c 29 29 2c 0d 0a 20 20 20 20 20 20 20  tall)),..       
13a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13a80 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
13a90 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
13aa0 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c          traceCal
13ab0 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72  lback(String.For
13ac0 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65  mat(NameAndValue
13ad0 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20  Format,..       
13ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13af0 20 22 4e 6f 44 65 73 6b 74 6f 70 22 2c 20 46 6f   "NoDesktop", Fo
13b00 72 44 69 73 70 6c 61 79 28 6e 6f 44 65 73 6b 74  rDisplay(noDeskt
13b10 6f 70 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  op)),..         
13b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
13b30 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
13b40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
13b50 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
13b60 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ack(String.Forma
13b70 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f  t(NameAndValueFo
13b80 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  rmat,..         
13b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
13ba0 4e 6f 43 6f 6d 70 61 63 74 22 2c 20 46 6f 72 44  NoCompact", ForD
13bb0 69 73 70 6c 61 79 28 6e 6f 43 6f 6d 70 61 63 74  isplay(noCompact
13bc0 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
13bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
13be0 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
13bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13c00 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63      traceCallbac
13c10 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  k(String.Format(
13c20 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d  NameAndValueForm
13c30 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at,..           
13c40 20 20 20 20 20 20 20 20 20 20 20 20 20 22 4e 6f               "No
13c50 4e 65 74 46 78 32 30 22 2c 20 46 6f 72 44 69 73  NetFx20", ForDis
13c60 70 6c 61 79 28 6e 6f 4e 65 74 46 78 32 30 29 29  play(noNetFx20))
13c70 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
13c80 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
13c90 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
13ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13cb0 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28    traceCallback(
13cc0 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61  String.Format(Na
13cd0 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74  meAndValueFormat
13ce0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
13cf0 20 20 20 20 20 20 20 20 20 20 20 22 4e 6f 4e 65             "NoNe
13d00 74 46 78 34 30 22 2c 20 46 6f 72 44 69 73 70 6c  tFx40", ForDispl
13d10 61 79 28 6e 6f 4e 65 74 46 78 34 30 29 29 2c 0d  ay(noNetFx40)),.
13d20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
13d30 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
13d40 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
13d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13d60 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74  traceCallback(St
13d70 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65  ring.Format(Name
13d80 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d  AndValueFormat,.
13d90 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
13da0 20 20 20 20 20 20 20 20 20 22 4e 6f 56 73 32 30           "NoVs20
13db0 30 38 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  08", ForDisplay(
13dc0 6e 6f 56 73 32 30 30 38 29 29 2c 0d 0a 20 20 20  noVs2008)),..   
13dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13de0 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
13df0 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
13e00 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
13e10 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67  eCallback(String
13e20 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56  .Format(NameAndV
13e30 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20  alueFormat,..   
13e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13e50 20 20 20 20 20 22 4e 6f 56 73 32 30 31 30 22 2c       "NoVs2010",
13e60 20 46 6f 72 44 69 73 70 6c 61 79 28 6e 6f 56 73   ForDisplay(noVs
13e70 32 30 31 30 29 29 2c 0d 0a 20 20 20 20 20 20 20  2010)),..       
13e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13e90 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
13ea0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
13eb0 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c          traceCal
13ec0 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72  lback(String.For
13ed0 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65  mat(NameAndValue
13ee0 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20  Format,..       
13ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13f00 20 22 4e 6f 54 72 61 63 65 22 2c 20 46 6f 72 44   "NoTrace", ForD
13f10 69 73 70 6c 61 79 28 6e 6f 54 72 61 63 65 29 29  isplay(noTrace))
13f20 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
13f30 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
13f40 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
13f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13f60 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28    traceCallback(
13f70 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61  String.Format(Na
13f80 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74  meAndValueFormat
13f90 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
13fa0 20 20 20 20 20 20 20 20 20 20 20 22 4e 6f 43 6f             "NoCo
13fb0 6e 73 6f 6c 65 22 2c 20 46 6f 72 44 69 73 70 6c  nsole", ForDispl
13fc0 61 79 28 6e 6f 43 6f 6e 73 6f 6c 65 29 29 2c 0d  ay(noConsole)),.
13fd0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
13fe0 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
13ff0 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
14000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14010 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74  traceCallback(St
14020 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65  ring.Format(Name
14030 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d  AndValueFormat,.
14040 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
14050 20 20 20 20 20 20 20 20 20 22 4e 6f 4c 6f 67 22           "NoLog"
14060 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 6e 6f 4c  , ForDisplay(noL
14070 6f 67 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  og)),..         
14080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
14090 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
140a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
140b0 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
140c0 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ack(String.Forma
140d0 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f  t(NameAndValueFo
140e0 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  rmat,..         
140f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
14100 57 68 61 74 49 66 22 2c 20 46 6f 72 44 69 73 70  WhatIf", ForDisp
14110 6c 61 79 28 77 68 61 74 49 66 29 29 2c 0d 0a 20  lay(whatIf)),.. 
14120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14130 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
14140 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
14150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
14160 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69  aceCallback(Stri
14170 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e  ng.Format(NameAn
14180 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20  dValueFormat,.. 
14190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
141a0 20 20 20 20 20 20 20 22 56 65 72 62 6f 73 65 22         "Verbose"
141b0 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 76 65 72  , ForDisplay(ver
141c0 62 6f 73 65 29 29 2c 0d 0a 20 20 20 20 20 20 20  bose)),..       
141d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
141e0 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
141f0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
14200 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c          traceCal
14210 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72  lback(String.For
14220 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65  mat(NameAndValue
14230 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20  Format,..       
14240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14250 20 22 43 6f 6e 66 69 72 6d 22 2c 20 46 6f 72 44   "Confirm", ForD
14260 69 73 70 6c 61 79 28 63 6f 6e 66 69 72 6d 29 29  isplay(confirm))
14270 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
14280 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
14290 43 61 74 65 67 6f 72 79 29 3b 0d 0a 20 20 20 20  Category);..    
142a0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
142b0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
142c0 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65            #endre
142d0 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
142e0 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
142f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14300 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14310 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14320 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
14330 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50         #region P
14340 75 62 6c 69 63 20 50 72 6f 70 65 72 74 69 65 73  ublic Properties
14350 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
14360 69 76 61 74 65 20 41 73 73 65 6d 62 6c 79 20 61  ivate Assembly a
14370 73 73 65 6d 62 6c 79 3b 0d 0a 20 20 20 20 20 20  ssembly;..      
14380 20 20 20 20 20 20 70 75 62 6c 69 63 20 41 73 73        public Ass
14390 65 6d 62 6c 79 20 41 73 73 65 6d 62 6c 79 0d 0a  embly Assembly..
143a0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
143b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67                 g
143c0 65 74 20 7b 20 72 65 74 75 72 6e 20 61 73 73 65  et { return asse
143d0 6d 62 6c 79 3b 20 7d 0d 0a 20 20 20 20 20 20 20  mbly; }..       
143e0 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 61           set { a
143f0 73 73 65 6d 62 6c 79 20 3d 20 76 61 6c 75 65 3b  ssembly = value;
14400 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
14410 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
14420 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
14430 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14440 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14450 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14460 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
14470 20 20 20 20 70 72 69 76 61 74 65 20 73 74 72 69      private stri
14480 6e 67 20 6c 6f 67 46 69 6c 65 4e 61 6d 65 3b 0d  ng logFileName;.
14490 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
144a0 6c 69 63 20 73 74 72 69 6e 67 20 4c 6f 67 46 69  lic string LogFi
144b0 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20  leName..        
144c0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
144d0 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74         get { ret
144e0 75 72 6e 20 6c 6f 67 46 69 6c 65 4e 61 6d 65 3b  urn logFileName;
144f0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
14500 20 20 20 20 73 65 74 20 7b 20 6c 6f 67 46 69 6c      set { logFil
14510 65 4e 61 6d 65 20 3d 20 76 61 6c 75 65 3b 20 7d  eName = value; }
14520 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
14530 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
14540 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14550 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14560 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14570 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14580 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
14590 20 20 70 72 69 76 61 74 65 20 73 74 72 69 6e 67    private string
145a0 20 64 69 72 65 63 74 6f 72 79 3b 0d 0a 20 20 20   directory;..   
145b0 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
145c0 73 74 72 69 6e 67 20 44 69 72 65 63 74 6f 72 79  string Directory
145d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
145e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
145f0 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 64 69   get { return di
14600 72 65 63 74 6f 72 79 3b 20 7d 0d 0a 20 20 20 20  rectory; }..    
14610 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
14620 7b 20 64 69 72 65 63 74 6f 72 79 20 3d 20 76 61  { directory = va
14630 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  lue; }..        
14640 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
14650 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
14660 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14670 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14680 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14690 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
146a0 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
146b0 73 74 72 69 6e 67 20 63 6f 72 65 46 69 6c 65 4e  string coreFileN
146c0 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ame;..          
146d0 20 20 70 75 62 6c 69 63 20 73 74 72 69 6e 67 20    public string 
146e0 43 6f 72 65 46 69 6c 65 4e 61 6d 65 0d 0a 20 20  CoreFileName..  
146f0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
14700 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74               get
14710 20 7b 20 72 65 74 75 72 6e 20 63 6f 72 65 46 69   { return coreFi
14720 6c 65 4e 61 6d 65 3b 20 7d 0d 0a 20 20 20 20 20  leName; }..     
14730 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b             set {
14740 20 63 6f 72 65 46 69 6c 65 4e 61 6d 65 20 3d 20   coreFileName = 
14750 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20  value; }..      
14760 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
14770 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
14780 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14790 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
147a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
147b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
147c0 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
147d0 65 20 73 74 72 69 6e 67 20 6c 69 6e 71 46 69 6c  e string linqFil
147e0 65 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20  eName;..        
147f0 20 20 20 20 70 75 62 6c 69 63 20 73 74 72 69 6e      public strin
14800 67 20 4c 69 6e 71 46 69 6c 65 4e 61 6d 65 0d 0a  g LinqFileName..
14810 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
14820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67                 g
14830 65 74 20 7b 20 72 65 74 75 72 6e 20 6c 69 6e 71  et { return linq
14840 46 69 6c 65 4e 61 6d 65 3b 20 7d 0d 0a 20 20 20  FileName; }..   
14850 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74               set
14860 20 7b 20 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 20   { linqFileName 
14870 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20  = value; }..    
14880 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
14890 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
148a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
148b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
148c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
148d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
148e0 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
148f0 61 74 65 20 73 74 72 69 6e 67 20 64 65 73 69 67  ate string desig
14900 6e 65 72 46 69 6c 65 4e 61 6d 65 3b 0d 0a 20 20  nerFileName;..  
14910 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
14920 20 73 74 72 69 6e 67 20 44 65 73 69 67 6e 65 72   string Designer
14930 46 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20  FileName..      
14940 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
14950 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72           get { r
14960 65 74 75 72 6e 20 64 65 73 69 67 6e 65 72 46 69  eturn designerFi
14970 6c 65 4e 61 6d 65 3b 20 7d 0d 0a 20 20 20 20 20  leName; }..     
14980 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b             set {
14990 20 64 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d   designerFileNam
149a0 65 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20  e = value; }..  
149b0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
149c0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
149d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
149e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
149f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14a00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
14a10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
14a20 69 76 61 74 65 20 73 74 72 69 6e 67 20 74 72 61  ivate string tra
14a30 63 65 46 6f 72 6d 61 74 3b 0d 0a 20 20 20 20 20  ceFormat;..     
14a40 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74         public st
14a50 72 69 6e 67 20 54 72 61 63 65 46 6f 72 6d 61 74  ring TraceFormat
14a60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
14a70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
14a80 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 74 72   get { return tr
14a90 61 63 65 46 6f 72 6d 61 74 3b 20 7d 0d 0a 20 20  aceFormat; }..  
14aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65                se
14ab0 74 20 7b 20 74 72 61 63 65 46 6f 72 6d 61 74 20  t { traceFormat 
14ac0 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20  = value; }..    
14ad0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
14ae0 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
14af0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14b00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14b10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14b20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
14b30 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
14b40 61 74 65 20 49 6e 73 74 61 6c 6c 46 6c 61 67 73  ate InstallFlags
14b50 20 69 6e 73 74 61 6c 6c 46 6c 61 67 73 3b 0d 0a   installFlags;..
14b60 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
14b70 69 63 20 49 6e 73 74 61 6c 6c 46 6c 61 67 73 20  ic InstallFlags 
14b80 49 6e 73 74 61 6c 6c 46 6c 61 67 73 0d 0a 20 20  InstallFlags..  
14b90 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
14ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74               get
14bb0 20 7b 20 72 65 74 75 72 6e 20 69 6e 73 74 61 6c   { return instal
14bc0 6c 46 6c 61 67 73 3b 20 7d 0d 0a 20 20 20 20 20  lFlags; }..     
14bd0 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b             set {
14be0 20 69 6e 73 74 61 6c 6c 46 6c 61 67 73 20 3d 20   installFlags = 
14bf0 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20  value; }..      
14c00 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
14c10 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
14c20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14c30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14c40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14c50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
14c60 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
14c70 65 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 20  e TracePriority 
14c80 74 72 61 63 65 50 72 69 6f 72 69 74 79 3b 0d 0a  tracePriority;..
14c90 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
14ca0 69 63 20 54 72 61 63 65 50 72 69 6f 72 69 74 79  ic TracePriority
14cb0 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 0d 0a   TracePriority..
14cc0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
14cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67                 g
14ce0 65 74 20 7b 20 72 65 74 75 72 6e 20 74 72 61 63  et { return trac
14cf0 65 50 72 69 6f 72 69 74 79 3b 20 7d 0d 0a 20 20  ePriority; }..  
14d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65                se
14d10 74 20 7b 20 74 72 61 63 65 50 72 69 6f 72 69 74  t { tracePriorit
14d20 79 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20  y = value; }..  
14d30 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
14d40 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
14d50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14d60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14d70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14d80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
14d90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
14da0 69 76 61 74 65 20 62 6f 6f 6c 20 69 6e 73 74 61  ivate bool insta
14db0 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll;..           
14dc0 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 49 6e 73   public bool Ins
14dd0 74 61 6c 6c 0d 0a 20 20 20 20 20 20 20 20 20 20  tall..          
14de0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
14df0 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72       get { retur
14e00 6e 20 69 6e 73 74 61 6c 6c 3b 20 7d 0d 0a 20 20  n install; }..  
14e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65                se
14e20 74 20 7b 20 69 6e 73 74 61 6c 6c 20 3d 20 76 61  t { install = va
14e30 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  lue; }..        
14e40 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
14e50 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
14e60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14e70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14e80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14e90 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
14ea0 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
14eb0 62 6f 6f 6c 20 6e 6f 44 65 73 6b 74 6f 70 3b 0d  bool noDesktop;.
14ec0 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
14ed0 6c 69 63 20 62 6f 6f 6c 20 4e 6f 44 65 73 6b 74  lic bool NoDeskt
14ee0 6f 70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  op..            
14ef0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
14f00 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20     get { return 
14f10 6e 6f 44 65 73 6b 74 6f 70 3b 20 7d 0d 0a 20 20  noDesktop; }..  
14f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65                se
14f30 74 20 7b 20 6e 6f 44 65 73 6b 74 6f 70 20 3d 20  t { noDesktop = 
14f40 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20  value; }..      
14f50 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
14f60 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
14f70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14f80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14f90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14fa0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
14fb0 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
14fc0 65 20 62 6f 6f 6c 20 6e 6f 43 6f 6d 70 61 63 74  e bool noCompact
14fd0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ;..            p
14fe0 75 62 6c 69 63 20 62 6f 6f 6c 20 4e 6f 43 6f 6d  ublic bool NoCom
14ff0 70 61 63 74 0d 0a 20 20 20 20 20 20 20 20 20 20  pact..          
15000 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
15010 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72       get { retur
15020 6e 20 6e 6f 43 6f 6d 70 61 63 74 3b 20 7d 0d 0a  n noCompact; }..
15030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15040 73 65 74 20 7b 20 6e 6f 43 6f 6d 70 61 63 74 20  set { noCompact 
15050 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20  = value; }..    
15060 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
15070 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
15080 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15090 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
150a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
150b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
150c0 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
150d0 61 74 65 20 62 6f 6f 6c 20 6e 6f 4e 65 74 46 78  ate bool noNetFx
150e0 32 30 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  20;..           
150f0 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 4e 6f 4e   public bool NoN
15100 65 74 46 78 32 30 0d 0a 20 20 20 20 20 20 20 20  etFx20..        
15110 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
15120 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74         get { ret
15130 75 72 6e 20 6e 6f 4e 65 74 46 78 32 30 3b 20 7d  urn noNetFx20; }
15140 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
15150 20 20 73 65 74 20 7b 20 6e 6f 4e 65 74 46 78 32    set { noNetFx2
15160 30 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20  0 = value; }..  
15170 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
15180 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
15190 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
151a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
151b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
151c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
151d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
151e0 69 76 61 74 65 20 62 6f 6f 6c 20 6e 6f 4e 65 74  ivate bool noNet
151f0 46 78 34 30 3b 0d 0a 20 20 20 20 20 20 20 20 20  Fx40;..         
15200 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 4e     public bool N
15210 6f 4e 65 74 46 78 34 30 0d 0a 20 20 20 20 20 20  oNetFx40..      
15220 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
15230 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72           get { r
15240 65 74 75 72 6e 20 6e 6f 4e 65 74 46 78 34 30 3b  eturn noNetFx40;
15250 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
15260 20 20 20 20 73 65 74 20 7b 20 6e 6f 4e 65 74 46      set { noNetF
15270 78 34 30 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a  x40 = value; }..
15280 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
15290 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
152a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
152b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
152c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
152d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
152e0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
152f0 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 6e 6f 56  private bool noV
15300 73 32 30 30 38 3b 0d 0a 20 20 20 20 20 20 20 20  s2008;..        
15310 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20      public bool 
15320 4e 6f 56 73 32 30 30 38 0d 0a 20 20 20 20 20 20  NoVs2008..      
15330 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
15340 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72           get { r
15350 65 74 75 72 6e 20 6e 6f 56 73 32 30 30 38 3b 20  eturn noVs2008; 
15360 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
15370 20 20 20 73 65 74 20 7b 20 6e 6f 56 73 32 30 30     set { noVs200
15380 38 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20  8 = value; }..  
15390 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
153a0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
153b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
153c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
153d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
153e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
153f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
15400 69 76 61 74 65 20 62 6f 6f 6c 20 6e 6f 56 73 32  ivate bool noVs2
15410 30 31 30 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  010;..          
15420 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 4e 6f    public bool No
15430 56 73 32 30 31 30 0d 0a 20 20 20 20 20 20 20 20  Vs2010..        
15440 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
15450 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74         get { ret
15460 75 72 6e 20 6e 6f 56 73 32 30 31 30 3b 20 7d 0d  urn noVs2010; }.
15470 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
15480 20 73 65 74 20 7b 20 6e 6f 56 73 32 30 31 30 20   set { noVs2010 
15490 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20  = value; }..    
154a0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
154b0 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
154c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
154d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
154e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
154f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
15500 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
15510 61 74 65 20 62 6f 6f 6c 20 6e 6f 54 72 61 63 65  ate bool noTrace
15520 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ;..            p
15530 75 62 6c 69 63 20 62 6f 6f 6c 20 4e 6f 54 72 61  ublic bool NoTra
15540 63 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ce..            
15550 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
15560 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20     get { return 
15570 6e 6f 54 72 61 63 65 3b 20 7d 0d 0a 20 20 20 20  noTrace; }..    
15580 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
15590 7b 20 6e 6f 54 72 61 63 65 20 3d 20 76 61 6c 75  { noTrace = valu
155a0 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  e; }..          
155b0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
155c0 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
155d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
155e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
155f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15600 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
15610 20 20 20 20 20 20 70 72 69 76 61 74 65 20 62 6f        private bo
15620 6f 6c 20 6e 6f 43 6f 6e 73 6f 6c 65 3b 0d 0a 20  ol noConsole;.. 
15630 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
15640 63 20 62 6f 6f 6c 20 4e 6f 43 6f 6e 73 6f 6c 65  c bool NoConsole
15650 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
15660 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
15670 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 6e 6f   get { return no
15680 43 6f 6e 73 6f 6c 65 3b 20 7d 0d 0a 20 20 20 20  Console; }..    
15690 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
156a0 7b 20 6e 6f 43 6f 6e 73 6f 6c 65 20 3d 20 76 61  { noConsole = va
156b0 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  lue; }..        
156c0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
156d0 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
156e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
156f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15700 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15710 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
15720 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
15730 62 6f 6f 6c 20 6e 6f 4c 6f 67 3b 0d 0a 20 20 20  bool noLog;..   
15740 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
15750 62 6f 6f 6c 20 4e 6f 4c 6f 67 0d 0a 20 20 20 20  bool NoLog..    
15760 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
15770 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b             get {
15780 20 72 65 74 75 72 6e 20 6e 6f 4c 6f 67 3b 20 7d   return noLog; }
15790 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
157a0 20 20 73 65 74 20 7b 20 6e 6f 4c 6f 67 20 3d 20    set { noLog = 
157b0 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20  value; }..      
157c0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
157d0 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
157e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
157f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15800 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15810 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
15820 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
15830 65 20 62 6f 6f 6c 20 77 68 61 74 49 66 3b 0d 0a  e bool whatIf;..
15840 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
15850 69 63 20 62 6f 6f 6c 20 57 68 61 74 49 66 0d 0a  ic bool WhatIf..
15860 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
15870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67                 g
15880 65 74 20 7b 20 72 65 74 75 72 6e 20 77 68 61 74  et { return what
15890 49 66 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  If; }..         
158a0 20 20 20 20 20 20 20 73 65 74 20 7b 20 77 68 61         set { wha
158b0 74 49 66 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a  tIf = value; }..
158c0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
158d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
158e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
158f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15900 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15910 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15920 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
15930 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 76 65 72  private bool ver
15940 62 6f 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  bose;..         
15950 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 56     public bool V
15960 65 72 62 6f 73 65 0d 0a 20 20 20 20 20 20 20 20  erbose..        
15970 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
15980 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74         get { ret
15990 75 72 6e 20 76 65 72 62 6f 73 65 3b 20 7d 0d 0a  urn verbose; }..
159a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
159b0 73 65 74 20 7b 20 76 65 72 62 6f 73 65 20 3d 20  set { verbose = 
159c0 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20  value; }..      
159d0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
159e0 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
159f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15a00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15a10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15a20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
15a30 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
15a40 65 20 62 6f 6f 6c 20 63 6f 6e 66 69 72 6d 3b 0d  e bool confirm;.
15a50 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
15a60 6c 69 63 20 62 6f 6f 6c 20 43 6f 6e 66 69 72 6d  lic bool Confirm
15a70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
15a80 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
15a90 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 63 6f   get { return co
15aa0 6e 66 69 72 6d 3b 20 7d 0d 0a 20 20 20 20 20 20  nfirm; }..      
15ab0 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20            set { 
15ac0 63 6f 6e 66 69 72 6d 20 3d 20 76 61 6c 75 65 3b  confirm = value;
15ad0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
15ae0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  }..            #
15af0 65 6e 64 72 65 67 69 6f 6e 0d 0a 20 20 20 20 20  endregion..     
15b00 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65     }..        #e
15b10 6e 64 72 65 67 69 6f 6e 0d 0a 20 20 20 20 20 20  ndregion..      
15b20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
15b30 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
15b40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15b50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15b60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15b70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
15b80 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69  ...        #regi
15b90 6f 6e 20 50 72 69 76 61 74 65 20 43 6f 6e 73 74  on Private Const
15ba0 61 6e 74 20 44 61 74 61 0d 0a 20 20 20 20 20 20  ant Data..      
15bb0 20 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20    private const 
15bc0 73 74 72 69 6e 67 20 43 6f 72 65 46 69 6c 65 4e  string CoreFileN
15bd0 61 6d 65 20 3d 20 22 53 79 73 74 65 6d 2e 44 61  ame = "System.Da
15be0 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 22 3b 0d  ta.SQLite.dll";.
15bf0 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
15c00 20 63 6f 6e 73 74 20 73 74 72 69 6e 67 20 4c 69   const string Li
15c10 6e 71 46 69 6c 65 4e 61 6d 65 20 3d 20 22 53 79  nqFileName = "Sy
15c20 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65  stem.Data.SQLite
15c30 2e 4c 69 6e 71 2e 64 6c 6c 22 3b 0d 0a 20 20 20  .Linq.dll";..   
15c40 20 20 20 20 20 70 72 69 76 61 74 65 20 63 6f 6e       private con
15c50 73 74 20 73 74 72 69 6e 67 20 44 65 73 69 67 6e  st string Design
15c60 65 72 46 69 6c 65 4e 61 6d 65 20 3d 20 22 53 51  erFileName = "SQ
15c70 4c 69 74 65 2e 44 65 73 69 67 6e 65 72 2e 64 6c  Lite.Designer.dl
15c80 6c 22 3b 0d 0a 20 20 20 20 20 20 20 20 70 72 69  l";..        pri
15c90 76 61 74 65 20 63 6f 6e 73 74 20 73 74 72 69 6e  vate const strin
15ca0 67 20 50 72 6f 76 69 64 65 72 4e 61 6d 65 20 3d  g ProviderName =
15cb0 20 22 53 51 4c 69 74 65 20 44 61 74 61 20 50 72   "SQLite Data Pr
15cc0 6f 76 69 64 65 72 22 3b 0d 0a 20 20 20 20 20 20  ovider";..      
15cd0 20 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20    private const 
15ce0 73 74 72 69 6e 67 20 50 72 6f 6a 65 63 74 4e 61  string ProjectNa
15cf0 6d 65 20 3d 20 22 53 79 73 74 65 6d 2e 44 61 74  me = "System.Dat
15d00 61 2e 53 51 4c 69 74 65 22 3b 0d 0a 20 20 20 20  a.SQLite";..    
15d10 20 20 20 20 70 72 69 76 61 74 65 20 63 6f 6e 73      private cons
15d20 74 20 73 74 72 69 6e 67 20 4c 65 67 61 63 79 50  t string LegacyP
15d30 72 6f 6a 65 63 74 4e 61 6d 65 20 3d 20 22 53 51  rojectName = "SQ
15d40 4c 69 74 65 22 3b 0d 0a 20 20 20 20 20 20 20 20  Lite";..        
15d50 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20 73 74  private const st
15d60 72 69 6e 67 20 49 6e 76 61 72 69 61 6e 74 4e 61  ring InvariantNa
15d70 6d 65 20 3d 20 22 53 79 73 74 65 6d 2e 44 61 74  me = "System.Dat
15d80 61 2e 53 51 4c 69 74 65 22 3b 0d 0a 20 20 20 20  a.SQLite";..    
15d90 20 20 20 20 70 72 69 76 61 74 65 20 63 6f 6e 73      private cons
15da0 74 20 73 74 72 69 6e 67 20 46 61 63 74 6f 72 79  t string Factory
15db0 54 79 70 65 4e 61 6d 65 20 3d 20 22 53 79 73 74  TypeName = "Syst
15dc0 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 53  em.Data.SQLite.S
15dd0 51 4c 69 74 65 46 61 63 74 6f 72 79 22 3b 0d 0a  QLiteFactory";..
15de0 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
15df0 63 6f 6e 73 74 20 73 74 72 69 6e 67 20 44 65 73  const string Des
15e00 63 72 69 70 74 69 6f 6e 20 3d 20 22 2e 4e 45 54  cription = ".NET
15e10 20 46 72 61 6d 65 77 6f 72 6b 20 44 61 74 61 20   Framework Data 
15e20 50 72 6f 76 69 64 65 72 20 66 6f 72 20 53 51 4c  Provider for SQL
15e30 69 74 65 22 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ite";....       
15e40 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
15e50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15e60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15e70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15e80 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
15e90 20 20 20 20 70 72 69 76 61 74 65 20 63 6f 6e 73      private cons
15ea0 74 20 73 74 72 69 6e 67 20 4e 61 6d 65 41 6e 64  t string NameAnd
15eb0 56 61 6c 75 65 46 6f 72 6d 61 74 20 3d 20 22 7b  ValueFormat = "{
15ec0 30 7d 3a 20 7b 31 7d 22 3b 0d 0a 20 20 20 20 20  0}: {1}";..     
15ed0 20 20 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74     private const
15ee0 20 73 74 72 69 6e 67 20 4c 6f 67 46 69 6c 65 53   string LogFileS
15ef0 75 66 66 69 78 20 3d 20 22 2e 6c 6f 67 22 3b 0d  uffix = ".log";.
15f00 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
15f10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15f20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15f30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15f40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15f50 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72  //....        pr
15f60 69 76 61 74 65 20 73 74 61 74 69 63 20 72 65 61  ivate static rea
15f70 64 6f 6e 6c 79 20 73 74 72 69 6e 67 20 56 73 49  donly string VsI
15f80 64 46 6f 72 6d 61 74 20 3d 20 22 42 22 3b 0d 0a  dFormat = "B";..
15f90 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
15fa0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15fb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15fc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15fd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15fe0 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69  /....        pri
15ff0 76 61 74 65 20 73 74 61 74 69 63 20 72 65 61 64  vate static read
16000 6f 6e 6c 79 20 73 74 72 69 6e 67 20 46 72 61 6d  only string Fram
16010 65 77 6f 72 6b 4b 65 79 4e 61 6d 65 20 3d 0d 0a  eworkKeyName =..
16020 20 20 20 20 20 20 20 20 20 20 20 20 22 53 6f 66              "Sof
16030 74 77 61 72 65 5c 5c 4d 69 63 72 6f 73 6f 66 74  tware\\Microsoft
16040 5c 5c 2e 4e 45 54 46 72 61 6d 65 77 6f 72 6b 22  \\.NETFramework"
16050 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ;....        ///
16060 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16070 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16080 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16090 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
160a0 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
160b0 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 72  private static r
160c0 65 61 64 6f 6e 6c 79 20 73 74 72 69 6e 67 20 46  eadonly string F
160d0 72 61 6d 65 77 6f 72 6b 53 64 6b 4b 65 79 4e 61  rameworkSdkKeyNa
160e0 6d 65 20 3d 0d 0a 20 20 20 20 20 20 20 20 20 20  me =..          
160f0 20 20 22 53 6f 66 74 77 61 72 65 5c 5c 4d 69 63    "Software\\Mic
16100 72 6f 73 6f 66 74 5c 5c 4d 69 63 72 6f 73 6f 66  rosoft\\Microsof
16110 74 20 53 44 4b 73 5c 5c 2e 4e 45 54 46 72 61 6d  t SDKs\\.NETFram
16120 65 77 6f 72 6b 22 3b 0d 0a 0d 0a 20 20 20 20 20  ework";....     
16130 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
16140 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16150 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16160 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16170 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
16180 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
16190 61 74 69 63 20 72 65 61 64 6f 6e 6c 79 20 73 74  atic readonly st
161a0 72 69 6e 67 20 57 69 6e 64 6f 77 73 53 64 6b 4b  ring WindowsSdkK
161b0 65 79 4e 61 6d 65 20 3d 0d 0a 20 20 20 20 20 20  eyName =..      
161c0 20 20 20 20 20 20 22 53 6f 66 74 77 61 72 65 5c        "Software\
161d0 5c 4d 69 63 72 6f 73 6f 66 74 5c 5c 4d 69 63 72  \Microsoft\\Micr
161e0 6f 73 6f 66 74 20 53 44 4b 73 5c 5c 57 69 6e 64  osoft SDKs\\Wind
161f0 6f 77 73 22 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ows";....       
16200 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
16210 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16220 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16230 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16240 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
16250 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74      private stat
16260 69 63 20 72 65 61 64 6f 6e 6c 79 20 73 74 72 69  ic readonly stri
16270 6e 67 20 58 50 61 74 68 46 6f 72 41 64 64 45 6c  ng XPathForAddEl
16280 65 6d 65 6e 74 20 3d 0d 0a 20 20 20 20 20 20 20  ement =..       
16290 20 20 20 20 20 22 63 6f 6e 66 69 67 75 72 61 74       "configurat
162a0 69 6f 6e 2f 73 79 73 74 65 6d 2e 64 61 74 61 2f  ion/system.data/
162b0 44 62 50 72 6f 76 69 64 65 72 46 61 63 74 6f 72  DbProviderFactor
162c0 69 65 73 2f 61 64 64 5b 40 69 6e 76 61 72 69 61  ies/add[@invaria
162d0 6e 74 3d 5c 22 7b 30 7d 5c 22 5d 22 3b 0d 0a 0d  nt=\"{0}\"]";...
162e0 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
162f0 20 73 74 61 74 69 63 20 72 65 61 64 6f 6e 6c 79   static readonly
16300 20 73 74 72 69 6e 67 20 58 50 61 74 68 46 6f 72   string XPathFor
16310 52 65 6d 6f 76 65 45 6c 65 6d 65 6e 74 20 3d 0d  RemoveElement =.
16320 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 63 6f  .            "co
16330 6e 66 69 67 75 72 61 74 69 6f 6e 2f 73 79 73 74  nfiguration/syst
16340 65 6d 2e 64 61 74 61 2f 44 62 50 72 6f 76 69 64  em.data/DbProvid
16350 65 72 46 61 63 74 6f 72 69 65 73 2f 72 65 6d 6f  erFactories/remo
16360 76 65 5b 40 69 6e 76 61 72 69 61 6e 74 3d 5c 22  ve[@invariant=\"
16370 7b 30 7d 5c 22 5d 22 3b 0d 0a 20 20 20 20 20 20  {0}\"]";..      
16380 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
16390 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
163a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
163b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
163c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
163d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
163e0 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69  ...        #regi
163f0 6f 6e 20 50 72 69 76 61 74 65 20 44 61 74 61 0d  on Private Data.
16400 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
16410 20 73 74 61 74 69 63 20 41 73 73 65 6d 62 6c 79   static Assembly
16420 20 74 68 69 73 41 73 73 65 6d 62 6c 79 20 3d 20   thisAssembly = 
16430 41 73 73 65 6d 62 6c 79 2e 47 65 74 45 78 65 63  Assembly.GetExec
16440 75 74 69 6e 67 41 73 73 65 6d 62 6c 79 28 29 3b  utingAssembly();
16450 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  ....        priv
16460 61 74 65 20 73 74 61 74 69 63 20 73 74 72 69 6e  ate static strin
16470 67 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 20  g traceCategory 
16480 3d 20 50 61 74 68 2e 47 65 74 46 69 6c 65 4e 61  = Path.GetFileNa
16490 6d 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me(..           
164a0 20 74 68 69 73 41 73 73 65 6d 62 6c 79 2e 4c 6f   thisAssembly.Lo
164b0 63 61 74 69 6f 6e 29 3b 0d 0a 0d 0a 20 20 20 20  cation);....    
164c0 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74      private stat
164d0 69 63 20 54 72 61 63 65 43 61 6c 6c 62 61 63 6b  ic TraceCallback
164e0 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 20 3d   traceCallback =
164f0 20 41 70 70 54 72 61 63 65 3b 0d 0a 0d 0a 20 20   AppTrace;....  
16500 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
16510 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16520 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16530 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16540 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
16550 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
16560 20 73 74 61 74 69 63 20 52 65 67 69 73 74 72 79   static Registry
16570 4b 65 79 20 66 72 61 6d 65 77 6f 72 6b 52 6f 6f  Key frameworkRoo
16580 74 4b 65 79 3b 0d 0a 20 20 20 20 20 20 20 20 70  tKey;..        p
16590 72 69 76 61 74 65 20 73 74 61 74 69 63 20 53 74  rivate static St
165a0 72 69 6e 67 4c 69 73 74 20 66 72 61 6d 65 77 6f  ringList framewo
165b0 72 6b 4e 61 6d 65 4c 69 73 74 3b 0d 0a 20 20 20  rkNameList;..   
165c0 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61       private sta
165d0 74 69 63 20 56 65 72 73 69 6f 6e 4d 61 70 20 66  tic VersionMap f
165e0 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 4d  rameworkVersionM
165f0 61 70 3b 0d 0a 20 20 20 20 20 20 20 20 70 72 69  ap;..        pri
16600 76 61 74 65 20 73 74 61 74 69 63 20 53 74 72 69  vate static Stri
16610 6e 67 4c 69 73 74 20 70 6c 61 74 66 6f 72 6d 4e  ngList platformN
16620 61 6d 65 4c 69 73 74 3b 0d 0a 0d 0a 20 20 20 20  ameList;....    
16630 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
16640 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16650 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16660 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16670 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
16680 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
16690 74 61 74 69 63 20 52 65 67 69 73 74 72 79 4b 65  tatic RegistryKe
166a0 79 20 76 73 52 6f 6f 74 4b 65 79 3b 0d 0a 20 20  y vsRootKey;..  
166b0 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
166c0 61 74 69 63 20 56 65 72 73 69 6f 6e 4c 69 73 74  atic VersionList
166d0 20 76 73 56 65 72 73 69 6f 6e 4c 69 73 74 3b 0d   vsVersionList;.
166e0 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
166f0 20 73 74 61 74 69 63 20 56 65 72 73 69 6f 6e 4c   static VersionL
16700 69 73 74 4d 61 70 20 76 73 46 72 61 6d 65 77 6f  istMap vsFramewo
16710 72 6b 56 65 72 73 69 6f 6e 4d 61 70 3b 0d 0a 20  rkVersionMap;.. 
16720 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
16730 74 61 74 69 63 20 47 75 69 64 3f 20 76 73 50 61  tatic Guid? vsPa
16740 63 6b 61 67 65 49 64 3b 0d 0a 20 20 20 20 20 20  ckageId;..      
16750 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
16760 20 47 75 69 64 3f 20 76 73 53 65 72 76 69 63 65   Guid? vsService
16770 49 64 3b 0d 0a 20 20 20 20 20 20 20 20 70 72 69  Id;..        pri
16780 76 61 74 65 20 73 74 61 74 69 63 20 47 75 69 64  vate static Guid
16790 3f 20 76 73 44 61 74 61 53 6f 75 72 63 65 73 49  ? vsDataSourcesI
167a0 64 3b 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  d;..        priv
167b0 61 74 65 20 73 74 61 74 69 63 20 47 75 69 64 3f  ate static Guid?
167c0 20 76 73 44 61 74 61 50 72 6f 76 69 64 65 72 49   vsDataProviderI
167d0 64 3b 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  d;..        priv
167e0 61 74 65 20 73 74 61 74 69 63 20 47 75 69 64 3f  ate static Guid?
167f0 20 76 73 41 64 6f 4e 65 74 54 65 63 68 6e 6f 6c   vsAdoNetTechnol
16800 6f 67 79 49 64 3b 0d 0a 20 20 20 20 20 20 20 20  ogyId;..        
16810 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
16820 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
16830 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16840 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16850 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16860 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
16870 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e  .        #region
16880 20 54 72 61 63 65 20 48 61 6e 64 6c 69 6e 67 0d   Trace Handling.
16890 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
168a0 20 73 74 61 74 69 63 20 73 74 72 69 6e 67 20 47   static string G
168b0 65 74 4c 6f 67 46 69 6c 65 4e 61 6d 65 28 29 0d  etLogFileName().
168c0 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
168d0 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 72          string r
168e0 65 73 75 6c 74 20 3d 20 50 61 74 68 2e 47 65 74  esult = Path.Get
168f0 54 65 6d 70 46 69 6c 65 4e 61 6d 65 28 29 3b 20  TempFileName(); 
16900 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 0d 0a 20  /* throw */.... 
16910 20 20 20 20 20 20 20 20 20 20 20 46 69 6c 65 2e             File.
16920 4d 6f 76 65 28 72 65 73 75 6c 74 2c 20 72 65 73  Move(result, res
16930 75 6c 74 20 2b 20 4c 6f 67 46 69 6c 65 53 75 66  ult + LogFileSuf
16940 66 69 78 29 3b 20 2f 2a 20 74 68 72 6f 77 20 2a  fix); /* throw *
16950 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  /..            r
16960 65 73 75 6c 74 20 2b 3d 20 4c 6f 67 46 69 6c 65  esult += LogFile
16970 53 75 66 66 69 78 3b 0d 0a 0d 0a 20 20 20 20 20  Suffix;....     
16980 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 72 65         return re
16990 73 75 6c 74 3b 0d 0a 20 20 20 20 20 20 20 20 7d  sult;..        }
169a0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
169b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
169c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
169d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
169e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
169f0 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70  ///....        p
16a00 72 69 76 61 74 65 20 73 74 61 74 69 63 20 76 6f  rivate static vo
16a10 69 64 20 41 70 70 54 72 61 63 65 28 0d 0a 20 20  id AppTrace(..  
16a20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
16a30 20 6d 65 73 73 61 67 65 2c 0d 0a 20 20 20 20 20   message,..     
16a40 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 63 61         string ca
16a50 74 65 67 6f 72 79 0d 0a 20 20 20 20 20 20 20 20  tegory..        
16a60 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b      )..        {
16a70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 54 72  ..            Tr
16a80 61 63 65 4f 70 73 2e 54 72 61 63 65 43 6f 72 65  aceOps.TraceCore
16a90 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d  (String.Format(.
16aa0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
16ab0 20 54 72 61 63 65 4f 70 73 2e 54 72 61 63 65 46   TraceOps.TraceF
16ac0 6f 72 6d 61 74 2c 20 54 72 61 63 65 4f 70 73 2e  ormat, TraceOps.
16ad0 4e 65 78 74 49 64 28 29 2c 0d 0a 20 20 20 20 20  NextId(),..     
16ae0 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
16af0 4f 70 73 2e 54 69 6d 65 53 74 61 6d 70 28 44 61  Ops.TimeStamp(Da
16b00 74 65 54 69 6d 65 2e 55 74 63 4e 6f 77 29 2c 20  teTime.UtcNow), 
16b10 6d 65 73 73 61 67 65 29 2c 20 63 61 74 65 67 6f  message), catego
16b20 72 79 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  ry);..        }.
16b30 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67  .        #endreg
16b40 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  ion....        /
16b50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16b60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16b70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16b80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16b90 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
16ba0 20 20 23 72 65 67 69 6f 6e 20 47 65 6e 65 72 69    #region Generi
16bb0 63 20 53 74 72 69 6e 67 20 48 61 6e 64 6c 69 6e  c String Handlin
16bc0 67 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  g..        priva
16bd0 74 65 20 73 74 61 74 69 63 20 73 74 72 69 6e 67  te static string
16be0 20 46 6f 72 44 69 73 70 6c 61 79 28 0d 0a 20 20   ForDisplay(..  
16bf0 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74            object
16c00 20 76 61 6c 75 65 0d 0a 20 20 20 20 20 20 20 20   value..        
16c10 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b      )..        {
16c20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
16c30 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29   (value == null)
16c40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
16c50 20 20 72 65 74 75 72 6e 20 22 3c 6e 75 6c 6c 3e    return "<null>
16c60 22 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  ";....          
16c70 20 20 73 74 72 69 6e 67 20 72 65 73 75 6c 74 3b    string result;
16c80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 54 79  ..            Ty
16c90 70 65 20 74 79 70 65 20 3d 20 76 61 6c 75 65 2e  pe type = value.
16ca0 47 65 74 54 79 70 65 28 29 3b 0d 0a 0d 0a 20 20  GetType();....  
16cb0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 74 79            if (ty
16cc0 70 65 20 3d 3d 20 74 79 70 65 6f 66 28 58 6d 6c  pe == typeof(Xml
16cd0 45 6c 65 6d 65 6e 74 29 29 0d 0a 20 20 20 20 20  Element))..     
16ce0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
16cf0 20 20 20 20 20 20 20 20 20 20 58 6d 6c 45 6c 65            XmlEle
16d00 6d 65 6e 74 20 65 6c 65 6d 65 6e 74 20 3d 20 28  ment element = (
16d10 58 6d 6c 45 6c 65 6d 65 6e 74 29 76 61 6c 75 65  XmlElement)value
16d20 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
16d30 20 20 20 20 20 72 65 73 75 6c 74 20 3d 20 65 6c       result = el
16d40 65 6d 65 6e 74 2e 4f 75 74 65 72 58 6d 6c 3b 0d  ement.OuterXml;.
16d50 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
16d60 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65              else
16d70 20 69 66 20 28 74 79 70 65 20 3d 3d 20 74 79 70   if (type == typ
16d80 65 6f 66 28 56 65 72 73 69 6f 6e 29 29 0d 0a 20  eof(Version)).. 
16d90 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
16da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 56 65                Ve
16db0 72 73 69 6f 6e 20 76 65 72 73 69 6f 6e 20 3d 20  rsion version = 
16dc0 28 56 65 72 73 69 6f 6e 29 76 61 6c 75 65 3b 0d  (Version)value;.
16dd0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
16de0 20 20 20 72 65 73 75 6c 74 20 3d 20 53 74 72 69     result = Stri
16df0 6e 67 2e 46 6f 72 6d 61 74 28 22 76 7b 30 7d 22  ng.Format("v{0}"
16e00 2c 20 76 65 72 73 69 6f 6e 29 3b 0d 0a 20 20 20  , version);..   
16e10 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
16e20 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20          else..  
16e30 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
16e40 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 73               res
16e50 75 6c 74 20 3d 20 76 61 6c 75 65 2e 54 6f 53 74  ult = value.ToSt
16e60 72 69 6e 67 28 29 3b 0d 0a 0d 0a 20 20 20 20 20  ring();....     
16e70 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 72             if (r
16e80 65 73 75 6c 74 2e 4c 65 6e 67 74 68 20 3d 3d 20  esult.Length == 
16e90 30 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  0)..            
16ea0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 22          return "
16eb0 3c 65 6d 70 74 79 3e 22 3b 0d 0a 0d 0a 20 20 20  <empty>";....   
16ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 73               res
16ed0 75 6c 74 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72  ult = String.For
16ee0 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
16ef0 20 20 20 20 20 20 20 20 20 20 74 79 70 65 2e 49            type.I
16f00 73 53 75 62 63 6c 61 73 73 4f 66 28 74 79 70 65  sSubclassOf(type
16f10 6f 66 28 56 61 6c 75 65 54 79 70 65 29 29 20 3f  of(ValueType)) ?
16f20 20 22 7b 30 7d 22 20 3a 20 22 5c 22 7b 30 7d 5c   "{0}" : "\"{0}\
16f30 22 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  "",..           
16f40 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 29           result)
16f50 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
16f60 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
16f70 72 65 74 75 72 6e 20 72 65 73 75 6c 74 3b 0d 0a  return result;..
16f80 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
16f90 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
16fa0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
16fb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16fc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16fd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16fe0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16ff0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67  ....        #reg
17000 69 6f 6e 20 2e 4e 45 54 20 46 72 61 6d 65 77 6f  ion .NET Framewo
17010 72 6b 20 48 61 6e 64 6c 69 6e 67 0d 0a 20 20 20  rk Handling..   
17020 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61       private sta
17030 74 69 63 20 73 74 72 69 6e 67 20 47 65 74 46 72  tic string GetFr
17040 61 6d 65 77 6f 72 6b 44 69 72 65 63 74 6f 72 79  ameworkDirectory
17050 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 52  (..            R
17060 65 67 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b  egistryKey rootK
17070 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey,..           
17080 20 56 65 72 73 69 6f 6e 20 66 72 61 6d 65 77 6f   Version framewo
17090 72 6b 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20  rkVersion,..    
170a0 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61          bool wha
170b0 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf,..          
170c0 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 0d 0a    bool verbose..
170d0 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
170e0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
170f0 20 20 20 20 20 20 75 73 69 6e 67 20 28 4d 6f 63        using (Moc
17100 6b 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65 79  kRegistryKey key
17110 20 3d 20 52 65 67 69 73 74 72 79 48 65 6c 70 65   = RegistryHelpe
17120 72 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20  r.OpenSubKey(.. 
17130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17140 20 20 20 72 6f 6f 74 4b 65 79 2c 20 46 72 61 6d     rootKey, Fram
17150 65 77 6f 72 6b 4b 65 79 4e 61 6d 65 2c 20 66 61  eworkKeyName, fa
17160 6c 73 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72  lse, whatIf, ver
17170 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20  bose))..        
17180 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
17190 20 20 20 20 20 20 20 69 66 20 28 6b 65 79 20 3d         if (key =
171a0 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
171b0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
171c0 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20  urn null;....   
171d0 20 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a               obj
171e0 65 63 74 20 76 61 6c 75 65 20 3d 20 52 65 67 69  ect value = Regi
171f0 73 74 72 79 48 65 6c 70 65 72 2e 47 65 74 56 61  stryHelper.GetVa
17200 6c 75 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  lue(..          
17210 20 20 20 20 20 20 20 20 20 20 6b 65 79 2c 20 22            key, "
17220 49 6e 73 74 61 6c 6c 52 6f 6f 74 22 2c 20 6e 75  InstallRoot", nu
17230 6c 6c 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62  ll, whatIf, verb
17240 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ose);....       
17250 20 20 20 20 20 20 20 20 20 69 66 20 28 21 28 76           if (!(v
17260 61 6c 75 65 20 69 73 20 73 74 72 69 6e 67 29 29  alue is string))
17270 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
17280 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c        return nul
17290 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  l;....          
172a0 20 20 20 20 20 20 72 65 74 75 72 6e 20 50 61 74        return Pat
172b0 68 2e 43 6f 6d 62 69 6e 65 28 0d 0a 20 20 20 20  h.Combine(..    
172c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
172d0 28 73 74 72 69 6e 67 29 76 61 6c 75 65 2c 20 53  (string)value, S
172e0 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22 76 7b  tring.Format("v{
172f0 30 7d 22 2c 20 66 72 61 6d 65 77 6f 72 6b 56 65  0}", frameworkVe
17300 72 73 69 6f 6e 29 29 3b 0d 0a 20 20 20 20 20 20  rsion));..      
17310 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
17320 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f   }....        //
17330 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17340 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17350 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17360 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17370 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
17380 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
17390 73 74 72 69 6e 67 20 47 65 74 53 64 6b 42 69 6e  string GetSdkBin
173a0 61 72 79 46 69 6c 65 4e 61 6d 65 28 0d 0a 20 20  aryFileName(..  
173b0 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74            Regist
173c0 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a  ryKey rootKey,..
173d0 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
173e0 6e 67 20 66 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20  ng fileName,..  
173f0 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77            bool w
17400 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20  hatIf,..        
17410 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65      bool verbose
17420 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d  ..            ).
17430 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
17440 20 20 20 20 20 20 20 20 53 74 72 69 6e 67 44 69          StringDi
17450 63 74 69 6f 6e 61 72 79 20 72 65 73 75 6c 74 73  ctionary results
17460 20 3d 20 6e 65 77 20 53 74 72 69 6e 67 44 69 63   = new StringDic
17470 74 69 6f 6e 61 72 79 28 29 3b 0d 0a 0d 0a 20 20  tionary();....  
17480 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
17490 5b 5d 20 6b 65 79 4e 61 6d 65 73 20 3d 20 7b 0d  [] keyNames = {.
174a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
174b0 20 46 72 61 6d 65 77 6f 72 6b 4b 65 79 4e 61 6d   FrameworkKeyNam
174c0 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
174d0 20 20 20 20 46 72 61 6d 65 77 6f 72 6b 53 64 6b      FrameworkSdk
174e0 4b 65 79 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20  KeyName,..      
174f0 20 20 20 20 20 20 20 20 20 20 57 69 6e 64 6f 77            Window
17500 73 53 64 6b 4b 65 79 4e 61 6d 65 0d 0a 20 20 20  sSdkKeyName..   
17510 20 20 20 20 20 20 20 20 20 7d 3b 0d 0a 0d 0a 20           };.... 
17520 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
17530 67 5b 5d 20 76 61 6c 75 65 4e 61 6d 65 73 20 3d  g[] valueNames =
17540 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
17550 20 20 20 20 22 73 64 6b 49 6e 73 74 61 6c 6c 52      "sdkInstallR
17560 6f 6f 74 76 32 2e 30 22 2c 0d 0a 20 20 20 20 20  ootv2.0",..     
17570 20 20 20 20 20 20 20 20 20 20 20 22 49 6e 73 74             "Inst
17580 61 6c 6c 61 74 69 6f 6e 46 6f 6c 64 65 72 22 2c  allationFolder",
17590 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
175a0 20 20 22 49 6e 73 74 61 6c 6c 61 74 69 6f 6e 46    "InstallationF
175b0 6f 6c 64 65 72 22 0d 0a 20 20 20 20 20 20 20 20  older"..        
175c0 20 20 20 20 7d 3b 0d 0a 0d 0a 20 20 20 20 20 20      };....      
175d0 20 20 20 20 20 20 62 6f 6f 6c 5b 5d 20 75 73 65        bool[] use
175e0 53 75 62 4b 65 79 73 20 3d 20 7b 0d 0a 20 20 20  SubKeys = {..   
175f0 20 20 20 20 20 20 20 20 20 20 20 20 20 66 61 6c               fal
17600 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se,..           
17610 20 20 20 20 20 74 72 75 65 2c 0d 0a 20 20 20 20       true,..    
17620 20 20 20 20 20 20 20 20 20 20 20 20 74 72 75 65              true
17630 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 3b  ..            };
17640 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
17650 66 6f 72 20 28 69 6e 74 20 69 6e 64 65 78 20 3d  for (int index =
17660 20 30 3b 20 69 6e 64 65 78 20 3c 20 6b 65 79 4e   0; index < keyN
17670 61 6d 65 73 2e 4c 65 6e 67 74 68 3b 20 69 6e 64  ames.Length; ind
17680 65 78 2b 2b 29 0d 0a 20 20 20 20 20 20 20 20 20  ex++)..         
17690 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
176a0 20 20 20 20 20 20 75 73 69 6e 67 20 28 4d 6f 63        using (Moc
176b0 6b 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65 79  kRegistryKey key
176c0 20 3d 20 52 65 67 69 73 74 72 79 48 65 6c 70 65   = RegistryHelpe
176d0 72 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20  r.OpenSubKey(.. 
176e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
176f0 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20         rootKey, 
17700 6b 65 79 4e 61 6d 65 73 5b 69 6e 64 65 78 5d 2c  keyNames[index],
17710 20 66 61 6c 73 65 2c 20 77 68 61 74 49 66 2c 20   false, whatIf, 
17720 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20  verbose))..     
17730 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
17740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17750 20 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c    if (key == nul
17760 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
17770 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74              cont
17780 69 6e 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  inue;....       
17790 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
177a0 28 75 73 65 53 75 62 4b 65 79 73 5b 69 6e 64 65  (useSubKeys[inde
177b0 78 5d 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  x])..           
177c0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
177d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
177e0 20 20 20 20 66 6f 72 65 61 63 68 20 28 73 74 72      foreach (str
177f0 69 6e 67 20 73 75 62 4b 65 79 4e 61 6d 65 20 69  ing subKeyName i
17800 6e 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72  n RegistryHelper
17810 2e 47 65 74 53 75 62 4b 65 79 4e 61 6d 65 73 28  .GetSubKeyNames(
17820 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
17830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17840 20 20 6b 65 79 2c 20 77 68 61 74 49 66 2c 20 76    key, whatIf, v
17850 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20  erbose))..      
17860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17870 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
17880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17890 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69   using (MockRegi
178a0 73 74 72 79 4b 65 79 20 73 75 62 4b 65 79 20 3d  stryKey subKey =
178b0 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e   RegistryHelper.
178c0 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20  OpenSubKey(..   
178d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
178e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
178f0 20 6b 65 79 2c 20 73 75 62 4b 65 79 4e 61 6d 65   key, subKeyName
17900 2c 20 66 61 6c 73 65 2c 20 77 68 61 74 49 66 2c  , false, whatIf,
17910 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20   verbose))..    
17920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17930 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
17940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17950 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73             if (s
17960 75 62 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  ubKey == null)..
17970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17990 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 0d      continue;...
179a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
179b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
179c0 20 6f 62 6a 65 63 74 20 76 61 6c 75 65 20 3d 20   object value = 
179d0 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 47  RegistryHelper.G
179e0 65 74 56 61 6c 75 65 28 0d 0a 20 20 20 20 20 20  etValue(..      
179f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 75                su
17a10 62 4b 65 79 2c 20 76 61 6c 75 65 4e 61 6d 65 73  bKey, valueNames
17a20 5b 69 6e 64 65 78 5d 2c 20 6e 75 6c 6c 2c 20 77  [index], null, w
17a30 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20  hatIf,..        
17a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17a50 20 20 20 20 20 20 20 20 20 20 20 20 76 65 72 62              verb
17a60 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ose);....       
17a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17a80 20 20 20 20 20 20 20 20 20 69 66 20 28 21 28 76           if (!(v
17a90 61 6c 75 65 20 69 73 20 73 74 72 69 6e 67 29 29  alue is string))
17aa0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
17ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17ac0 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d        continue;.
17ad0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
17ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17af0 20 20 20 73 74 72 69 6e 67 20 70 61 74 68 20 3d     string path =
17b00 20 28 73 74 72 69 6e 67 29 76 61 6c 75 65 3b 0d   (string)value;.
17b10 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
17b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17b30 20 20 20 69 66 20 28 21 44 69 72 65 63 74 6f 72     if (!Director
17b40 79 2e 45 78 69 73 74 73 28 70 61 74 68 29 29 0d  y.Exists(path)).
17b50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
17b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17b70 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a       continue;..
17b80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
17b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17ba0 20 20 70 61 74 68 20 3d 20 50 61 74 68 2e 43 6f    path = Path.Co
17bb0 6d 62 69 6e 65 28 70 61 74 68 2c 20 22 62 69 6e  mbine(path, "bin
17bc0 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ");....         
17bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17be0 20 20 20 20 20 20 20 69 66 20 28 21 44 69 72 65         if (!Dire
17bf0 63 74 6f 72 79 2e 45 78 69 73 74 73 28 70 61 74  ctory.Exists(pat
17c00 68 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  h))..           
17c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17c20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75           continu
17c30 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
17c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17c50 20 20 20 20 20 20 69 66 20 28 53 74 72 69 6e 67        if (String
17c60 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 66  .IsNullOrEmpty(f
17c70 69 6c 65 4e 61 6d 65 29 29 0d 0a 20 20 20 20 20  ileName))..     
17c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17c90 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
17ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17cc0 20 20 72 65 73 75 6c 74 73 2e 41 64 64 28 73 75    results.Add(su
17cd0 62 4b 65 79 2e 4e 61 6d 65 2c 20 70 61 74 68 29  bKey.Name, path)
17ce0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
17cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17d00 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b         continue;
17d10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
17d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17d30 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
17d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17d50 20 20 20 20 20 20 20 70 61 74 68 20 3d 20 50 61         path = Pa
17d60 74 68 2e 43 6f 6d 62 69 6e 65 28 70 61 74 68 2c  th.Combine(path,
17d70 20 66 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20   fileName);.... 
17d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
17da0 66 20 28 46 69 6c 65 2e 45 78 69 73 74 73 28 70  f (File.Exists(p
17db0 61 74 68 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ath))..         
17dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17dd0 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75 6c             resul
17de0 74 73 2e 41 64 64 28 73 75 62 4b 65 79 2e 4e 61  ts.Add(subKey.Na
17df0 6d 65 2c 20 70 61 74 68 29 3b 0d 0a 20 20 20 20  me, path);..    
17e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17e10 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
17e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17e30 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
17e40 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
17e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17e60 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20   else..         
17e70 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
17e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17e90 20 20 20 20 20 20 6f 62 6a 65 63 74 20 76 61 6c        object val
17ea0 75 65 20 3d 20 52 65 67 69 73 74 72 79 48 65 6c  ue = RegistryHel
17eb0 70 65 72 2e 47 65 74 56 61 6c 75 65 28 0d 0a 20  per.GetValue(.. 
17ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17ed0 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 2c 20             key, 
17ee0 76 61 6c 75 65 4e 61 6d 65 73 5b 69 6e 64 65 78  valueNames[index
17ef0 5d 2c 20 6e 75 6c 6c 2c 20 77 68 61 74 49 66 2c  ], null, whatIf,
17f00 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20   verbose);....  
17f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17f20 20 20 20 20 20 20 69 66 20 28 21 28 76 61 6c 75        if (!(valu
17f30 65 20 69 73 20 73 74 72 69 6e 67 29 29 0d 0a 20  e is string)).. 
17f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17f50 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69             conti
17f60 6e 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  nue;....        
17f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17f80 73 74 72 69 6e 67 20 70 61 74 68 20 3d 20 28 73  string path = (s
17f90 74 72 69 6e 67 29 76 61 6c 75 65 3b 0d 0a 0d 0a  tring)value;....
17fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17fb0 20 20 20 20 20 20 20 20 69 66 20 28 21 44 69 72          if (!Dir
17fc0 65 63 74 6f 72 79 2e 45 78 69 73 74 73 28 70 61  ectory.Exists(pa
17fd0 74 68 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  th))..          
17fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17ff0 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 0d 0a 20    continue;.... 
18000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18010 20 20 20 20 20 20 20 70 61 74 68 20 3d 20 50 61         path = Pa
18020 74 68 2e 43 6f 6d 62 69 6e 65 28 70 61 74 68 2c  th.Combine(path,
18030 20 22 62 69 6e 22 29 3b 0d 0a 0d 0a 20 20 20 20   "bin");....    
18040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18050 20 20 20 20 69 66 20 28 21 44 69 72 65 63 74 6f      if (!Directo
18060 72 79 2e 45 78 69 73 74 73 28 70 61 74 68 29 29  ry.Exists(path))
18070 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
18080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
18090 6e 74 69 6e 75 65 3b 0d 0a 0d 0a 20 20 20 20 20  ntinue;....     
180a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
180b0 20 20 20 69 66 20 28 53 74 72 69 6e 67 2e 49 73     if (String.Is
180c0 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 66 69 6c 65  NullOrEmpty(file
180d0 4e 61 6d 65 29 29 0d 0a 20 20 20 20 20 20 20 20  Name))..        
180e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
180f0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
18100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
18110 65 73 75 6c 74 73 2e 41 64 64 28 6b 65 79 2e 4e  esults.Add(key.N
18120 61 6d 65 2c 20 70 61 74 68 29 3b 0d 0a 20 20 20  ame, path);..   
18130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18140 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75           continu
18150 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
18160 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
18170 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
18180 20 20 20 20 20 20 20 20 20 70 61 74 68 20 3d 20           path = 
18190 50 61 74 68 2e 43 6f 6d 62 69 6e 65 28 70 61 74  Path.Combine(pat
181a0 68 2c 20 66 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d  h, fileName);...
181b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
181c0 20 20 20 20 20 20 20 20 20 69 66 20 28 46 69 6c           if (Fil
181d0 65 2e 45 78 69 73 74 73 28 70 61 74 68 29 29 0d  e.Exists(path)).
181e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
181f0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 73               res
18200 75 6c 74 73 2e 41 64 64 28 6b 65 79 2e 4e 61 6d  ults.Add(key.Nam
18210 65 2c 20 70 61 74 68 29 3b 0d 0a 20 20 20 20 20  e, path);..     
18220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
18230 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
18240 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
18250 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
18260 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
18270 20 20 2f 2f 20 4e 4f 54 45 3a 20 49 66 20 77 65    // NOTE: If we
18280 20 66 6f 75 6e 64 20 73 6f 6d 65 20 72 65 73 75   found some resu
18290 6c 74 73 2c 20 72 65 74 75 72 6e 20 74 68 65 20  lts, return the 
182a0 6c 61 73 74 20 28 6c 61 74 65 73 74 29 20 6f 6e  last (latest) on
182b0 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e...            
182c0 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
182d0 69 66 20 28 72 65 73 75 6c 74 73 2e 43 6f 75 6e  if (results.Coun
182e0 74 20 3e 20 30 29 0d 0a 20 20 20 20 20 20 20 20  t > 0)..        
182f0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 72          return r
18300 65 73 75 6c 74 73 5b 6e 65 77 20 53 74 72 69 6e  esults[new Strin
18310 67 4c 69 73 74 28 72 65 73 75 6c 74 73 2e 4b 65  gList(results.Ke
18320 79 73 29 5b 72 65 73 75 6c 74 73 2e 43 6f 75 6e  ys)[results.Coun
18330 74 20 2d 20 31 5d 5d 3b 0d 0a 0d 0a 20 20 20 20  t - 1]];....    
18340 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e          return n
18350 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  ull;..        }.
18360 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67  .        #endreg
18370 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  ion....        /
18380 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18390 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
183a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
183b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
183c0 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
183d0 20 20 23 72 65 67 69 6f 6e 20 50 65 72 2d 46 72    #region Per-Fr
183e0 61 6d 65 77 6f 72 6b 2f 50 6c 61 74 66 6f 72 6d  amework/Platform
183f0 20 48 61 6e 64 6c 69 6e 67 0d 0a 20 20 20 20 20   Handling..     
18400 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
18410 63 20 76 6f 69 64 20 52 65 73 65 74 41 6c 6c 46  c void ResetAllF
18420 72 61 6d 65 77 6f 72 6b 73 28 29 0d 0a 20 20 20  rameworks()..   
18430 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
18440 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 52 6f 6f      frameworkRoo
18450 74 4b 65 79 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a  tKey = null;....
18460 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
18470 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 4c 69 73  frameworkNameLis
18480 74 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  t != null)..    
18490 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
184a0 20 20 20 20 20 20 20 20 20 20 20 66 72 61 6d 65             frame
184b0 77 6f 72 6b 4e 61 6d 65 4c 69 73 74 2e 43 6c 65  workNameList.Cle
184c0 61 72 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ar();..         
184d0 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b         framework
184e0 4e 61 6d 65 4c 69 73 74 20 3d 20 6e 75 6c 6c 3b  NameList = null;
184f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
18500 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
18510 66 20 28 66 72 61 6d 65 77 6f 72 6b 56 65 72 73  f (frameworkVers
18520 69 6f 6e 4d 61 70 20 21 3d 20 6e 75 6c 6c 29 0d  ionMap != null).
18530 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
18540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18550 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e  frameworkVersion
18560 4d 61 70 2e 43 6c 65 61 72 28 29 3b 0d 0a 20 20  Map.Clear();..  
18570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 72                fr
18580 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 4d 61  ameworkVersionMa
18590 70 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20  p = null;..     
185a0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
185b0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f    }....        /
185c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
185d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
185e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
185f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18600 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
18610 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
18620 20 76 6f 69 64 20 49 6e 69 74 69 61 6c 69 7a 65   void Initialize
18630 41 6c 6c 46 72 61 6d 65 77 6f 72 6b 73 28 0d 0a  AllFrameworks(..
18640 20 20 20 20 20 20 20 20 20 20 20 20 43 6f 6e 66              Conf
18650 69 67 75 72 61 74 69 6f 6e 20 63 6f 6e 66 69 67  iguration config
18660 75 72 61 74 69 6f 6e 0d 0a 20 20 20 20 20 20 20  uration..       
18670 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
18680 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  {..            i
18690 66 20 28 66 72 61 6d 65 77 6f 72 6b 52 6f 6f 74  f (frameworkRoot
186a0 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  Key == null)..  
186b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 72                fr
186c0 61 6d 65 77 6f 72 6b 52 6f 6f 74 4b 65 79 20 3d  ameworkRootKey =
186d0 20 52 65 67 69 73 74 72 79 2e 4c 6f 63 61 6c 4d   Registry.LocalM
186e0 61 63 68 69 6e 65 3b 0d 0a 0d 0a 20 20 20 20 20  achine;....     
186f0 20 20 20 20 20 20 20 69 66 20 28 66 72 61 6d 65         if (frame
18700 77 6f 72 6b 4e 61 6d 65 4c 69 73 74 20 3d 3d 20  workNameList == 
18710 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
18720 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
18730 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4e        frameworkN
18740 61 6d 65 4c 69 73 74 20 3d 20 6e 65 77 20 53 74  ameList = new St
18750 72 69 6e 67 4c 69 73 74 28 29 3b 0d 0a 0d 0a 20  ringList();.... 
18760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
18770 66 20 28 28 63 6f 6e 66 69 67 75 72 61 74 69 6f  f ((configuratio
18780 6e 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 21 63  n == null) || !c
18790 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 4e 6f 44  onfiguration.NoD
187a0 65 73 6b 74 6f 70 29 0d 0a 20 20 20 20 20 20 20  esktop)..       
187b0 20 20 20 20 20 20 20 20 20 20 20 20 20 66 72 61               fra
187c0 6d 65 77 6f 72 6b 4e 61 6d 65 4c 69 73 74 2e 41  meworkNameList.A
187d0 64 64 28 22 2e 4e 45 54 46 72 61 6d 65 77 6f 72  dd(".NETFramewor
187e0 6b 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  k");....        
187f0 20 20 20 20 20 20 20 20 69 66 20 28 28 63 6f 6e          if ((con
18800 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20 6e 75  figuration == nu
18810 6c 6c 29 20 7c 7c 20 21 63 6f 6e 66 69 67 75 72  ll) || !configur
18820 61 74 69 6f 6e 2e 4e 6f 43 6f 6d 70 61 63 74 29  ation.NoCompact)
18830 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
18840 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
18850 20 20 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f           framewo
18860 72 6b 4e 61 6d 65 4c 69 73 74 2e 41 64 64 28 22  rkNameList.Add("
18870 2e 4e 45 54 43 6f 6d 70 61 63 74 46 72 61 6d 65  .NETCompactFrame
18880 77 6f 72 6b 22 29 3b 0d 0a 20 20 20 20 20 20 20  work");..       
18890 20 20 20 20 20 20 20 20 20 20 20 20 20 66 72 61               fra
188a0 6d 65 77 6f 72 6b 4e 61 6d 65 4c 69 73 74 2e 41  meworkNameList.A
188b0 64 64 28 22 2e 4e 45 54 43 6f 6d 70 61 63 74 46  dd(".NETCompactF
188c0 72 61 6d 65 77 6f 72 6b 22 29 3b 0d 0a 20 20 20  ramework");..   
188d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
188e0 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 4c 69   frameworkNameLi
188f0 73 74 2e 41 64 64 28 22 2e 4e 45 54 43 6f 6d 70  st.Add(".NETComp
18900 61 63 74 46 72 61 6d 65 77 6f 72 6b 22 29 3b 0d  actFramework");.
18910 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
18920 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
18930 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
18940 20 69 66 20 28 66 72 61 6d 65 77 6f 72 6b 56 65   if (frameworkVe
18950 72 73 69 6f 6e 4d 61 70 20 3d 3d 20 6e 75 6c 6c  rsionMap == null
18960 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
18970 20 20 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73     frameworkVers
18980 69 6f 6e 4d 61 70 20 3d 20 6e 65 77 20 56 65 72  ionMap = new Ver
18990 73 69 6f 6e 4d 61 70 28 29 3b 0d 0a 0d 0a 20 20  sionMap();....  
189a0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 28 63            if ((c
189b0 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20  onfiguration == 
189c0 6e 75 6c 6c 29 20 7c 7c 20 21 63 6f 6e 66 69 67  null) || !config
189d0 75 72 61 74 69 6f 6e 2e 4e 6f 44 65 73 6b 74 6f  uration.NoDeskto
189e0 70 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  p)..            
189f0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
18a00 20 20 20 56 65 72 73 69 6f 6e 4c 69 73 74 20 64     VersionList d
18a10 65 73 6b 74 6f 70 56 65 72 73 69 6f 6e 4c 69 73  esktopVersionLis
18a20 74 20 3d 20 6e 65 77 20 56 65 72 73 69 6f 6e 4c  t = new VersionL
18a30 69 73 74 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ist();....      
18a40 20 20 20 20 20 20 20 20 20 20 69 66 20 28 28 63            if ((c
18a50 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20  onfiguration == 
18a60 6e 75 6c 6c 29 20 7c 7c 20 21 63 6f 6e 66 69 67  null) || !config
18a70 75 72 61 74 69 6f 6e 2e 4e 6f 4e 65 74 46 78 32  uration.NoNetFx2
18a80 30 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  0)..            
18a90 20 20 20 20 20 20 20 20 64 65 73 6b 74 6f 70 56          desktopV
18aa0 65 72 73 69 6f 6e 4c 69 73 74 2e 41 64 64 28 6e  ersionList.Add(n
18ab0 65 77 20 56 65 72 73 69 6f 6e 28 32 2c 20 30 2c  ew Version(2, 0,
18ac0 20 35 30 37 32 37 29 29 3b 0d 0a 0d 0a 20 20 20   50727));....   
18ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
18ae0 28 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20  ((configuration 
18af0 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 21 63 6f 6e  == null) || !con
18b00 66 69 67 75 72 61 74 69 6f 6e 2e 4e 6f 4e 65 74  figuration.NoNet
18b10 46 78 34 30 29 0d 0a 20 20 20 20 20 20 20 20 20  Fx40)..         
18b20 20 20 20 20 20 20 20 20 20 20 20 64 65 73 6b 74             deskt
18b30 6f 70 56 65 72 73 69 6f 6e 4c 69 73 74 2e 41 64  opVersionList.Ad
18b40 64 28 6e 65 77 20 56 65 72 73 69 6f 6e 28 34 2c  d(new Version(4,
18b50 20 30 2c 20 33 30 33 31 39 29 29 3b 0d 0a 0d 0a   0, 30319));....
18b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18b70 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e  frameworkVersion
18b80 4d 61 70 2e 41 64 64 28 22 2e 4e 45 54 46 72 61  Map.Add(".NETFra
18b90 6d 65 77 6f 72 6b 22 2c 20 64 65 73 6b 74 6f 70  mework", desktop
18ba0 56 65 72 73 69 6f 6e 4c 69 73 74 29 3b 0d 0a 20  VersionList);.. 
18bb0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
18bc0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
18bd0 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d  (configuration =
18be0 3d 20 6e 75 6c 6c 29 20 7c 7c 20 21 63 6f 6e 66  = null) || !conf
18bf0 69 67 75 72 61 74 69 6f 6e 2e 4e 6f 43 6f 6d 70  iguration.NoComp
18c00 61 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20  act)..          
18c10 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
18c20 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 56 65       frameworkVe
18c30 72 73 69 6f 6e 4d 61 70 2e 41 64 64 28 22 2e 4e  rsionMap.Add(".N
18c40 45 54 43 6f 6d 70 61 63 74 46 72 61 6d 65 77 6f  ETCompactFramewo
18c50 72 6b 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  rk",..          
18c60 20 20 20 20 20 20 20 20 20 20 6e 65 77 20 56 65            new Ve
18c70 72 73 69 6f 6e 4c 69 73 74 28 6e 65 77 20 56 65  rsionList(new Ve
18c80 72 73 69 6f 6e 5b 5d 20 7b 0d 0a 20 20 20 20 20  rsion[] {..     
18c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e                 n
18ca0 65 77 20 56 65 72 73 69 6f 6e 28 32 2c 20 30 2c  ew Version(2, 0,
18cb0 20 30 2c 20 30 29 2c 20 6e 65 77 20 56 65 72 73   0, 0), new Vers
18cc0 69 6f 6e 28 33 2c 20 35 2c 20 30 2c 20 30 29 0d  ion(3, 5, 0, 0).
18cd0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
18ce0 20 7d 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20   }));..         
18cf0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
18d00 20 20 20 20 69 66 20 28 70 6c 61 74 66 6f 72 6d      if (platform
18d10 4e 61 6d 65 4c 69 73 74 20 3d 3d 20 6e 75 6c 6c  NameList == null
18d20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
18d30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
18d40 20 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 4c 69    platformNameLi
18d50 73 74 20 3d 20 6e 65 77 20 53 74 72 69 6e 67 4c  st = new StringL
18d60 69 73 74 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ist();....      
18d70 20 20 20 20 20 20 20 20 20 20 69 66 20 28 28 63            if ((c
18d80 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20  onfiguration == 
18d90 6e 75 6c 6c 29 20 7c 7c 20 21 63 6f 6e 66 69 67  null) || !config
18da0 75 72 61 74 69 6f 6e 2e 4e 6f 44 65 73 6b 74 6f  uration.NoDeskto
18db0 70 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  p)..            
18dc0 20 20 20 20 20 20 20 20 70 6c 61 74 66 6f 72 6d          platform
18dd0 4e 61 6d 65 4c 69 73 74 2e 41 64 64 28 6e 75 6c  NameList.Add(nul
18de0 6c 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  l);....         
18df0 20 20 20 20 20 20 20 69 66 20 28 28 63 6f 6e 66         if ((conf
18e00 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c  iguration == nul
18e10 6c 29 20 7c 7c 20 21 63 6f 6e 66 69 67 75 72 61  l) || !configura
18e20 74 69 6f 6e 2e 4e 6f 43 6f 6d 70 61 63 74 29 0d  tion.NoCompact).
18e30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
18e40 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
18e50 20 20 20 20 20 20 20 20 70 6c 61 74 66 6f 72 6d          platform
18e60 4e 61 6d 65 4c 69 73 74 2e 41 64 64 28 22 50 6f  NameList.Add("Po
18e70 63 6b 65 74 50 43 22 29 3b 0d 0a 20 20 20 20 20  cketPC");..     
18e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70                 p
18e90 6c 61 74 66 6f 72 6d 4e 61 6d 65 4c 69 73 74 2e  latformNameList.
18ea0 41 64 64 28 22 53 6d 61 72 74 70 68 6f 6e 65 22  Add("Smartphone"
18eb0 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
18ec0 20 20 20 20 20 20 20 20 70 6c 61 74 66 6f 72 6d          platform
18ed0 4e 61 6d 65 4c 69 73 74 2e 41 64 64 28 22 57 69  NameList.Add("Wi
18ee0 6e 64 6f 77 73 43 45 22 29 3b 0d 0a 20 20 20 20  ndowsCE");..    
18ef0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
18f00 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
18f10 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
18f20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
18f30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18f40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18f50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18f60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
18f70 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
18f80 61 74 69 63 20 62 6f 6f 6c 20 48 61 76 65 46 72  atic bool HaveFr
18f90 61 6d 65 77 6f 72 6b 28 0d 0a 20 20 20 20 20 20  amework(..      
18fa0 20 20 20 20 20 20 52 65 67 69 73 74 72 79 4b 65        RegistryKe
18fb0 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 20  y rootKey,..    
18fc0 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 66          string f
18fd0 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 0d 0a 20  rameworkName,.. 
18fe0 20 20 20 20 20 20 20 20 20 20 20 56 65 72 73 69             Versi
18ff0 6f 6e 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73  on frameworkVers
19000 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ion,..          
19010 20 20 73 74 72 69 6e 67 20 70 6c 61 74 66 6f 72    string platfor
19020 6d 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20  mName,..        
19030 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c      bool whatIf,
19040 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
19050 6f 6c 20 76 65 72 62 6f 73 65 0d 0a 20 20 20 20  ol verbose..    
19060 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
19070 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
19080 20 20 73 74 72 69 6e 67 20 66 6f 72 6d 61 74 20    string format 
19090 3d 20 21 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c  = !String.IsNull
190a0 4f 72 45 6d 70 74 79 28 70 6c 61 74 66 6f 72 6d  OrEmpty(platform
190b0 4e 61 6d 65 29 20 3f 0d 0a 20 20 20 20 20 20 20  Name) ?..       
190c0 20 20 20 20 20 20 20 20 20 22 53 6f 66 74 77 61           "Softwa
190d0 72 65 5c 5c 4d 69 63 72 6f 73 6f 66 74 5c 5c 7b  re\\Microsoft\\{
190e0 30 7d 5c 5c 76 7b 31 7d 5c 5c 7b 32 7d 22 20 3a  0}\\v{1}\\{2}" :
190f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
19100 20 20 22 53 6f 66 74 77 61 72 65 5c 5c 4d 69 63    "Software\\Mic
19110 72 6f 73 6f 66 74 5c 5c 7b 30 7d 5c 5c 76 7b 31  rosoft\\{0}\\v{1
19120 7d 22 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  }";....         
19130 20 20 20 73 74 72 69 6e 67 20 6b 65 79 4e 61 6d     string keyNam
19140 65 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  e = String.Forma
19150 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
19160 20 20 20 20 66 6f 72 6d 61 74 2c 20 66 72 61 6d      format, fram
19170 65 77 6f 72 6b 4e 61 6d 65 2c 20 66 72 61 6d 65  eworkName, frame
19180 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 20 70 6c 61  workVersion, pla
19190 74 66 6f 72 6d 4e 61 6d 65 29 3b 0d 0a 0d 0a 20  tformName);.... 
191a0 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67             using
191b0 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65   (MockRegistryKe
191c0 79 20 6b 65 79 20 3d 20 52 65 67 69 73 74 72 79  y key = Registry
191d0 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62 4b 65  Helper.OpenSubKe
191e0 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
191f0 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c          rootKey,
19200 20 6b 65 79 4e 61 6d 65 2c 20 66 61 6c 73 65 2c   keyName, false,
19210 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65   whatIf, verbose
19220 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
19230 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
19240 20 20 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75     if (key == nu
19250 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
19260 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
19270 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  false;....      
19280 20 20 20 20 20 20 20 20 20 20 69 66 20 28 70 6c            if (pl
19290 61 74 66 6f 72 6d 4e 61 6d 65 20 21 3d 20 6e 75  atformName != nu
192a0 6c 6c 29 20 2f 2f 20 4e 4f 54 45 3a 20 53 6b 69  ll) // NOTE: Ski
192b0 70 20 6e 6f 6e 2d 64 65 73 6b 74 6f 70 2e 0d 0a  p non-desktop...
192c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
192d0 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b      return true;
192e0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
192f0 20 20 20 20 73 74 72 69 6e 67 20 64 69 72 65 63      string direc
19300 74 6f 72 79 20 3d 20 47 65 74 46 72 61 6d 65 77  tory = GetFramew
19310 6f 72 6b 44 69 72 65 63 74 6f 72 79 28 0d 0a 20  orkDirectory(.. 
19320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19330 20 20 20 72 6f 6f 74 4b 65 79 2c 20 66 72 61 6d     rootKey, fram
19340 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 20 77 68  eworkVersion, wh
19350 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d  atIf, verbose);.
19360 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
19370 20 20 20 69 66 20 28 53 74 72 69 6e 67 2e 49 73     if (String.Is
19380 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 64 69 72 65  NullOrEmpty(dire
19390 63 74 6f 72 79 29 29 0d 0a 20 20 20 20 20 20 20  ctory))..       
193a0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
193b0 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20  urn false;....  
193c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
193d0 20 28 21 44 69 72 65 63 74 6f 72 79 2e 45 78 69   (!Directory.Exi
193e0 73 74 73 28 64 69 72 65 63 74 6f 72 79 29 29 0d  sts(directory)).
193f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
19400 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
19410 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
19420 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75        return tru
19430 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
19440 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  }..        }....
19450 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
19460 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19470 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19480 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19490 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
194a0 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  ...        priva
194b0 74 65 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 46  te static bool F
194c0 6f 72 45 61 63 68 46 72 61 6d 65 77 6f 72 6b 43  orEachFrameworkC
194d0 6f 6e 66 69 67 28 0d 0a 20 20 20 20 20 20 20 20  onfig(..        
194e0 20 20 20 20 46 72 61 6d 65 77 6f 72 6b 43 6f 6e      FrameworkCon
194f0 66 69 67 43 61 6c 6c 62 61 63 6b 20 63 61 6c 6c  figCallback call
19500 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20  back,..         
19510 20 20 20 73 74 72 69 6e 67 20 69 6e 76 61 72 69     string invari
19520 61 6e 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ant,..          
19530 20 20 73 74 72 69 6e 67 20 6e 61 6d 65 2c 0d 0a    string name,..
19540 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
19550 6e 67 20 64 65 73 63 72 69 70 74 69 6f 6e 2c 0d  ng description,.
19560 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72  .            str
19570 69 6e 67 20 74 79 70 65 4e 61 6d 65 2c 0d 0a 20  ing typeName,.. 
19580 20 20 20 20 20 20 20 20 20 20 20 41 73 73 65 6d             Assem
19590 62 6c 79 4e 61 6d 65 20 61 73 73 65 6d 62 6c 79  blyName assembly
195a0 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  Name,..         
195b0 20 20 20 6f 62 6a 65 63 74 20 63 6c 69 65 6e 74     object client
195c0 44 61 74 61 2c 0d 0a 20 20 20 20 20 20 20 20 20  Data,..         
195d0 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d     bool whatIf,.
195e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
195f0 6c 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20  l verbose,..    
19600 20 20 20 20 20 20 20 20 72 65 66 20 62 6f 6f 6c          ref bool
19610 20 73 61 76 65 64 2c 0d 0a 20 20 20 20 20 20 20   saved,..       
19620 20 20 20 20 20 72 65 66 20 73 74 72 69 6e 67 20       ref string 
19630 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20  error..         
19640 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d     )..        {.
19650 0a 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67  .            Reg
19660 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79  istryKey rootKey
19670 20 3d 20 66 72 61 6d 65 77 6f 72 6b 52 6f 6f 74   = frameworkRoot
19680 4b 65 79 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  Key;....        
19690 20 20 20 20 69 66 20 28 72 6f 6f 74 4b 65 79 20      if (rootKey 
196a0 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
196b0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
196c0 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
196d0 20 22 69 6e 76 61 6c 69 64 20 72 6f 6f 74 20 6b   "invalid root k
196e0 65 79 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ey";..          
196f0 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
19700 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se;..           
19710 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
19720 20 20 69 66 20 28 21 4f 62 6a 65 63 74 2e 52 65    if (!Object.Re
19730 66 65 72 65 6e 63 65 45 71 75 61 6c 73 28 72 6f  ferenceEquals(ro
19740 6f 74 4b 65 79 2c 20 52 65 67 69 73 74 72 79 2e  otKey, Registry.
19750 43 75 72 72 65 6e 74 55 73 65 72 29 20 26 26 0d  CurrentUser) &&.
19760 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
19770 20 21 4f 62 6a 65 63 74 2e 52 65 66 65 72 65 6e   !Object.Referen
19780 63 65 45 71 75 61 6c 73 28 72 6f 6f 74 4b 65 79  ceEquals(rootKey
19790 2c 20 52 65 67 69 73 74 72 79 2e 4c 6f 63 61 6c  , Registry.Local
197a0 4d 61 63 68 69 6e 65 29 29 0d 0a 20 20 20 20 20  Machine))..     
197b0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
197c0 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
197d0 3d 20 22 72 6f 6f 74 20 6b 65 79 20 6d 75 73 74  = "root key must
197e0 20 62 65 20 70 65 72 2d 75 73 65 72 20 6f 72 20   be per-user or 
197f0 70 65 72 2d 6d 61 63 68 69 6e 65 22 3b 0d 0a 20  per-machine";.. 
19800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
19810 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
19820 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
19830 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 66             if (f
19840 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 4c 69 73 74  rameworkNameList
19850 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
19860 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
19870 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
19880 3d 20 22 6e 6f 20 66 72 61 6d 65 77 6f 72 6b 20  = "no framework 
19890 6e 61 6d 65 73 20 66 6f 75 6e 64 22 3b 0d 0a 20  names found";.. 
198a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
198b0 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
198c0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
198d0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 66             if (f
198e0 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 4d  rameworkVersionM
198f0 61 70 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ap == null)..   
19900 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
19910 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
19920 72 20 3d 20 22 6e 6f 20 66 72 61 6d 65 77 6f 72  r = "no framewor
19930 6b 20 76 65 72 73 69 6f 6e 73 20 66 6f 75 6e 64  k versions found
19940 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ";..            
19950 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
19960 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
19970 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
19980 69 66 20 28 70 6c 61 74 66 6f 72 6d 4e 61 6d 65  if (platformName
19990 4c 69 73 74 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  List == null).. 
199a0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
199b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
199c0 72 6f 72 20 3d 20 22 6e 6f 20 70 6c 61 74 66 6f  ror = "no platfo
199d0 72 6d 20 6e 61 6d 65 73 20 66 6f 75 6e 64 22 3b  rm names found";
199e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
199f0 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
19a00 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
19a10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
19a20 20 28 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 4c   (frameworkNameL
19a30 69 73 74 2e 43 6f 75 6e 74 20 21 3d 20 70 6c 61  ist.Count != pla
19a40 74 66 6f 72 6d 4e 61 6d 65 4c 69 73 74 2e 43 6f  tformNameList.Co
19a50 75 6e 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20  unt)..          
19a60 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
19a70 20 20 20 20 20 65 72 72 6f 72 20 3d 20 53 74 72       error = Str
19a80 69 6e 67 2e 46 6f 72 6d 61 74 28 22 66 72 61 6d  ing.Format("fram
19a90 65 77 6f 72 6b 20 6e 61 6d 65 20 63 6f 75 6e 74  ework name count
19aa0 20 7b 30 7d 20 64 6f 65 73 20 6e 6f 74 20 22 20   {0} does not " 
19ab0 2b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  +..             
19ac0 20 20 20 20 20 20 20 22 6d 61 74 63 68 20 70 6c         "match pl
19ad0 61 74 66 6f 72 6d 20 6e 61 6d 65 20 63 6f 75 6e  atform name coun
19ae0 74 20 7b 31 7d 22 2c 20 66 72 61 6d 65 77 6f 72  t {1}", framewor
19af0 6b 4e 61 6d 65 4c 69 73 74 2e 43 6f 75 6e 74 2c  kNameList.Count,
19b00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
19b10 20 20 20 20 20 20 70 6c 61 74 66 6f 72 6d 4e 61        platformNa
19b20 6d 65 4c 69 73 74 2e 43 6f 75 6e 74 29 3b 0d 0a  meList.Count);..
19b30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
19b40 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
19b50 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
19b60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 66 6f  ..            fo
19b70 72 20 28 69 6e 74 20 69 6e 64 65 78 20 3d 20 30  r (int index = 0
19b80 3b 20 69 6e 64 65 78 20 3c 20 66 72 61 6d 65 77  ; index < framew
19b90 6f 72 6b 4e 61 6d 65 4c 69 73 74 2e 43 6f 75 6e  orkNameList.Coun
19ba0 74 3b 20 69 6e 64 65 78 2b 2b 29 0d 0a 20 20 20  t; index++)..   
19bb0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
19bc0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
19bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19be0 2f 2f 20 4e 4f 54 45 3a 20 47 72 61 62 20 74 68  // NOTE: Grab th
19bf0 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 66 72  e name of the fr
19c00 61 6d 65 77 6f 72 6b 20 28 65 2e 67 2e 20 22 2e  amework (e.g. ".
19c10 4e 45 54 46 72 61 6d 65 77 6f 72 6b 22 29 0d 0a  NETFramework")..
19c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19c30 2f 2f 20 20 20 20 20 20 20 61 6e 64 20 74 68 65  //       and the
19c40 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 70 6c 61   name of the pla
19c50 74 66 6f 72 6d 20 28 65 2e 67 2e 20 22 57 69 6e  tform (e.g. "Win
19c60 64 6f 77 73 43 45 22 29 2e 0d 0a 20 20 20 20 20  dowsCE")...     
19c70 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
19c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
19c90 74 72 69 6e 67 20 66 72 61 6d 65 77 6f 72 6b 4e  tring frameworkN
19ca0 61 6d 65 20 3d 20 66 72 61 6d 65 77 6f 72 6b 4e  ame = frameworkN
19cb0 61 6d 65 4c 69 73 74 5b 69 6e 64 65 78 5d 3b 0d  ameList[index];.
19cc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
19cd0 20 73 74 72 69 6e 67 20 70 6c 61 74 66 6f 72 6d   string platform
19ce0 4e 61 6d 65 20 3d 20 70 6c 61 74 66 6f 72 6d 4e  Name = platformN
19cf0 61 6d 65 4c 69 73 74 5b 69 6e 64 65 78 5d 3b 0d  ameList[index];.
19d00 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
19d10 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
19d20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20         // NOTE: 
19d30 53 6b 69 70 20 61 6c 6c 20 6e 6f 6e 2d 64 65 73  Skip all non-des
19d40 6b 74 6f 70 20 66 72 61 6d 65 77 6f 72 6b 73 20  ktop frameworks 
19d50 28 69 2e 65 2e 20 69 66 20 74 68 65 20 70 6c 61  (i.e. if the pla
19d60 74 66 6f 72 6d 0d 0a 20 20 20 20 20 20 20 20 20  tform..         
19d70 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
19d80 6e 61 6d 65 20 69 73 20 6e 6f 74 20 6e 75 6c 6c  name is not null
19d90 29 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  )...            
19da0 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
19db0 20 20 20 20 20 20 20 20 69 66 20 28 70 6c 61 74          if (plat
19dc0 66 6f 72 6d 4e 61 6d 65 20 21 3d 20 6e 75 6c 6c  formName != null
19dd0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
19de0 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b         continue;
19df0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
19e00 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
19e10 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a          // NOTE:
19e20 20 47 72 61 62 20 74 68 65 20 73 75 70 70 6f 72   Grab the suppor
19e30 74 65 64 20 76 65 72 73 69 6f 6e 73 20 6f 66 20  ted versions of 
19e40 74 68 69 73 20 70 61 72 74 69 63 75 6c 61 72 0d  this particular.
19e50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
19e60 20 2f 2f 20 20 20 20 20 20 20 66 72 61 6d 65 77   //       framew
19e70 6f 72 6b 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  ork...          
19e80 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
19e90 20 20 20 20 20 20 20 20 20 20 56 65 72 73 69 6f            Versio
19ea0 6e 4c 69 73 74 20 66 72 61 6d 65 77 6f 72 6b 56  nList frameworkV
19eb0 65 72 73 69 6f 6e 4c 69 73 74 3b 0d 0a 0d 0a 20  ersionList;.... 
19ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
19ed0 66 20 28 21 66 72 61 6d 65 77 6f 72 6b 56 65 72  f (!frameworkVer
19ee0 73 69 6f 6e 4d 61 70 2e 54 72 79 47 65 74 56 61  sionMap.TryGetVa
19ef0 6c 75 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  lue(..          
19f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 72                fr
19f10 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 20 6f 75 74  ameworkName, out
19f20 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f   frameworkVersio
19f30 6e 4c 69 73 74 29 20 7c 7c 0d 0a 20 20 20 20 20  nList) ||..     
19f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28                 (
19f50 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e  frameworkVersion
19f60 4c 69 73 74 20 3d 3d 20 6e 75 6c 6c 29 29 0d 0a  List == null))..
19f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19f80 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
19f90 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b         continue;
19fa0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
19fb0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
19fc0 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 28         foreach (
19fd0 56 65 72 73 69 6f 6e 20 66 72 61 6d 65 77 6f 72  Version framewor
19fe0 6b 56 65 72 73 69 6f 6e 20 69 6e 20 66 72 61 6d  kVersion in fram
19ff0 65 77 6f 72 6b 56 65 72 73 69 6f 6e 4c 69 73 74  eworkVersionList
1a000 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
1a010 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
1a020 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f            TraceO
1a030 70 73 2e 54 72 61 63 65 28 0d 0a 20 20 20 20 20  ps.Trace(..     
1a040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a050 20 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79     TracePriority
1a060 2e 4c 6f 77 65 72 2c 20 74 72 61 63 65 43 61 6c  .Lower, traceCal
1a070 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f  lback, String.Fo
1a080 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
1a090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
1a0a0 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 20 3d 20  frameworkName = 
1a0b0 7b 30 7d 2c 20 66 72 61 6d 65 77 6f 72 6b 56 65  {0}, frameworkVe
1a0c0 72 73 69 6f 6e 20 3d 20 7b 31 7d 2c 20 22 20 2b  rsion = {1}, " +
1a0d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1a0e0 20 20 20 20 20 20 20 20 20 20 22 70 6c 61 74 66            "platf
1a0f0 6f 72 6d 4e 61 6d 65 20 3d 20 7b 32 7d 22 2c 20  ormName = {2}", 
1a100 46 6f 72 44 69 73 70 6c 61 79 28 66 72 61 6d 65  ForDisplay(frame
1a110 77 6f 72 6b 4e 61 6d 65 29 2c 0d 0a 20 20 20 20  workName),..    
1a120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a130 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 66      ForDisplay(f
1a140 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 29  rameworkVersion)
1a150 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
1a160 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69             ForDi
1a170 73 70 6c 61 79 28 70 6c 61 74 66 6f 72 6d 4e 61  splay(platformNa
1a180 6d 65 29 29 2c 20 74 72 61 63 65 43 61 74 65 67  me)), traceCateg
1a190 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
1a1a0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
1a1b0 28 21 48 61 76 65 46 72 61 6d 65 77 6f 72 6b 28  (!HaveFramework(
1a1c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1a1d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f                ro
1a1e0 6f 74 4b 65 79 2c 20 66 72 61 6d 65 77 6f 72 6b  otKey, framework
1a1f0 4e 61 6d 65 2c 20 66 72 61 6d 65 77 6f 72 6b 56  Name, frameworkV
1a200 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20  ersion,..       
1a210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a220 20 20 20 20 20 70 6c 61 74 66 6f 72 6d 4e 61 6d       platformNam
1a230 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f  e, whatIf, verbo
1a240 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  se))..          
1a250 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1a260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a270 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 54 72       TraceOps.Tr
1a280 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ace(..          
1a290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a2a0 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e    TracePriority.
1a2b0 4c 6f 77 2c 20 74 72 61 63 65 43 61 6c 6c 62 61  Low, traceCallba
1a2c0 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ck,..           
1a2d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a2e0 20 22 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b   ".NET Framework
1a2f0 20 6e 6f 74 20 66 6f 75 6e 64 2c 20 73 6b 69 70   not found, skip
1a300 70 69 6e 67 2e 2e 2e 22 2c 0d 0a 20 20 20 20 20  ping...",..     
1a310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a320 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
1a330 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
1a340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a350 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20    continue;..   
1a360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a370 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
1a380 20 20 20 20 20 20 20 20 20 20 69 66 20 28 63 61            if (ca
1a390 6c 6c 62 61 63 6b 20 3d 3d 20 6e 75 6c 6c 29 0d  llback == null).
1a3a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1a3b0 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75           continu
1a3c0 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
1a3d0 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
1a3e0 20 64 69 72 65 63 74 6f 72 79 20 3d 20 47 65 74   directory = Get
1a3f0 46 72 61 6d 65 77 6f 72 6b 44 69 72 65 63 74 6f  FrameworkDirecto
1a400 72 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ry(..           
1a410 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f               roo
1a420 74 4b 65 79 2c 20 66 72 61 6d 65 77 6f 72 6b 56  tKey, frameworkV
1a430 65 72 73 69 6f 6e 2c 20 77 68 61 74 49 66 2c 20  ersion, whatIf, 
1a440 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20  verbose);....   
1a450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a460 20 69 66 20 28 53 74 72 69 6e 67 2e 49 73 4e 75   if (String.IsNu
1a470 6c 6c 4f 72 45 6d 70 74 79 28 64 69 72 65 63 74  llOrEmpty(direct
1a480 6f 72 79 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ory))..         
1a490 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
1a4a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a4b0 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 54        TraceOps.T
1a4c0 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20  race(..         
1a4d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a4e0 20 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79     TracePriority
1a4f0 2e 4c 6f 77 2c 20 74 72 61 63 65 43 61 6c 6c 62  .Low, traceCallb
1a500 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d  ack, String.Form
1a510 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
1a520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a530 20 22 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b   ".NET Framework
1a540 20 7b 30 7d 20 64 69 72 65 63 74 6f 72 79 20 69   {0} directory i
1a550 73 20 69 6e 76 61 6c 69 64 2c 20 22 20 2b 0d 0a  s invalid, " +..
1a560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a570 20 20 20 20 20 20 20 20 20 20 20 20 22 73 6b 69              "ski
1a580 70 70 69 6e 67 2e 2e 2e 22 2c 20 46 6f 72 44 69  pping...", ForDi
1a590 73 70 6c 61 79 28 66 72 61 6d 65 77 6f 72 6b 56  splay(frameworkV
1a5a0 65 72 73 69 6f 6e 29 29 2c 0d 0a 20 20 20 20 20  ersion)),..     
1a5b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a5c0 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
1a5d0 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
1a5e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a5f0 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20    continue;..   
1a600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a610 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
1a620 20 20 20 20 20 20 20 20 20 20 64 69 72 65 63 74            direct
1a630 6f 72 79 20 3d 20 50 61 74 68 2e 43 6f 6d 62 69  ory = Path.Combi
1a640 6e 65 28 64 69 72 65 63 74 6f 72 79 2c 20 22 43  ne(directory, "C
1a650 6f 6e 66 69 67 22 29 3b 0d 0a 0d 0a 20 20 20 20  onfig");....    
1a660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a670 69 66 20 28 21 44 69 72 65 63 74 6f 72 79 2e 45  if (!Directory.E
1a680 78 69 73 74 73 28 64 69 72 65 63 74 6f 72 79 29  xists(directory)
1a690 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
1a6a0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
1a6b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a6c0 20 20 54 72 61 63 65 4f 70 73 2e 54 72 61 63 65    TraceOps.Trace
1a6d0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
1a6e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
1a6f0 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77  racePriority.Low
1a700 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c  , traceCallback,
1a710 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
1a720 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1a730 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2e 4e               ".N
1a740 45 54 20 46 72 61 6d 65 77 6f 72 6b 20 7b 30 7d  ET Framework {0}
1a750 20 64 69 72 65 63 74 6f 72 79 20 7b 31 7d 20 64   directory {1} d
1a760 6f 65 73 20 6e 6f 74 20 65 78 69 73 74 2c 20 22  oes not exist, "
1a770 20 2b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   +..            
1a780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a790 22 73 6b 69 70 70 69 6e 67 2e 2e 2e 22 2c 20 46  "skipping...", F
1a7a0 6f 72 44 69 73 70 6c 61 79 28 66 72 61 6d 65 77  orDisplay(framew
1a7b0 6f 72 6b 56 65 72 73 69 6f 6e 29 2c 0d 0a 20 20  orkVersion),..  
1a7c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a7d0 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73            ForDis
1a7e0 70 6c 61 79 28 64 69 72 65 63 74 6f 72 79 29 29  play(directory))
1a7f0 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29  , traceCategory)
1a800 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
1a810 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
1a820 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20  tinue;..        
1a830 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
1a840 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1a850 20 20 20 20 20 73 74 72 69 6e 67 20 66 69 6c 65       string file
1a860 4e 61 6d 65 20 3d 20 50 61 74 68 2e 43 6f 6d 62  Name = Path.Comb
1a870 69 6e 65 28 64 69 72 65 63 74 6f 72 79 2c 20 22  ine(directory, "
1a880 6d 61 63 68 69 6e 65 2e 63 6f 6e 66 69 67 22 29  machine.config")
1a890 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
1a8a0 20 20 20 20 20 20 20 20 20 69 66 20 28 21 46 69           if (!Fi
1a8b0 6c 65 2e 45 78 69 73 74 73 28 66 69 6c 65 4e 61  le.Exists(fileNa
1a8c0 6d 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  me))..          
1a8d0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1a8e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a8f0 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 54 72       TraceOps.Tr
1a900 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ace(..          
1a910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a920 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e    TracePriority.
1a930 4c 6f 77 2c 20 74 72 61 63 65 43 61 6c 6c 62 61  Low, traceCallba
1a940 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ck, String.Forma
1a950 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
1a960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a970 22 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b 20  ".NET Framework 
1a980 7b 30 7d 20 66 69 6c 65 20 7b 31 7d 20 64 6f 65  {0} file {1} doe
1a990 73 20 6e 6f 74 20 65 78 69 73 74 2c 20 22 20 2b  s not exist, " +
1a9a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1a9b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 73                "s
1a9c0 6b 69 70 70 69 6e 67 2e 2e 2e 22 2c 20 46 6f 72  kipping...", For
1a9d0 44 69 73 70 6c 61 79 28 66 72 61 6d 65 77 6f 72  Display(framewor
1a9e0 6b 56 65 72 73 69 6f 6e 29 2c 0d 0a 20 20 20 20  kVersion),..    
1a9f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aa00 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c          ForDispl
1aa10 61 79 28 66 69 6c 65 4e 61 6d 65 29 29 2c 20 74  ay(fileName)), t
1aa20 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
1aa30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1aa40 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e            contin
1aa50 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
1aa60 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
1aa70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aa80 20 20 62 6f 6f 6c 20 6c 6f 63 61 6c 53 61 76 65    bool localSave
1aa90 64 20 3d 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20  d = false;....  
1aaa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aab0 20 20 69 66 20 28 21 63 61 6c 6c 62 61 63 6b 28    if (!callback(
1aac0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1aad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 69                fi
1aae0 6c 65 4e 61 6d 65 2c 20 69 6e 76 61 72 69 61 6e  leName, invarian
1aaf0 74 2c 20 6e 61 6d 65 2c 20 64 65 73 63 72 69 70  t, name, descrip
1ab00 74 69 6f 6e 2c 20 74 79 70 65 4e 61 6d 65 2c 0d  tion, typeName,.
1ab10 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1ab20 20 20 20 20 20 20 20 20 20 20 20 20 20 61 73 73               ass
1ab30 65 6d 62 6c 79 4e 61 6d 65 2c 20 63 6c 69 65 6e  emblyName, clien
1ab40 74 44 61 74 61 2c 20 77 68 61 74 49 66 2c 20 76  tData, whatIf, v
1ab50 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20  erbose,..       
1ab60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ab70 20 20 20 20 20 72 65 66 20 6c 6f 63 61 6c 53 61       ref localSa
1ab80 76 65 64 2c 20 72 65 66 20 65 72 72 6f 72 29 29  ved, ref error))
1ab90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1aba0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1abb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1abc0 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
1abd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1abe0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
1abf0 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d             else.
1ac00 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1ac10 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1ac20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ac30 69 66 20 28 6c 6f 63 61 6c 53 61 76 65 64 20 26  if (localSaved &
1ac40 26 20 21 73 61 76 65 64 29 0d 0a 20 20 20 20 20  & !saved)..     
1ac50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ac60 20 20 20 20 20 20 20 73 61 76 65 64 20 3d 20 74         saved = t
1ac70 72 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  rue;....        
1ac80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ac90 69 66 20 28 76 65 72 62 6f 73 65 29 0d 0a 20 20  if (verbose)..  
1aca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1acb0 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f            TraceO
1acc0 70 73 2e 54 72 61 63 65 28 0d 0a 20 20 20 20 20  ps.Trace(..     
1acd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ace0 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
1acf0 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c  Priority.Lowest,
1ad00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1ad10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ad20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c    traceCallback,
1ad30 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
1ad40 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1ad50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ad60 20 22 6c 6f 63 61 6c 53 61 76 65 64 20 3d 20 7b   "localSaved = {
1ad70 30 7d 2c 20 73 61 76 65 64 20 3d 20 7b 31 7d 22  0}, saved = {1}"
1ad80 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
1ad90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ada0 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 6c 6f     ForDisplay(lo
1adb0 63 61 6c 53 61 76 65 64 29 2c 20 46 6f 72 44 69  calSaved), ForDi
1adc0 73 70 6c 61 79 28 73 61 76 65 64 29 29 2c 0d 0a  splay(saved)),..
1add0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ade0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1adf0 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
1ae00 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1ae10 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
1ae20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
1ae30 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
1ae40 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74          return t
1ae50 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  rue;..        }.
1ae60 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
1ae70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ae80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ae90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1aea0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1aeb0 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72  //....        pr
1aec0 69 76 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f  ivate static boo
1aed0 6c 20 46 6f 72 45 61 63 68 46 72 61 6d 65 77 6f  l ForEachFramewo
1aee0 72 6b 52 65 67 69 73 74 72 79 28 0d 0a 20 20 20  rkRegistry(..   
1aef0 20 20 20 20 20 20 20 20 20 46 72 61 6d 65 77 6f           Framewo
1af00 72 6b 52 65 67 69 73 74 72 79 43 61 6c 6c 62 61  rkRegistryCallba
1af10 63 6b 20 63 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20  ck callback,..  
1af20 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74            object
1af30 20 63 6c 69 65 6e 74 44 61 74 61 2c 0d 0a 20 20   clientData,..  
1af40 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77            bool w
1af50 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20  hatIf,..        
1af60 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65      bool verbose
1af70 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ,..            r
1af80 65 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72 0d  ef string error.
1af90 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a  .            )..
1afa0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
1afb0 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79 4b         RegistryK
1afc0 65 79 20 72 6f 6f 74 4b 65 79 20 3d 20 66 72 61  ey rootKey = fra
1afd0 6d 65 77 6f 72 6b 52 6f 6f 74 4b 65 79 3b 0d 0a  meworkRootKey;..
1afe0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
1aff0 20 28 72 6f 6f 74 4b 65 79 20 3d 3d 20 6e 75 6c   (rootKey == nul
1b000 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
1b010 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
1b020 20 20 20 65 72 72 6f 72 20 3d 20 22 69 6e 76 61     error = "inva
1b030 6c 69 64 20 72 6f 6f 74 20 6b 65 79 22 3b 0d 0a  lid root key";..
1b040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b050 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20  return false;.. 
1b060 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
1b070 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
1b080 21 4f 62 6a 65 63 74 2e 52 65 66 65 72 65 6e 63  !Object.Referenc
1b090 65 45 71 75 61 6c 73 28 72 6f 6f 74 4b 65 79 2c  eEquals(rootKey,
1b0a0 20 52 65 67 69 73 74 72 79 2e 43 75 72 72 65 6e   Registry.Curren
1b0b0 74 55 73 65 72 29 20 26 26 0d 0a 20 20 20 20 20  tUser) &&..     
1b0c0 20 20 20 20 20 20 20 20 20 20 20 21 4f 62 6a 65             !Obje
1b0d0 63 74 2e 52 65 66 65 72 65 6e 63 65 45 71 75 61  ct.ReferenceEqua
1b0e0 6c 73 28 72 6f 6f 74 4b 65 79 2c 20 52 65 67 69  ls(rootKey, Regi
1b0f0 73 74 72 79 2e 4c 6f 63 61 6c 4d 61 63 68 69 6e  stry.LocalMachin
1b100 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e))..           
1b110 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1b120 20 20 20 20 65 72 72 6f 72 20 3d 20 22 72 6f 6f      error = "roo
1b130 74 20 6b 65 79 20 6d 75 73 74 20 62 65 20 70 65  t key must be pe
1b140 72 2d 75 73 65 72 20 6f 72 20 70 65 72 2d 6d 61  r-user or per-ma
1b150 63 68 69 6e 65 22 3b 0d 0a 20 20 20 20 20 20 20  chine";..       
1b160 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
1b170 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
1b180 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
1b190 20 20 20 20 20 69 66 20 28 66 72 61 6d 65 77 6f       if (framewo
1b1a0 72 6b 4e 61 6d 65 4c 69 73 74 20 3d 3d 20 6e 75  rkNameList == nu
1b1b0 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
1b1c0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1b1d0 20 20 20 20 65 72 72 6f 72 20 3d 20 22 6e 6f 20      error = "no 
1b1e0 66 72 61 6d 65 77 6f 72 6b 20 6e 61 6d 65 73 20  framework names 
1b1f0 66 6f 75 6e 64 22 3b 0d 0a 20 20 20 20 20 20 20  found";..       
1b200 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
1b210 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
1b220 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
1b230 20 20 20 20 20 69 66 20 28 66 72 61 6d 65 77 6f       if (framewo
1b240 72 6b 56 65 72 73 69 6f 6e 4d 61 70 20 3d 3d 20  rkVersionMap == 
1b250 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
1b260 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
1b270 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 6e        error = "n
1b280 6f 20 66 72 61 6d 65 77 6f 72 6b 20 76 65 72 73  o framework vers
1b290 69 6f 6e 73 20 66 6f 75 6e 64 22 3b 0d 0a 20 20  ions found";..  
1b2a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
1b2b0 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
1b2c0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
1b2d0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 70 6c            if (pl
1b2e0 61 74 66 6f 72 6d 4e 61 6d 65 4c 69 73 74 20 3d  atformNameList =
1b2f0 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
1b300 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1b310 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
1b320 22 6e 6f 20 70 6c 61 74 66 6f 72 6d 20 6e 61 6d  "no platform nam
1b330 65 73 20 66 6f 75 6e 64 22 3b 0d 0a 20 20 20 20  es found";..    
1b340 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
1b350 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
1b360 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
1b370 20 20 20 20 20 20 20 20 69 66 20 28 66 72 61 6d          if (fram
1b380 65 77 6f 72 6b 4e 61 6d 65 4c 69 73 74 2e 43 6f  eworkNameList.Co
1b390 75 6e 74 20 21 3d 20 70 6c 61 74 66 6f 72 6d 4e  unt != platformN
1b3a0 61 6d 65 4c 69 73 74 2e 43 6f 75 6e 74 29 0d 0a  ameList.Count)..
1b3b0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
1b3c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
1b3d0 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f  rror = String.Fo
1b3e0 72 6d 61 74 28 22 66 72 61 6d 65 77 6f 72 6b 20  rmat("framework 
1b3f0 6e 61 6d 65 20 63 6f 75 6e 74 20 7b 30 7d 20 64  name count {0} d
1b400 6f 65 73 20 6e 6f 74 20 22 20 2b 0d 0a 20 20 20  oes not " +..   
1b410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b420 20 22 6d 61 74 63 68 20 70 6c 61 74 66 6f 72 6d   "match platform
1b430 20 6e 61 6d 65 20 63 6f 75 6e 74 20 7b 31 7d 22   name count {1}"
1b440 2c 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 4c  , frameworkNameL
1b450 69 73 74 2e 43 6f 75 6e 74 2c 0d 0a 20 20 20 20  ist.Count,..    
1b460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b470 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 4c 69 73 74  platformNameList
1b480 2e 43 6f 75 6e 74 29 3b 0d 0a 0d 0a 20 20 20 20  .Count);....    
1b490 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
1b4a0 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
1b4b0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
1b4c0 20 20 20 20 20 20 20 20 66 6f 72 20 28 69 6e 74          for (int
1b4d0 20 69 6e 64 65 78 20 3d 20 30 3b 20 69 6e 64 65   index = 0; inde
1b4e0 78 20 3c 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d  x < frameworkNam
1b4f0 65 4c 69 73 74 2e 43 6f 75 6e 74 3b 20 69 6e 64  eList.Count; ind
1b500 65 78 2b 2b 29 0d 0a 20 20 20 20 20 20 20 20 20  ex++)..         
1b510 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
1b520 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
1b530 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54            // NOT
1b540 45 3a 20 47 72 61 62 20 74 68 65 20 6e 61 6d 65  E: Grab the name
1b550 20 6f 66 20 74 68 65 20 66 72 61 6d 65 77 6f 72   of the framewor
1b560 6b 20 28 65 2e 67 2e 20 22 2e 4e 45 54 46 72 61  k (e.g. ".NETFra
1b570 6d 65 77 6f 72 6b 22 29 0d 0a 20 20 20 20 20 20  mework")..      
1b580 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
1b590 20 20 20 61 6e 64 20 74 68 65 20 6e 61 6d 65 20     and the name 
1b5a0 6f 66 20 74 68 65 20 70 6c 61 74 66 6f 72 6d 20  of the platform 
1b5b0 28 65 2e 67 2e 20 22 57 69 6e 64 6f 77 73 43 45  (e.g. "WindowsCE
1b5c0 22 29 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ")...           
1b5d0 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
1b5e0 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
1b5f0 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 20 3d 20  frameworkName = 
1b600 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 4c 69 73  frameworkNameLis
1b610 74 5b 69 6e 64 65 78 5d 3b 0d 0a 20 20 20 20 20  t[index];..     
1b620 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
1b630 67 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 20 3d  g platformName =
1b640 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 4c 69 73   platformNameLis
1b650 74 5b 69 6e 64 65 78 5d 3b 0d 0a 0d 0a 20 20 20  t[index];....   
1b660 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
1b670 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1b680 20 2f 2f 20 4e 4f 54 45 3a 20 47 72 61 62 20 74   // NOTE: Grab t
1b690 68 65 20 73 75 70 70 6f 72 74 65 64 20 76 65 72  he supported ver
1b6a0 73 69 6f 6e 73 20 6f 66 20 74 68 69 73 20 70 61  sions of this pa
1b6b0 72 74 69 63 75 6c 61 72 0d 0a 20 20 20 20 20 20  rticular..      
1b6c0 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
1b6d0 20 20 20 66 72 61 6d 65 77 6f 72 6b 2e 0d 0a 20     framework... 
1b6e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1b6f0 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
1b700 20 20 20 56 65 72 73 69 6f 6e 4c 69 73 74 20 66     VersionList f
1b710 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 4c  rameworkVersionL
1b720 69 73 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ist;....        
1b730 20 20 20 20 20 20 20 20 69 66 20 28 21 66 72 61          if (!fra
1b740 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 4d 61 70  meworkVersionMap
1b750 2e 54 72 79 47 65 74 56 61 6c 75 65 28 0d 0a 20  .TryGetValue(.. 
1b760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b770 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b         framework
1b780 4e 61 6d 65 2c 20 6f 75 74 20 66 72 61 6d 65 77  Name, out framew
1b790 6f 72 6b 56 65 72 73 69 6f 6e 4c 69 73 74 29 20  orkVersionList) 
1b7a0 7c 7c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ||..            
1b7b0 20 20 20 20 20 20 20 20 28 66 72 61 6d 65 77 6f          (framewo
1b7c0 72 6b 56 65 72 73 69 6f 6e 4c 69 73 74 20 3d 3d  rkVersionList ==
1b7d0 20 6e 75 6c 6c 29 29 0d 0a 20 20 20 20 20 20 20   null))..       
1b7e0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
1b7f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b800 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20  continue;..     
1b810 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
1b820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b830 66 6f 72 65 61 63 68 20 28 56 65 72 73 69 6f 6e  foreach (Version
1b840 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f   frameworkVersio
1b850 6e 20 69 6e 20 66 72 61 6d 65 77 6f 72 6b 56 65  n in frameworkVe
1b860 72 73 69 6f 6e 4c 69 73 74 29 0d 0a 20 20 20 20  rsionList)..    
1b870 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
1b880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b890 20 20 20 54 72 61 63 65 4f 70 73 2e 54 72 61 63     TraceOps.Trac
1b8a0 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
1b8b0 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
1b8c0 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 72 2c  ePriority.Lower,
1b8d0 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20   traceCallback, 
1b8e0 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
1b8f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b900 20 20 20 20 20 20 20 20 22 66 72 61 6d 65 77 6f          "framewo
1b910 72 6b 4e 61 6d 65 20 3d 20 7b 30 7d 2c 20 66 72  rkName = {0}, fr
1b920 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 20 3d  ameworkVersion =
1b930 20 7b 31 7d 2c 20 22 20 2b 0d 0a 20 20 20 20 20   {1}, " +..     
1b940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b950 20 20 20 22 70 6c 61 74 66 6f 72 6d 4e 61 6d 65     "platformName
1b960 20 3d 20 7b 32 7d 22 2c 20 46 6f 72 44 69 73 70   = {2}", ForDisp
1b970 6c 61 79 28 66 72 61 6d 65 77 6f 72 6b 4e 61 6d  lay(frameworkNam
1b980 65 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e),..           
1b990 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72               For
1b9a0 44 69 73 70 6c 61 79 28 66 72 61 6d 65 77 6f 72  Display(framewor
1b9b0 6b 56 65 72 73 69 6f 6e 29 2c 0d 0a 20 20 20 20  kVersion),..    
1b9c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b9d0 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 70      ForDisplay(p
1b9e0 6c 61 74 66 6f 72 6d 4e 61 6d 65 29 29 2c 20 74  latformName)), t
1b9f0 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
1ba00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1ba10 20 20 20 20 20 20 69 66 20 28 21 48 61 76 65 46        if (!HaveF
1ba20 72 61 6d 65 77 6f 72 6b 28 0d 0a 20 20 20 20 20  ramework(..     
1ba30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ba40 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20         rootKey, 
1ba50 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 20 66  frameworkName, f
1ba60 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c  rameworkVersion,
1ba70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1ba80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 6c                pl
1ba90 61 74 66 6f 72 6d 4e 61 6d 65 2c 20 77 68 61 74  atformName, what
1baa0 49 66 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a 20  If, verbose)).. 
1bab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bac0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
1bad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
1bae0 61 63 65 4f 70 73 2e 54 72 61 63 65 28 54 72 61  aceOps.Trace(Tra
1baf0 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 2c 20  cePriority.Low, 
1bb00 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 0d 0a  traceCallback,..
1bb10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bb20 20 20 20 20 20 20 20 20 20 20 20 20 22 2e 4e 45              ".NE
1bb30 54 20 46 72 61 6d 65 77 6f 72 6b 20 6e 6f 74 20  T Framework not 
1bb40 66 6f 75 6e 64 2c 20 73 6b 69 70 70 69 6e 67 2e  found, skipping.
1bb50 2e 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ..",..          
1bb60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bb70 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
1bb80 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
1bb90 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
1bba0 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20  tinue;..        
1bbb0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
1bbc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1bbd0 20 20 20 20 20 69 66 20 28 63 61 6c 6c 62 61 63       if (callbac
1bbe0 6b 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  k == null)..    
1bbf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bc00 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 0d      continue;...
1bc10 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1bc20 20 20 20 20 20 69 66 20 28 21 63 61 6c 6c 62 61       if (!callba
1bc30 63 6b 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ck(..           
1bc40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bc50 20 72 6f 6f 74 4b 65 79 2c 20 66 72 61 6d 65 77   rootKey, framew
1bc60 6f 72 6b 4e 61 6d 65 2c 20 66 72 61 6d 65 77 6f  orkName, framewo
1bc70 72 6b 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20  rkVersion,..    
1bc80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bc90 20 20 20 20 20 20 20 20 70 6c 61 74 66 6f 72 6d          platform
1bca0 4e 61 6d 65 2c 20 63 6c 69 65 6e 74 44 61 74 61  Name, clientData
1bcb0 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73  , whatIf, verbos
1bcc0 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
1bcd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bce0 72 65 66 20 65 72 72 6f 72 29 29 0d 0a 20 20 20  ref error))..   
1bcf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bd00 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1bd10 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
1bd20 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
1bd30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
1bd40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1bd50 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
1bd60 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
1bd70 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a    return true;..
1bd80 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
1bd90 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
1bda0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
1bdb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1bdc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1bdd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1bde0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1bdf0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67  ....        #reg
1be00 69 6f 6e 20 50 65 72 2d 56 69 73 75 61 6c 20 53  ion Per-Visual S
1be10 74 75 64 69 6f 20 56 65 72 73 69 6f 6e 20 48 61  tudio Version Ha
1be20 6e 64 6c 69 6e 67 0d 0a 20 20 20 20 20 20 20 20  ndling..        
1be30 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 76  private static v
1be40 6f 69 64 20 49 6e 69 74 69 61 6c 69 7a 65 56 73  oid InitializeVs
1be50 52 6f 6f 74 4b 65 79 41 6e 64 49 64 73 28 29 0d  RootKeyAndIds().
1be60 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
1be70 20 20 20 20 20 20 20 20 69 66 20 28 76 73 52 6f          if (vsRo
1be80 6f 74 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  otKey == null)..
1be90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bea0 76 73 52 6f 6f 74 4b 65 79 20 3d 20 52 65 67 69  vsRootKey = Regi
1beb0 73 74 72 79 2e 4c 6f 63 61 6c 4d 61 63 68 69 6e  stry.LocalMachin
1bec0 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
1bed0 20 20 69 66 20 28 76 73 41 64 6f 4e 65 74 54 65    if (vsAdoNetTe
1bee0 63 68 6e 6f 6c 6f 67 79 49 64 20 3d 3d 20 6e 75  chnologyId == nu
1bef0 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
1bf00 20 20 20 20 20 76 73 41 64 6f 4e 65 74 54 65 63       vsAdoNetTec
1bf10 68 6e 6f 6c 6f 67 79 49 64 20 3d 20 6e 65 77 20  hnologyId = new 
1bf20 47 75 69 64 28 0d 0a 20 20 20 20 20 20 20 20 20  Guid(..         
1bf30 20 20 20 20 20 20 20 20 20 20 20 22 37 37 41 42             "77AB
1bf40 39 41 39 44 2d 37 38 42 39 2d 34 42 41 37 2d 39  9A9D-78B9-4BA7-9
1bf50 31 41 43 2d 38 37 33 46 35 33 33 38 46 31 44 32  1AC-873F5338F1D2
1bf60 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ");....         
1bf70 20 20 20 69 66 20 28 76 73 50 61 63 6b 61 67 65     if (vsPackage
1bf80 49 64 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  Id == null)..   
1bf90 20 20 20 20 20 20 20 20 20 20 20 20 20 76 73 50               vsP
1bfa0 61 63 6b 61 67 65 49 64 20 3d 20 6e 65 77 20 47  ackageId = new G
1bfb0 75 69 64 28 0d 0a 20 20 20 20 20 20 20 20 20 20  uid(..          
1bfc0 20 20 20 20 20 20 20 20 20 20 22 44 43 42 45 36            "DCBE6
1bfd0 43 38 44 2d 30 45 35 37 2d 34 30 39 39 2d 41 31  C8D-0E57-4099-A1
1bfe0 38 33 2d 39 38 46 46 37 34 43 36 34 44 39 43 22  83-98FF74C64D9C"
1bff0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
1c000 20 20 69 66 20 28 76 73 53 65 72 76 69 63 65 49    if (vsServiceI
1c010 64 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  d == null)..    
1c020 20 20 20 20 20 20 20 20 20 20 20 20 76 73 53 65              vsSe
1c030 72 76 69 63 65 49 64 20 3d 20 6e 65 77 20 47 75  rviceId = new Gu
1c040 69 64 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  id(..           
1c050 20 20 20 20 20 20 20 20 20 22 44 43 42 45 36 43           "DCBE6C
1c060 38 44 2d 30 45 35 37 2d 34 30 39 39 2d 41 31 38  8D-0E57-4099-A18
1c070 33 2d 39 38 46 46 37 34 43 36 34 44 39 44 22 29  3-98FF74C64D9D")
1c080 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
1c090 20 69 66 20 28 76 73 44 61 74 61 53 6f 75 72 63   if (vsDataSourc
1c0a0 65 73 49 64 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  esId == null).. 
1c0b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76                 v
1c0c0 73 44 61 74 61 53 6f 75 72 63 65 73 49 64 20 3d  sDataSourcesId =
1c0d0 20 6e 65 77 20 47 75 69 64 28 0d 0a 20 20 20 20   new Guid(..    
1c0e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c0f0 22 30 45 42 41 41 42 36 45 2d 43 41 38 30 2d 34  "0EBAAB6E-CA80-4
1c100 42 34 41 2d 38 44 44 46 2d 43 42 45 36 42 46 30  B4A-8DDF-CBE6BF0
1c110 35 38 43 37 31 22 29 3b 0d 0a 0d 0a 20 20 20 20  58C71");....    
1c120 20 20 20 20 20 20 20 20 69 66 20 28 76 73 44 61          if (vsDa
1c130 74 61 50 72 6f 76 69 64 65 72 49 64 20 3d 3d 20  taProviderId == 
1c140 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
1c150 20 20 20 20 20 20 20 76 73 44 61 74 61 50 72 6f         vsDataPro
1c160 76 69 64 65 72 49 64 20 3d 20 6e 65 77 20 47 75  viderId = new Gu
1c170 69 64 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  id(..           
1c180 20 20 20 20 20 20 20 20 20 22 30 45 42 41 41 42           "0EBAAB
1c190 36 45 2d 43 41 38 30 2d 34 42 34 41 2d 38 44 44  6E-CA80-4B4A-8DD
1c1a0 46 2d 43 42 45 36 42 46 30 35 38 43 37 30 22 29  F-CBE6BF058C70")
1c1b0 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  ;..        }....
1c1c0 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
1c1d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c1e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c1f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c200 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
1c210 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  ...        priva
1c220 74 65 20 73 74 61 74 69 63 20 76 6f 69 64 20 52  te static void R
1c230 65 73 65 74 56 73 46 72 61 6d 65 77 6f 72 6b 56  esetVsFrameworkV
1c240 65 72 73 69 6f 6e 4d 61 70 28 29 0d 0a 20 20 20  ersionMap()..   
1c250 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1c260 20 20 20 20 69 66 20 28 76 73 46 72 61 6d 65 77      if (vsFramew
1c270 6f 72 6b 56 65 72 73 69 6f 6e 4d 61 70 20 21 3d  orkVersionMap !=
1c280 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
1c290 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1c2a0 20 20 20 20 20 20 20 76 73 46 72 61 6d 65 77 6f         vsFramewo
1c2b0 72 6b 56 65 72 73 69 6f 6e 4d 61 70 2e 43 6c 65  rkVersionMap.Cle
1c2c0 61 72 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ar();..         
1c2d0 20 20 20 20 20 20 20 76 73 46 72 61 6d 65 77 6f         vsFramewo
1c2e0 72 6b 56 65 72 73 69 6f 6e 4d 61 70 20 3d 20 6e  rkVersionMap = n
1c2f0 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ull;..          
1c300 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a    }..        }..
1c310 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
1c320 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c330 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c340 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c350 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c360 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69  /....        pri
1c370 76 61 74 65 20 73 74 61 74 69 63 20 76 6f 69 64  vate static void
1c380 20 49 6e 69 74 69 61 6c 69 7a 65 56 73 46 72 61   InitializeVsFra
1c390 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 4d 61 70  meworkVersionMap
1c3a0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 43  (..            C
1c3b0 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 63 6f 6e  onfiguration con
1c3c0 66 69 67 75 72 61 74 69 6f 6e 0d 0a 20 20 20 20  figuration..    
1c3d0 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
1c3e0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
1c3f0 20 20 69 66 20 28 76 73 46 72 61 6d 65 77 6f 72    if (vsFramewor
1c400 6b 56 65 72 73 69 6f 6e 4d 61 70 20 3d 3d 20 6e  kVersionMap == n
1c410 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
1c420 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
1c430 20 20 20 20 20 76 73 46 72 61 6d 65 77 6f 72 6b       vsFramework
1c440 56 65 72 73 69 6f 6e 4d 61 70 20 3d 20 6e 65 77  VersionMap = new
1c450 20 56 65 72 73 69 6f 6e 4c 69 73 74 4d 61 70 28   VersionListMap(
1c460 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
1c470 20 20 20 20 20 20 2f 2f 20 76 73 46 72 61 6d 65        // vsFrame
1c480 77 6f 72 6b 56 65 72 73 69 6f 6e 4d 61 70 2e 41  workVersionMap.A
1c490 64 64 28 6e 65 77 20 56 65 72 73 69 6f 6e 28 38  dd(new Version(8
1c4a0 2c 20 30 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  , 0),..         
1c4b0 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 6e 65         //     ne
1c4c0 77 20 56 65 72 73 69 6f 6e 4c 69 73 74 28 6e 65  w VersionList(ne
1c4d0 77 20 56 65 72 73 69 6f 6e 5b 5d 20 7b 0d 0a 20  w Version[] {.. 
1c4e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1c4f0 2f 20 20 20 20 20 20 20 20 20 6e 65 77 20 56 65  /         new Ve
1c500 72 73 69 6f 6e 28 32 2c 20 30 2c 20 35 30 37 32  rsion(2, 0, 5072
1c510 37 29 20 7d 29 29 3b 0d 0a 0d 0a 20 20 20 20 20  7) }));....     
1c520 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 28             if ((
1c530 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d  configuration ==
1c540 20 6e 75 6c 6c 29 20 7c 7c 20 21 63 6f 6e 66 69   null) || !confi
1c550 67 75 72 61 74 69 6f 6e 2e 4e 6f 56 73 32 30 30  guration.NoVs200
1c560 38 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  8)..            
1c570 20 20 20 20 20 20 20 20 76 73 46 72 61 6d 65 77          vsFramew
1c580 6f 72 6b 56 65 72 73 69 6f 6e 4d 61 70 2e 41 64  orkVersionMap.Ad
1c590 64 28 6e 65 77 20 56 65 72 73 69 6f 6e 28 39 2c  d(new Version(9,
1c5a0 20 30 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20   0),..          
1c5b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 65                ne
1c5c0 77 20 56 65 72 73 69 6f 6e 4c 69 73 74 28 6e 65  w VersionList(ne
1c5d0 77 20 56 65 72 73 69 6f 6e 5b 5d 20 7b 0d 0a 20  w Version[] {.. 
1c5e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c5f0 20 20 20 20 20 20 20 20 20 20 20 6e 65 77 20 56             new V
1c600 65 72 73 69 6f 6e 28 32 2c 20 30 2c 20 35 30 37  ersion(2, 0, 507
1c610 32 37 29 20 7d 29 29 3b 0d 0a 0d 0a 20 20 20 20  27) }));....    
1c620 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
1c630 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d  (configuration =
1c640 3d 20 6e 75 6c 6c 29 20 7c 7c 20 21 63 6f 6e 66  = null) || !conf
1c650 69 67 75 72 61 74 69 6f 6e 2e 4e 6f 56 73 32 30  iguration.NoVs20
1c660 31 30 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  10)..           
1c670 20 20 20 20 20 20 20 20 20 76 73 46 72 61 6d 65           vsFrame
1c680 77 6f 72 6b 56 65 72 73 69 6f 6e 4d 61 70 2e 41  workVersionMap.A
1c690 64 64 28 6e 65 77 20 56 65 72 73 69 6f 6e 28 31  dd(new Version(1
1c6a0 30 2c 20 30 29 2c 0d 0a 20 20 20 20 20 20 20 20  0, 0),..        
1c6b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c6c0 6e 65 77 20 56 65 72 73 69 6f 6e 4c 69 73 74 28  new VersionList(
1c6d0 6e 65 77 20 56 65 72 73 69 6f 6e 5b 5d 20 7b 0d  new Version[] {.
1c6e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1c6f0 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 65 77               new
1c700 20 56 65 72 73 69 6f 6e 28 32 2c 20 30 2c 20 35   Version(2, 0, 5
1c710 30 37 32 37 29 2c 0d 0a 20 20 20 20 20 20 20 20  0727),..        
1c720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c730 20 20 20 20 20 20 20 20 6e 65 77 20 56 65 72 73          new Vers
1c740 69 6f 6e 28 34 2c 20 30 2c 20 33 30 33 31 39 29  ion(4, 0, 30319)
1c750 20 7d 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20   }));..         
1c760 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d     }..        }.
1c770 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
1c780 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c790 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c7a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c7b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c7c0 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72  //....        pr
1c7d0 69 76 61 74 65 20 73 74 61 74 69 63 20 76 6f 69  ivate static voi
1c7e0 64 20 52 65 73 65 74 41 6c 6c 56 73 56 65 72 73  d ResetAllVsVers
1c7f0 69 6f 6e 73 28 29 0d 0a 20 20 20 20 20 20 20 20  ions()..        
1c800 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  {..            i
1c810 66 20 28 76 73 56 65 72 73 69 6f 6e 4c 69 73 74  f (vsVersionList
1c820 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   != null)..     
1c830 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
1c840 20 20 20 20 20 20 20 20 20 20 76 73 56 65 72 73            vsVers
1c850 69 6f 6e 4c 69 73 74 2e 43 6c 65 61 72 28 29 3b  ionList.Clear();
1c860 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1c870 20 20 76 73 56 65 72 73 69 6f 6e 4c 69 73 74 20    vsVersionList 
1c880 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20  = null;..       
1c890 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
1c8a0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  }....        ///
1c8b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c8c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c8d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c8e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c8f0 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
1c900 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 76  private static v
1c910 6f 69 64 20 49 6e 69 74 69 61 6c 69 7a 65 41 6c  oid InitializeAl
1c920 6c 56 73 56 65 72 73 69 6f 6e 73 28 0d 0a 20 20  lVsVersions(..  
1c930 20 20 20 20 20 20 20 20 20 20 43 6f 6e 66 69 67            Config
1c940 75 72 61 74 69 6f 6e 20 63 6f 6e 66 69 67 75 72  uration configur
1c950 61 74 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 20  ation..         
1c960 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d     )..        {.
1c970 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
1c980 28 76 73 56 65 72 73 69 6f 6e 4c 69 73 74 20 3d  (vsVersionList =
1c990 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
1c9a0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1c9b0 20 20 20 20 20 20 20 20 76 73 56 65 72 73 69 6f          vsVersio
1c9c0 6e 4c 69 73 74 20 3d 20 6e 65 77 20 56 65 72 73  nList = new Vers
1c9d0 69 6f 6e 4c 69 73 74 28 29 3b 0d 0a 0d 0a 20 20  ionList();....  
1c9e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
1c9f0 20 76 73 56 65 72 73 69 6f 6e 4c 69 73 74 2e 41   vsVersionList.A
1ca00 64 64 28 6e 65 77 20 56 65 72 73 69 6f 6e 28 38  dd(new Version(8
1ca10 2c 20 30 29 29 3b 20 2f 2f 20 56 69 73 75 61 6c  , 0)); // Visual
1ca20 20 53 74 75 64 69 6f 20 32 30 30 35 0d 0a 0d 0a   Studio 2005....
1ca30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ca40 69 66 20 28 28 63 6f 6e 66 69 67 75 72 61 74 69  if ((configurati
1ca50 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 21  on == null) || !
1ca60 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 4e 6f  configuration.No
1ca70 56 73 32 30 30 38 29 0d 0a 20 20 20 20 20 20 20  Vs2008)..       
1ca80 20 20 20 20 20 20 20 20 20 20 20 20 20 76 73 56               vsV
1ca90 65 72 73 69 6f 6e 4c 69 73 74 2e 41 64 64 28 6e  ersionList.Add(n
1caa0 65 77 20 56 65 72 73 69 6f 6e 28 39 2c 20 30 29  ew Version(9, 0)
1cab0 29 3b 20 2f 2f 20 56 69 73 75 61 6c 20 53 74 75  ); // Visual Stu
1cac0 64 69 6f 20 32 30 30 38 0d 0a 0d 0a 20 20 20 20  dio 2008....    
1cad0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
1cae0 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d  (configuration =
1caf0 3d 20 6e 75 6c 6c 29 20 7c 7c 20 21 63 6f 6e 66  = null) || !conf
1cb00 69 67 75 72 61 74 69 6f 6e 2e 4e 6f 56 73 32 30  iguration.NoVs20
1cb10 31 30 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  10)..           
1cb20 20 20 20 20 20 20 20 20 20 76 73 56 65 72 73 69           vsVersi
1cb30 6f 6e 4c 69 73 74 2e 41 64 64 28 6e 65 77 20 56  onList.Add(new V
1cb40 65 72 73 69 6f 6e 28 31 30 2c 20 30 29 29 3b 2f  ersion(10, 0));/
1cb50 2f 20 56 69 73 75 61 6c 20 53 74 75 64 69 6f 20  / Visual Studio 
1cb60 32 30 31 30 0d 0a 20 20 20 20 20 20 20 20 20 20  2010..          
1cb70 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a    }..        }..
1cb80 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
1cb90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cba0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cbb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cbc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cbd0 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69  /....        pri
1cbe0 76 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f 6c  vate static bool
1cbf0 20 48 61 76 65 56 73 56 65 72 73 69 6f 6e 28 0d   HaveVsVersion(.
1cc00 0a 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67  .            Reg
1cc10 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79  istryKey rootKey
1cc20 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 56  ,..            V
1cc30 65 72 73 69 6f 6e 20 76 73 56 65 72 73 69 6f 6e  ersion vsVersion
1cc40 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
1cc50 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20  ool whatIf,..   
1cc60 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65           bool ve
1cc70 72 62 6f 73 65 0d 0a 20 20 20 20 20 20 20 20 20  rbose..         
1cc80 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d     )..        {.
1cc90 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72  .            str
1cca0 69 6e 67 20 66 6f 72 6d 61 74 20 3d 20 22 53 6f  ing format = "So
1ccb0 66 74 77 61 72 65 5c 5c 4d 69 63 72 6f 73 6f 66  ftware\\Microsof
1ccc0 74 5c 5c 56 69 73 75 61 6c 53 74 75 64 69 6f 5c  t\\VisualStudio\
1ccd0 5c 7b 30 7d 22 3b 0d 0a 20 20 20 20 20 20 20 20  \{0}";..        
1cce0 20 20 20 20 73 74 72 69 6e 67 20 6b 65 79 4e 61      string keyNa
1ccf0 6d 65 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d  me = String.Form
1cd00 61 74 28 66 6f 72 6d 61 74 2c 20 76 73 56 65 72  at(format, vsVer
1cd10 73 69 6f 6e 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  sion);....      
1cd20 20 20 20 20 20 20 75 73 69 6e 67 20 28 4d 6f 63        using (Moc
1cd30 6b 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65 79  kRegistryKey key
1cd40 20 3d 20 52 65 67 69 73 74 72 79 48 65 6c 70 65   = RegistryHelpe
1cd50 72 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20  r.OpenSubKey(.. 
1cd60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cd70 20 20 20 72 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e     rootKey, keyN
1cd80 61 6d 65 2c 20 66 61 6c 73 65 2c 20 77 68 61 74  ame, false, what
1cd90 49 66 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a 20  If, verbose)).. 
1cda0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
1cdb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
1cdc0 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a   (key == null)..
1cdd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cde0 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
1cdf0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
1ce00 20 20 20 20 20 6f 62 6a 65 63 74 20 76 61 6c 75       object valu
1ce10 65 20 3d 20 52 65 67 69 73 74 72 79 48 65 6c 70  e = RegistryHelp
1ce20 65 72 2e 47 65 74 56 61 6c 75 65 28 0d 0a 20 20  er.GetValue(..  
1ce30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ce40 20 20 6b 65 79 2c 20 22 49 6e 73 74 61 6c 6c 44    key, "InstallD
1ce50 69 72 22 2c 20 6e 75 6c 6c 2c 20 77 68 61 74 49  ir", null, whatI
1ce60 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a  f, verbose);....
1ce70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ce80 69 66 20 28 21 28 76 61 6c 75 65 20 69 73 20 73  if (!(value is s
1ce90 74 72 69 6e 67 29 29 0d 0a 20 20 20 20 20 20 20  tring))..       
1cea0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
1ceb0 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20  urn false;....  
1cec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
1ced0 72 69 6e 67 20 64 69 72 65 63 74 6f 72 79 20 3d  ring directory =
1cee0 20 28 73 74 72 69 6e 67 29 76 61 6c 75 65 3b 0d   (string)value;.
1cef0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1cf00 20 20 20 69 66 20 28 53 74 72 69 6e 67 2e 49 73     if (String.Is
1cf10 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 64 69 72 65  NullOrEmpty(dire
1cf20 63 74 6f 72 79 29 29 0d 0a 20 20 20 20 20 20 20  ctory))..       
1cf30 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
1cf40 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20  urn false;....  
1cf50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
1cf60 20 28 21 44 69 72 65 63 74 6f 72 79 2e 45 78 69   (!Directory.Exi
1cf70 73 74 73 28 64 69 72 65 63 74 6f 72 79 29 29 0d  sts(directory)).
1cf80 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1cf90 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
1cfa0 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
1cfb0 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75        return tru
1cfc0 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
1cfd0 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  }..        }....
1cfe0 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
1cff0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d000 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d010 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d020 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
1d030 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  ...        priva
1d040 74 65 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 46  te static bool F
1d050 6f 72 45 61 63 68 56 73 56 65 72 73 69 6f 6e 52  orEachVsVersionR
1d060 65 67 69 73 74 72 79 28 0d 0a 20 20 20 20 20 20  egistry(..      
1d070 20 20 20 20 20 20 56 69 73 75 61 6c 53 74 75 64        VisualStud
1d080 69 6f 52 65 67 69 73 74 72 79 43 61 6c 6c 62 61  ioRegistryCallba
1d090 63 6b 20 63 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20  ck callback,..  
1d0a0 20 20 20 20 20 20 20 20 20 20 47 75 69 64 20 70            Guid p
1d0b0 61 63 6b 61 67 65 49 64 2c 0d 0a 20 20 20 20 20  ackageId,..     
1d0c0 20 20 20 20 20 20 20 47 75 69 64 20 73 65 72 76         Guid serv
1d0d0 69 63 65 49 64 2c 0d 0a 20 20 20 20 20 20 20 20  iceId,..        
1d0e0 20 20 20 20 47 75 69 64 20 64 61 74 61 53 6f 75      Guid dataSou
1d0f0 72 63 65 49 64 2c 0d 0a 20 20 20 20 20 20 20 20  rceId,..        
1d100 20 20 20 20 47 75 69 64 20 64 61 74 61 50 72 6f      Guid dataPro
1d110 76 69 64 65 72 49 64 2c 0d 0a 20 20 20 20 20 20  viderId,..      
1d120 20 20 20 20 20 20 6f 62 6a 65 63 74 20 63 6c 69        object cli
1d130 65 6e 74 44 61 74 61 2c 0d 0a 20 20 20 20 20 20  entData,..      
1d140 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49        bool whatI
1d150 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f,..            
1d160 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a 20  bool verbose,.. 
1d170 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20 73             ref s
1d180 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20  tring error..   
1d190 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
1d1a0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1d1b0 20 20 20 52 65 67 69 73 74 72 79 4b 65 79 20 72     RegistryKey r
1d1c0 6f 6f 74 4b 65 79 20 3d 20 76 73 52 6f 6f 74 4b  ootKey = vsRootK
1d1d0 65 79 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ey;....         
1d1e0 20 20 20 69 66 20 28 72 6f 6f 74 4b 65 79 20 3d     if (rootKey =
1d1f0 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
1d200 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1d210 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
1d220 22 69 6e 76 61 6c 69 64 20 72 6f 6f 74 20 6b 65  "invalid root ke
1d230 79 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  y";..           
1d240 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
1d250 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
1d260 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
1d270 20 69 66 20 28 21 4f 62 6a 65 63 74 2e 52 65 66   if (!Object.Ref
1d280 65 72 65 6e 63 65 45 71 75 61 6c 73 28 72 6f 6f  erenceEquals(roo
1d290 74 4b 65 79 2c 20 52 65 67 69 73 74 72 79 2e 43  tKey, Registry.C
1d2a0 75 72 72 65 6e 74 55 73 65 72 29 20 26 26 0d 0a  urrentUser) &&..
1d2b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d2c0 21 4f 62 6a 65 63 74 2e 52 65 66 65 72 65 6e 63  !Object.Referenc
1d2d0 65 45 71 75 61 6c 73 28 72 6f 6f 74 4b 65 79 2c  eEquals(rootKey,
1d2e0 20 52 65 67 69 73 74 72 79 2e 4c 6f 63 61 6c 4d   Registry.LocalM
1d2f0 61 63 68 69 6e 65 29 29 0d 0a 20 20 20 20 20 20  achine))..      
1d300 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1d310 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
1d320 20 22 72 6f 6f 74 20 6b 65 79 20 6d 75 73 74 20   "root key must 
1d330 62 65 20 70 65 72 2d 75 73 65 72 20 6f 72 20 70  be per-user or p
1d340 65 72 2d 6d 61 63 68 69 6e 65 22 3b 0d 0a 20 20  er-machine";..  
1d350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
1d360 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
1d370 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
1d380 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76 73            if (vs
1d390 56 65 72 73 69 6f 6e 4c 69 73 74 20 3d 3d 20 6e  VersionList == n
1d3a0 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
1d3b0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
1d3c0 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 6e 6f       error = "no
1d3d0 20 56 53 20 76 65 72 73 69 6f 6e 73 20 66 6f 75   VS versions fou
1d3e0 6e 64 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  nd";..          
1d3f0 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
1d400 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se;..           
1d410 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
1d420 20 20 66 6f 72 65 61 63 68 20 28 56 65 72 73 69    foreach (Versi
1d430 6f 6e 20 76 73 56 65 72 73 69 6f 6e 20 69 6e 20  on vsVersion in 
1d440 76 73 56 65 72 73 69 6f 6e 4c 69 73 74 29 0d 0a  vsVersionList)..
1d450 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
1d460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
1d470 72 61 63 65 4f 70 73 2e 54 72 61 63 65 28 0d 0a  raceOps.Trace(..
1d480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d490 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69 74      TracePriorit
1d4a0 79 2e 4c 6f 77 65 72 2c 20 74 72 61 63 65 43 61  y.Lower, traceCa
1d4b0 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46  llback, String.F
1d4c0 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
1d4d0 20 20 20 20 20 20 20 20 20 20 20 20 22 76 73 56              "vsV
1d4e0 65 72 73 69 6f 6e 20 3d 20 7b 30 7d 22 2c 20 46  ersion = {0}", F
1d4f0 6f 72 44 69 73 70 6c 61 79 28 76 73 56 65 72 73  orDisplay(vsVers
1d500 69 6f 6e 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  ion)),..        
1d510 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
1d520 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
1d530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
1d540 66 20 28 21 48 61 76 65 56 73 56 65 72 73 69 6f  f (!HaveVsVersio
1d550 6e 28 72 6f 6f 74 4b 65 79 2c 20 76 73 56 65 72  n(rootKey, vsVer
1d560 73 69 6f 6e 2c 20 77 68 61 74 49 66 2c 20 76 65  sion, whatIf, ve
1d570 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20  rbose))..       
1d580 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
1d590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d5a0 54 72 61 63 65 4f 70 73 2e 54 72 61 63 65 28 54  TraceOps.Trace(T
1d5b0 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77  racePriority.Low
1d5c0 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c  , traceCallback,
1d5d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1d5e0 20 20 20 20 20 20 20 20 20 20 22 56 69 73 75 61            "Visua
1d5f0 6c 20 53 74 75 64 69 6f 20 76 65 72 73 69 6f 6e  l Studio version
1d600 20 6e 6f 74 20 66 6f 75 6e 64 2c 20 73 6b 69 70   not found, skip
1d610 70 69 6e 67 2e 2e 2e 22 2c 0d 0a 20 20 20 20 20  ping...",..     
1d620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d630 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
1d640 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
1d650 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e            contin
1d660 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
1d670 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
1d680 20 20 20 20 20 20 20 20 20 20 69 66 20 28 63 61            if (ca
1d690 6c 6c 62 61 63 6b 20 3d 3d 20 6e 75 6c 6c 29 0d  llback == null).
1d6a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1d6b0 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a       continue;..
1d6c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1d6d0 20 20 69 66 20 28 21 63 61 6c 6c 62 61 63 6b 28    if (!callback(
1d6e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1d6f0 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65            rootKe
1d700 79 2c 20 76 73 56 65 72 73 69 6f 6e 2c 20 70 61  y, vsVersion, pa
1d710 63 6b 61 67 65 49 64 2c 20 73 65 72 76 69 63 65  ckageId, service
1d720 49 64 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  Id,..           
1d730 20 20 20 20 20 20 20 20 20 20 20 20 20 64 61 74               dat
1d740 61 53 6f 75 72 63 65 49 64 2c 20 64 61 74 61 50  aSourceId, dataP
1d750 72 6f 76 69 64 65 72 49 64 2c 20 63 6c 69 65 6e  roviderId, clien
1d760 74 44 61 74 61 2c 20 77 68 61 74 49 66 2c 0d 0a  tData, whatIf,..
1d770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d780 20 20 20 20 20 20 20 20 76 65 72 62 6f 73 65 2c          verbose,
1d790 20 72 65 66 20 65 72 72 6f 72 29 29 0d 0a 20 20   ref error))..  
1d7a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
1d7b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1d7c0 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
1d7d0 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
1d7e0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
1d7f0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
1d800 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b      return true;
1d810 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
1d820 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
1d830 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
1d840 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d850 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d860 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d870 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d880 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72  //....        #r
1d890 65 67 69 6f 6e 20 43 6f 6e 66 69 67 75 72 61 74  egion Configurat
1d8a0 69 6f 6e 20 46 69 6c 65 20 48 61 6e 64 6c 69 6e  ion File Handlin
1d8b0 67 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  g..        priva
1d8c0 74 65 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 41  te static bool A
1d8d0 64 64 44 62 50 72 6f 76 69 64 65 72 46 61 63 74  ddDbProviderFact
1d8e0 6f 72 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ory(..          
1d8f0 20 20 73 74 72 69 6e 67 20 66 69 6c 65 4e 61 6d    string fileNam
1d900 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
1d910 73 74 72 69 6e 67 20 69 6e 76 61 72 69 61 6e 74  string invariant
1d920 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  ,..            s
1d930 74 72 69 6e 67 20 6e 61 6d 65 2c 0d 0a 20 20 20  tring name,..   
1d940 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
1d950 64 65 73 63 72 69 70 74 69 6f 6e 2c 0d 0a 20 20  description,..  
1d960 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
1d970 20 74 79 70 65 4e 61 6d 65 2c 0d 0a 20 20 20 20   typeName,..    
1d980 20 20 20 20 20 20 20 20 41 73 73 65 6d 62 6c 79          Assembly
1d990 4e 61 6d 65 20 61 73 73 65 6d 62 6c 79 4e 61 6d  Name assemblyNam
1d9a0 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
1d9b0 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20  bool whatIf,..  
1d9c0 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76            bool v
1d9d0 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20  erbose,..       
1d9e0 20 20 20 20 20 72 65 66 20 62 6f 6f 6c 20 73 61       ref bool sa
1d9f0 76 65 64 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ved,..          
1da00 20 20 72 65 66 20 73 74 72 69 6e 67 20 65 72 72    ref string err
1da10 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  or..            
1da20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
1da30 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 64            bool d
1da40 69 72 74 79 20 3d 20 66 61 6c 73 65 3b 0d 0a 20  irty = false;.. 
1da50 20 20 20 20 20 20 20 20 20 20 20 58 6d 6c 44 6f             XmlDo
1da60 63 75 6d 65 6e 74 20 64 6f 63 75 6d 65 6e 74 20  cument document 
1da70 3d 20 6e 65 77 20 58 6d 6c 44 6f 63 75 6d 65 6e  = new XmlDocumen
1da80 74 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  t();....        
1da90 20 20 20 20 64 6f 63 75 6d 65 6e 74 2e 50 72 65      document.Pre
1daa0 73 65 72 76 65 57 68 69 74 65 73 70 61 63 65 20  serveWhitespace 
1dab0 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20  = true;..       
1dac0 20 20 20 20 20 64 6f 63 75 6d 65 6e 74 2e 4c 6f       document.Lo
1dad0 61 64 28 66 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d  ad(fileName);...
1dae0 0a 20 20 20 20 20 20 20 20 20 20 20 20 58 6d 6c  .            Xml
1daf0 45 6c 65 6d 65 6e 74 20 65 6c 65 6d 65 6e 74 20  Element element 
1db00 3d 20 64 6f 63 75 6d 65 6e 74 2e 53 65 6c 65 63  = document.Selec
1db10 74 53 69 6e 67 6c 65 4e 6f 64 65 28 53 74 72 69  tSingleNode(Stri
1db20 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
1db30 20 20 20 20 20 20 20 20 20 20 20 20 58 50 61 74              XPat
1db40 68 46 6f 72 41 64 64 45 6c 65 6d 65 6e 74 2c 20  hForAddElement, 
1db50 69 6e 76 61 72 69 61 6e 74 29 29 20 61 73 20 58  invariant)) as X
1db60 6d 6c 45 6c 65 6d 65 6e 74 3b 0d 0a 0d 0a 20 20  mlElement;....  
1db70 20 20 20 20 20 20 20 20 20 20 69 66 20 28 65 6c            if (el
1db80 65 6d 65 6e 74 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  ement == null)..
1db90 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
1dba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
1dbb0 74 72 69 6e 67 5b 5d 20 65 6c 65 6d 65 6e 74 4e  tring[] elementN
1dbc0 61 6d 65 73 20 3d 20 7b 0d 0a 20 20 20 20 20 20  ames = {..      
1dbd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dbe0 20 20 22 73 79 73 74 65 6d 2e 64 61 74 61 22 2c    "system.data",
1dbf0 20 22 44 62 50 72 6f 76 69 64 65 72 46 61 63 74   "DbProviderFact
1dc00 6f 72 69 65 73 22 0d 0a 20 20 20 20 20 20 20 20  ories"..        
1dc10 20 20 20 20 20 20 20 20 20 20 20 20 7d 3b 0d 0a              };..
1dc20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1dc30 20 20 58 6d 6c 45 6c 65 6d 65 6e 74 20 70 72 65    XmlElement pre
1dc40 76 69 6f 75 73 45 6c 65 6d 65 6e 74 20 3d 0d 0a  viousElement =..
1dc50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dc60 20 20 20 20 64 6f 63 75 6d 65 6e 74 2e 44 6f 63      document.Doc
1dc70 75 6d 65 6e 74 45 6c 65 6d 65 6e 74 3b 20 2f 2a  umentElement; /*
1dc80 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 2a   configuration *
1dc90 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
1dca0 20 20 20 20 20 66 6f 72 65 61 63 68 20 28 73 74       foreach (st
1dcb0 72 69 6e 67 20 65 6c 65 6d 65 6e 74 4e 61 6d 65  ring elementName
1dcc0 20 69 6e 20 65 6c 65 6d 65 6e 74 4e 61 6d 65 73   in elementNames
1dcd0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
1dce0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
1dcf0 20 20 20 20 20 20 20 20 20 20 65 6c 65 6d 65 6e            elemen
1dd00 74 20 3d 20 70 72 65 76 69 6f 75 73 45 6c 65 6d  t = previousElem
1dd10 65 6e 74 2e 53 65 6c 65 63 74 53 69 6e 67 6c 65  ent.SelectSingle
1dd20 4e 6f 64 65 28 0d 0a 20 20 20 20 20 20 20 20 20  Node(..         
1dd30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
1dd40 6c 65 6d 65 6e 74 4e 61 6d 65 29 20 61 73 20 58  lementName) as X
1dd50 6d 6c 45 6c 65 6d 65 6e 74 3b 0d 0a 0d 0a 20 20  mlElement;....  
1dd60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dd70 20 20 69 66 20 28 65 6c 65 6d 65 6e 74 20 3d 3d    if (element ==
1dd80 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
1dd90 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
1dda0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ddb0 20 20 20 20 20 20 20 65 6c 65 6d 65 6e 74 20 3d         element =
1ddc0 20 64 6f 63 75 6d 65 6e 74 2e 43 72 65 61 74 65   document.Create
1ddd0 45 6c 65 6d 65 6e 74 28 0d 0a 20 20 20 20 20 20  Element(..      
1dde0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ddf0 20 20 20 20 20 20 65 6c 65 6d 65 6e 74 4e 61 6d        elementNam
1de00 65 2c 20 53 74 72 69 6e 67 2e 45 6d 70 74 79 29  e, String.Empty)
1de10 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
1de20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 72 65               pre
1de30 76 69 6f 75 73 45 6c 65 6d 65 6e 74 2e 41 70 70  viousElement.App
1de40 65 6e 64 43 68 69 6c 64 28 65 6c 65 6d 65 6e 74  endChild(element
1de50 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
1de60 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
1de70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1de80 20 70 72 65 76 69 6f 75 73 45 6c 65 6d 65 6e 74   previousElement
1de90 20 3d 20 65 6c 65 6d 65 6e 74 3b 0d 0a 20 20 20   = element;..   
1dea0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
1deb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1dec0 20 20 65 6c 65 6d 65 6e 74 20 3d 20 64 6f 63 75    element = docu
1ded0 6d 65 6e 74 2e 43 72 65 61 74 65 45 6c 65 6d 65  ment.CreateEleme
1dee0 6e 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  nt(..           
1def0 20 20 20 20 20 20 20 20 20 22 61 64 64 22 2c 20           "add", 
1df00 53 74 72 69 6e 67 2e 45 6d 70 74 79 29 3b 0d 0a  String.Empty);..
1df10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1df20 20 20 70 72 65 76 69 6f 75 73 45 6c 65 6d 65 6e    previousElemen
1df30 74 2e 41 70 70 65 6e 64 43 68 69 6c 64 28 65 6c  t.AppendChild(el
1df40 65 6d 65 6e 74 29 3b 0d 0a 0d 0a 20 20 20 20 20  ement);....     
1df50 20 20 20 20 20 20 20 20 20 20 20 64 69 72 74 79             dirty
1df60 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20   = true;..      
1df70 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
1df80 20 20 20 20 20 20 20 69 66 20 28 21 53 74 72 69         if (!Stri
1df90 6e 67 2e 45 71 75 61 6c 73 28 65 6c 65 6d 65 6e  ng.Equals(elemen
1dfa0 74 2e 47 65 74 41 74 74 72 69 62 75 74 65 28 22  t.GetAttribute("
1dfb0 6e 61 6d 65 22 29 2c 0d 0a 20 20 20 20 20 20 20  name"),..       
1dfc0 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 61 6d               nam
1dfd0 65 2c 20 53 74 72 69 6e 67 43 6f 6d 70 61 72 69  e, StringCompari
1dfe0 73 6f 6e 2e 49 6e 76 61 72 69 61 6e 74 43 75 6c  son.InvariantCul
1dff0 74 75 72 65 29 29 0d 0a 20 20 20 20 20 20 20 20  ture))..        
1e000 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1e010 20 20 20 20 20 20 20 65 6c 65 6d 65 6e 74 2e 53         element.S
1e020 65 74 41 74 74 72 69 62 75 74 65 28 22 6e 61 6d  etAttribute("nam
1e030 65 22 2c 20 6e 61 6d 65 29 3b 0d 0a 20 20 20 20  e", name);..    
1e040 20 20 20 20 20 20 20 20 20 20 20 20 64 69 72 74              dirt
1e050 79 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20  y = true;..     
1e060 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
1e070 20 20 20 20 20 20 20 20 69 66 20 28 21 53 74 72          if (!Str
1e080 69 6e 67 2e 45 71 75 61 6c 73 28 65 6c 65 6d 65  ing.Equals(eleme
1e090 6e 74 2e 47 65 74 41 74 74 72 69 62 75 74 65 28  nt.GetAttribute(
1e0a0 22 69 6e 76 61 72 69 61 6e 74 22 29 2c 0d 0a 20  "invariant"),.. 
1e0b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e0c0 20 20 20 69 6e 76 61 72 69 61 6e 74 2c 20 53 74     invariant, St
1e0d0 72 69 6e 67 43 6f 6d 70 61 72 69 73 6f 6e 2e 49  ringComparison.I
1e0e0 6e 76 61 72 69 61 6e 74 43 75 6c 74 75 72 65 29  nvariantCulture)
1e0f0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
1e100 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1e110 20 20 65 6c 65 6d 65 6e 74 2e 53 65 74 41 74 74    element.SetAtt
1e120 72 69 62 75 74 65 28 22 69 6e 76 61 72 69 61 6e  ribute("invarian
1e130 74 22 2c 20 69 6e 76 61 72 69 61 6e 74 29 3b 0d  t", invariant);.
1e140 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1e150 20 64 69 72 74 79 20 3d 20 74 72 75 65 3b 0d 0a   dirty = true;..
1e160 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
1e170 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
1e180 28 21 53 74 72 69 6e 67 2e 45 71 75 61 6c 73 28  (!String.Equals(
1e190 65 6c 65 6d 65 6e 74 2e 47 65 74 41 74 74 72 69  element.GetAttri
1e1a0 62 75 74 65 28 22 64 65 73 63 72 69 70 74 69 6f  bute("descriptio
1e1b0 6e 22 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  n"),..          
1e1c0 20 20 20 20 20 20 20 20 20 20 64 65 73 63 72 69            descri
1e1d0 70 74 69 6f 6e 2c 20 53 74 72 69 6e 67 43 6f 6d  ption, StringCom
1e1e0 70 61 72 69 73 6f 6e 2e 49 6e 76 61 72 69 61 6e  parison.Invarian
1e1f0 74 43 75 6c 74 75 72 65 29 29 0d 0a 20 20 20 20  tCulture))..    
1e200 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
1e210 20 20 20 20 20 20 20 20 20 20 20 65 6c 65 6d 65             eleme
1e220 6e 74 2e 53 65 74 41 74 74 72 69 62 75 74 65 28  nt.SetAttribute(
1e230 22 64 65 73 63 72 69 70 74 69 6f 6e 22 2c 20 64  "description", d
1e240 65 73 63 72 69 70 74 69 6f 6e 29 3b 0d 0a 20 20  escription);..  
1e250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 69                di
1e260 72 74 79 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20  rty = true;..   
1e270 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
1e280 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
1e290 20 66 75 6c 6c 54 79 70 65 4e 61 6d 65 20 3d 20   fullTypeName = 
1e2a0 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22 7b  String.Format("{
1e2b0 30 7d 2c 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20  0}, {1}",..     
1e2c0 20 20 20 20 20 20 20 20 20 20 20 74 79 70 65 4e             typeN
1e2d0 61 6d 65 2c 20 61 73 73 65 6d 62 6c 79 4e 61 6d  ame, assemblyNam
1e2e0 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
1e2f0 20 20 20 69 66 20 28 21 53 74 72 69 6e 67 2e 45     if (!String.E
1e300 71 75 61 6c 73 28 65 6c 65 6d 65 6e 74 2e 47 65  quals(element.Ge
1e310 74 41 74 74 72 69 62 75 74 65 28 22 74 79 70 65  tAttribute("type
1e320 22 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  "),..           
1e330 20 20 20 20 20 20 20 20 20 66 75 6c 6c 54 79 70           fullTyp
1e340 65 4e 61 6d 65 2c 20 53 74 72 69 6e 67 43 6f 6d  eName, StringCom
1e350 70 61 72 69 73 6f 6e 2e 49 6e 76 61 72 69 61 6e  parison.Invarian
1e360 74 43 75 6c 74 75 72 65 29 29 0d 0a 20 20 20 20  tCulture))..    
1e370 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
1e380 20 20 20 20 20 20 20 20 20 20 20 65 6c 65 6d 65             eleme
1e390 6e 74 2e 53 65 74 41 74 74 72 69 62 75 74 65 28  nt.SetAttribute(
1e3a0 22 74 79 70 65 22 2c 20 66 75 6c 6c 54 79 70 65  "type", fullType
1e3b0 4e 61 6d 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  Name);..        
1e3c0 20 20 20 20 20 20 20 20 64 69 72 74 79 20 3d 20          dirty = 
1e3d0 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  true;..         
1e3e0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
1e3f0 20 20 20 20 69 66 20 28 64 69 72 74 79 20 7c 7c      if (dirty ||
1e400 20 77 68 61 74 49 66 29 0d 0a 20 20 20 20 20 20   whatIf)..      
1e410 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1e420 20 20 20 20 20 20 20 20 20 69 66 20 28 76 65 72           if (ver
1e430 62 6f 73 65 29 0d 0a 20 20 20 20 20 20 20 20 20  bose)..         
1e440 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
1e450 4f 70 73 2e 54 72 61 63 65 28 0d 0a 20 20 20 20  Ops.Trace(..    
1e460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e470 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69 74      TracePriorit
1e480 79 2e 48 69 67 68 65 73 74 2c 20 74 72 61 63 65  y.Highest, trace
1e490 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67  Callback, String
1e4a0 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
1e4b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e4c0 20 20 22 65 6c 65 6d 65 6e 74 20 3d 20 7b 30 7d    "element = {0}
1e4d0 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 65 6c  ", ForDisplay(el
1e4e0 65 6d 65 6e 74 29 29 2c 20 74 72 61 63 65 43 61  ement)), traceCa
1e4f0 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
1e500 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
1e510 21 77 68 61 74 49 66 29 0d 0a 20 20 20 20 20 20  !whatIf)..      
1e520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 6f                do
1e530 63 75 6d 65 6e 74 2e 53 61 76 65 28 66 69 6c 65  cument.Save(file
1e540 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  Name);....      
1e550 20 20 20 20 20 20 20 20 20 20 73 61 76 65 64 20            saved 
1e560 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20  = true;..       
1e570 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
1e580 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75        return tru
1e590 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d  e;..        }...
1e5a0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
1e5b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e5c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e5d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e5e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e5f0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  ....        priv
1e600 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f 6c 20  ate static bool 
1e610 52 65 6d 6f 76 65 44 62 50 72 6f 76 69 64 65 72  RemoveDbProvider
1e620 46 61 63 74 6f 72 79 28 0d 0a 20 20 20 20 20 20  Factory(..      
1e630 20 20 20 20 20 20 73 74 72 69 6e 67 20 66 69 6c        string fil
1e640 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20  eName,..        
1e650 20 20 20 20 73 74 72 69 6e 67 20 69 6e 76 61 72      string invar
1e660 69 61 6e 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  iant,..         
1e670 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d     bool whatIf,.
1e680 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
1e690 6c 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20  l verbose,..    
1e6a0 20 20 20 20 20 20 20 20 72 65 66 20 62 6f 6f 6c          ref bool
1e6b0 20 73 61 76 65 64 2c 0d 0a 20 20 20 20 20 20 20   saved,..       
1e6c0 20 20 20 20 20 72 65 66 20 73 74 72 69 6e 67 20       ref string 
1e6d0 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20  error..         
1e6e0 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d     )..        {.
1e6f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
1e700 6c 20 64 69 72 74 79 20 3d 20 66 61 6c 73 65 3b  l dirty = false;
1e710 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 58 6d  ..            Xm
1e720 6c 44 6f 63 75 6d 65 6e 74 20 64 6f 63 75 6d 65  lDocument docume
1e730 6e 74 20 3d 20 6e 65 77 20 58 6d 6c 44 6f 63 75  nt = new XmlDocu
1e740 6d 65 6e 74 28 29 3b 0d 0a 0d 0a 20 20 20 20 20  ment();....     
1e750 20 20 20 20 20 20 20 64 6f 63 75 6d 65 6e 74 2e         document.
1e760 50 72 65 73 65 72 76 65 57 68 69 74 65 73 70 61  PreserveWhitespa
1e770 63 65 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20  ce = true;..    
1e780 20 20 20 20 20 20 20 20 64 6f 63 75 6d 65 6e 74          document
1e790 2e 4c 6f 61 64 28 66 69 6c 65 4e 61 6d 65 29 3b  .Load(fileName);
1e7a0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1e7b0 58 6d 6c 45 6c 65 6d 65 6e 74 20 65 6c 65 6d 65  XmlElement eleme
1e7c0 6e 74 20 3d 20 64 6f 63 75 6d 65 6e 74 2e 53 65  nt = document.Se
1e7d0 6c 65 63 74 53 69 6e 67 6c 65 4e 6f 64 65 28 53  lectSingleNode(S
1e7e0 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
1e7f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 58                 X
1e800 50 61 74 68 46 6f 72 41 64 64 45 6c 65 6d 65 6e  PathForAddElemen
1e810 74 2c 20 69 6e 76 61 72 69 61 6e 74 29 29 20 61  t, invariant)) a
1e820 73 20 58 6d 6c 45 6c 65 6d 65 6e 74 3b 0d 0a 0d  s XmlElement;...
1e830 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
1e840 28 65 6c 65 6d 65 6e 74 20 21 3d 20 6e 75 6c 6c  (element != null
1e850 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
1e860 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1e870 20 20 65 6c 65 6d 65 6e 74 2e 50 61 72 65 6e 74    element.Parent
1e880 4e 6f 64 65 2e 52 65 6d 6f 76 65 43 68 69 6c 64  Node.RemoveChild
1e890 28 65 6c 65 6d 65 6e 74 29 3b 0d 0a 20 20 20 20  (element);..    
1e8a0 20 20 20 20 20 20 20 20 20 20 20 20 64 69 72 74              dirt
1e8b0 79 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20  y = true;..     
1e8c0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
1e8d0 20 20 20 20 20 20 20 20 65 6c 65 6d 65 6e 74 20          element 
1e8e0 3d 20 64 6f 63 75 6d 65 6e 74 2e 53 65 6c 65 63  = document.Selec
1e8f0 74 53 69 6e 67 6c 65 4e 6f 64 65 28 53 74 72 69  tSingleNode(Stri
1e900 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
1e910 20 20 20 20 20 20 20 20 20 20 20 20 58 50 61 74              XPat
1e920 68 46 6f 72 52 65 6d 6f 76 65 45 6c 65 6d 65 6e  hForRemoveElemen
1e930 74 2c 20 69 6e 76 61 72 69 61 6e 74 29 29 20 61  t, invariant)) a
1e940 73 20 58 6d 6c 45 6c 65 6d 65 6e 74 3b 0d 0a 0d  s XmlElement;...
1e950 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
1e960 28 65 6c 65 6d 65 6e 74 20 21 3d 20 6e 75 6c 6c  (element != null
1e970 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
1e980 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1e990 20 20 65 6c 65 6d 65 6e 74 2e 50 61 72 65 6e 74    element.Parent
1e9a0 4e 6f 64 65 2e 52 65 6d 6f 76 65 43 68 69 6c 64  Node.RemoveChild
1e9b0 28 65 6c 65 6d 65 6e 74 29 3b 0d 0a 20 20 20 20  (element);..    
1e9c0 20 20 20 20 20 20 20 20 20 20 20 20 64 69 72 74              dirt
1e9d0 79 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20  y = true;..     
1e9e0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
1e9f0 20 20 20 20 20 20 20 20 69 66 20 28 64 69 72 74          if (dirt
1ea00 79 20 7c 7c 20 77 68 61 74 49 66 29 0d 0a 20 20  y || whatIf)..  
1ea10 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1ea20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
1ea30 28 76 65 72 62 6f 73 65 29 0d 0a 20 20 20 20 20  (verbose)..     
1ea40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
1ea50 72 61 63 65 4f 70 73 2e 54 72 61 63 65 28 0d 0a  raceOps.Trace(..
1ea60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ea70 20 20 20 20 20 20 20 20 54 72 61 63 65 50 72 69          TracePri
1ea80 6f 72 69 74 79 2e 48 69 67 68 65 73 74 2c 20 74  ority.Highest, t
1ea90 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74  raceCallback, St
1eaa0 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
1eab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1eac0 20 20 20 20 20 20 22 65 6c 65 6d 65 6e 74 20 3d        "element =
1ead0 20 7b 30 7d 22 2c 20 46 6f 72 44 69 73 70 6c 61   {0}", ForDispla
1eae0 79 28 65 6c 65 6d 65 6e 74 29 29 2c 20 74 72 61  y(element)), tra
1eaf0 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
1eb00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1eb10 69 66 20 28 21 77 68 61 74 49 66 29 0d 0a 20 20  if (!whatIf)..  
1eb20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1eb30 20 20 64 6f 63 75 6d 65 6e 74 2e 53 61 76 65 28    document.Save(
1eb40 66 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20  fileName);....  
1eb50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 61                sa
1eb60 76 65 64 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20  ved = true;..   
1eb70 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
1eb80 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
1eb90 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20   true;..        
1eba0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  }....        ///
1ebb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ebc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ebd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ebe0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ebf0 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
1ec00 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 62  private static b
1ec10 6f 6f 6c 20 50 72 6f 63 65 73 73 44 62 50 72 6f  ool ProcessDbPro
1ec20 76 69 64 65 72 46 61 63 74 6f 72 79 28 0d 0a 20  viderFactory(.. 
1ec30 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
1ec40 67 20 66 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20  g fileName,..   
1ec50 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
1ec60 69 6e 76 61 72 69 61 6e 74 2c 0d 0a 20 20 20 20  invariant,..    
1ec70 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6e          string n
1ec80 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ame,..          
1ec90 20 20 73 74 72 69 6e 67 20 64 65 73 63 72 69 70    string descrip
1eca0 74 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20  tion,..         
1ecb0 20 20 20 73 74 72 69 6e 67 20 74 79 70 65 4e 61     string typeNa
1ecc0 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me,..           
1ecd0 20 41 73 73 65 6d 62 6c 79 4e 61 6d 65 20 61 73   AssemblyName as
1ece0 73 65 6d 62 6c 79 4e 61 6d 65 2c 0d 0a 20 20 20  semblyName,..   
1ecf0 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20           object 
1ed00 63 6c 69 65 6e 74 44 61 74 61 2c 0d 0a 20 20 20  clientData,..   
1ed10 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68           bool wh
1ed20 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20  atIf,..         
1ed30 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c     bool verbose,
1ed40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
1ed50 66 20 62 6f 6f 6c 20 73 61 76 65 64 2c 0d 0a 20  f bool saved,.. 
1ed60 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20 73             ref s
1ed70 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20  tring error..   
1ed80 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
1ed90 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1eda0 20 20 20 41 6e 79 50 61 69 72 3c 73 74 72 69 6e     AnyPair<strin
1edb0 67 2c 20 62 6f 6f 6c 3e 20 70 61 69 72 20 3d 20  g, bool> pair = 
1edc0 63 6c 69 65 6e 74 44 61 74 61 20 61 73 20 41 6e  clientData as An
1edd0 79 50 61 69 72 3c 73 74 72 69 6e 67 2c 20 62 6f  yPair<string, bo
1ede0 6f 6c 3e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ol>;....        
1edf0 20 20 20 20 69 66 20 28 70 61 69 72 20 3d 3d 20      if (pair == 
1ee00 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
1ee10 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
1ee20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69        error = "i
1ee30 6e 76 61 6c 69 64 20 66 72 61 6d 65 77 6f 72 6b  nvalid framework
1ee40 20 63 6f 6e 66 69 67 20 63 61 6c 6c 62 61 63 6b   config callback
1ee50 20 64 61 74 61 22 3b 0d 0a 20 20 20 20 20 20 20   data";..       
1ee60 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
1ee70 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
1ee80 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
1ee90 20 20 20 20 20 69 66 20 28 70 61 69 72 2e 59 29       if (pair.Y)
1eea0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
1eeb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1eec0 20 72 65 74 75 72 6e 20 52 65 6d 6f 76 65 44 62   return RemoveDb
1eed0 50 72 6f 76 69 64 65 72 46 61 63 74 6f 72 79 28  ProviderFactory(
1eee0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1eef0 20 20 20 20 20 20 66 69 6c 65 4e 61 6d 65 2c 20        fileName, 
1ef00 69 6e 76 61 72 69 61 6e 74 2c 20 77 68 61 74 49  invariant, whatI
1ef10 66 2c 20 76 65 72 62 6f 73 65 2c 20 72 65 66 20  f, verbose, ref 
1ef20 73 61 76 65 64 2c 0d 0a 20 20 20 20 20 20 20 20  saved,..        
1ef30 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20              ref 
1ef40 65 72 72 6f 72 29 20 26 26 0d 0a 20 20 20 20 20  error) &&..     
1ef50 20 20 20 20 20 20 20 20 20 20 20 41 64 64 44 62             AddDb
1ef60 50 72 6f 76 69 64 65 72 46 61 63 74 6f 72 79 28  ProviderFactory(
1ef70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1ef80 20 20 20 20 20 20 66 69 6c 65 4e 61 6d 65 2c 20        fileName, 
1ef90 69 6e 76 61 72 69 61 6e 74 2c 20 6e 61 6d 65 2c  invariant, name,
1efa0 20 64 65 73 63 72 69 70 74 69 6f 6e 2c 20 74 79   description, ty
1efb0 70 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20  peName,..       
1efc0 20 20 20 20 20 20 20 20 20 20 20 20 20 61 73 73               ass
1efd0 65 6d 62 6c 79 4e 61 6d 65 2c 20 77 68 61 74 49  emblyName, whatI
1efe0 66 2c 20 76 65 72 62 6f 73 65 2c 20 72 65 66 20  f, verbose, ref 
1eff0 73 61 76 65 64 2c 20 72 65 66 20 65 72 72 6f 72  saved, ref error
1f000 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
1f010 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 65  }..            e
1f020 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  lse..           
1f030 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1f040 20 20 20 20 72 65 74 75 72 6e 20 52 65 6d 6f 76      return Remov
1f050 65 44 62 50 72 6f 76 69 64 65 72 46 61 63 74 6f  eDbProviderFacto
1f060 72 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ry(..           
1f070 20 20 20 20 20 20 20 20 20 66 69 6c 65 4e 61 6d           fileNam
1f080 65 2c 20 69 6e 76 61 72 69 61 6e 74 2c 20 77 68  e, invariant, wh
1f090 61 74 49 66 2c 20 76 65 72 62 6f 73 65 2c 20 72  atIf, verbose, r
1f0a0 65 66 20 73 61 76 65 64 2c 0d 0a 20 20 20 20 20  ef saved,..     
1f0b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
1f0c0 65 66 20 65 72 72 6f 72 29 3b 0d 0a 20 20 20 20  ef error);..    
1f0d0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
1f0e0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65     }..        #e
1f0f0 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
1f100 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
1f110 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f120 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f130 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f140 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
1f150 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 41         #region A
1f160 73 73 65 6d 62 6c 79 20 46 6f 6c 64 65 72 73 20  ssembly Folders 
1f170 48 61 6e 64 6c 69 6e 67 0d 0a 20 20 20 20 20 20  Handling..      
1f180 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
1f190 20 73 74 72 69 6e 67 20 47 65 74 41 73 73 65 6d   string GetAssem
1f1a0 62 6c 79 46 6f 6c 64 65 72 73 4b 65 79 4e 61 6d  blyFoldersKeyNam
1f1b0 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
1f1c0 73 74 72 69 6e 67 20 66 72 61 6d 65 77 6f 72 6b  string framework
1f1d0 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  Name,..         
1f1e0 20 20 20 56 65 72 73 69 6f 6e 20 66 72 61 6d 65     Version frame
1f1f0 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 0d 0a 20 20  workVersion,..  
1f200 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
1f210 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 0d 0a 20   platformName.. 
1f220 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
1f230 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1f240 20 20 20 20 20 73 74 72 69 6e 67 20 66 6f 72 6d       string form
1f250 61 74 20 3d 20 21 53 74 72 69 6e 67 2e 49 73 4e  at = !String.IsN
1f260 75 6c 6c 4f 72 45 6d 70 74 79 28 70 6c 61 74 66  ullOrEmpty(platf
1f270 6f 72 6d 4e 61 6d 65 29 20 3f 0d 0a 20 20 20 20  ormName) ?..    
1f280 20 20 20 20 20 20 20 20 20 20 20 20 22 53 6f 66              "Sof
1f290 74 77 61 72 65 5c 5c 4d 69 63 72 6f 73 6f 66 74  tware\\Microsoft
1f2a0 5c 5c 7b 30 7d 5c 5c 76 7b 31 7d 5c 5c 7b 32 7d  \\{0}\\v{1}\\{2}
1f2b0 5c 5c 41 73 73 65 6d 62 6c 79 46 6f 6c 64 65 72  \\AssemblyFolder
1f2c0 73 45 78 22 20 3a 0d 0a 20 20 20 20 20 20 20 20  sEx" :..        
1f2d0 20 20 20 20 20 20 20 20 22 53 6f 66 74 77 61 72          "Softwar
1f2e0 65 5c 5c 4d 69 63 72 6f 73 6f 66 74 5c 5c 7b 30  e\\Microsoft\\{0
1f2f0 7d 5c 5c 76 7b 31 7d 5c 5c 41 73 73 65 6d 62 6c  }\\v{1}\\Assembl
1f300 79 46 6f 6c 64 65 72 73 45 78 22 3b 0d 0a 0d 0a  yFoldersEx";....
1f310 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
1f320 72 6e 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  rn String.Format
1f330 28 66 6f 72 6d 61 74 2c 20 66 72 61 6d 65 77 6f  (format, framewo
1f340 72 6b 4e 61 6d 65 2c 20 66 72 61 6d 65 77 6f 72  rkName, framewor
1f350 6b 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20  kVersion,..     
1f360 20 20 20 20 20 20 20 20 20 20 20 70 6c 61 74 66             platf
1f370 6f 72 6d 4e 61 6d 65 29 3b 0d 0a 20 20 20 20 20  ormName);..     
1f380 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
1f390 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f3a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f3b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f3c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f3d0 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
1f3e0 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
1f3f0 63 20 62 6f 6f 6c 20 41 64 64 54 6f 41 73 73 65  c bool AddToAsse
1f400 6d 62 6c 79 46 6f 6c 64 65 72 73 28 0d 0a 20 20  mblyFolders(..  
1f410 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74            Regist
1f420 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a  ryKey rootKey,..
1f430 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
1f440 6e 67 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65  ng frameworkName
1f450 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 56  ,..            V
1f460 65 72 73 69 6f 6e 20 66 72 61 6d 65 77 6f 72 6b  ersion framework
1f470 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20  Version,..      
1f480 20 20 20 20 20 20 73 74 72 69 6e 67 20 70 6c 61        string pla
1f490 74 66 6f 72 6d 4e 61 6d 65 2c 0d 0a 20 20 20 20  tformName,..    
1f4a0 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 73          string s
1f4b0 75 62 4b 65 79 4e 61 6d 65 2c 0d 0a 20 20 20 20  ubKeyName,..    
1f4c0 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 64          string d
1f4d0 69 72 65 63 74 6f 72 79 2c 0d 0a 20 20 20 20 20  irectory,..     
1f4e0 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74         bool what
1f4f0 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  If,..           
1f500 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a   bool verbose,..
1f510 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20              ref 
1f520 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20  string error..  
1f530 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
1f540 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1f550 20 20 20 20 73 74 72 69 6e 67 20 6b 65 79 4e 61      string keyNa
1f560 6d 65 20 3d 20 47 65 74 41 73 73 65 6d 62 6c 79  me = GetAssembly
1f570 46 6f 6c 64 65 72 73 4b 65 79 4e 61 6d 65 28 0d  FoldersKeyName(.
1f580 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1f590 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 20   frameworkName, 
1f5a0 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e  frameworkVersion
1f5b0 2c 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 29 3b  , platformName);
1f5c0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1f5d0 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73  using (MockRegis
1f5e0 74 72 79 4b 65 79 20 6b 65 79 20 3d 20 52 65 67  tryKey key = Reg
1f5f0 69 73 74 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e  istryHelper.Open
1f600 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20  SubKey(..       
1f610 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f               roo
1f620 74 4b 65 79 2c 20 6b 65 79 4e 61 6d 65 2c 20 74  tKey, keyName, t
1f630 72 75 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72  rue, whatIf, ver
1f640 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20  bose))..        
1f650 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1f660 20 20 20 20 20 20 20 69 66 20 28 6b 65 79 20 3d         if (key =
1f670 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
1f680 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
1f690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f6a0 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46  error = String.F
1f6b0 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
1f6c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f6d0 22 63 6f 75 6c 64 20 6e 6f 74 20 6f 70 65 6e 20  "could not open 
1f6e0 72 65 67 69 73 74 72 79 20 6b 65 79 3a 20 7b 30  registry key: {0
1f6f0 7d 5c 5c 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20  }\\{1}",..      
1f700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f710 20 20 72 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e 61    rootKey, keyNa
1f720 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  me);....        
1f730 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
1f740 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
1f750 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
1f760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f770 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73  using (MockRegis
1f780 74 72 79 4b 65 79 20 73 75 62 4b 65 79 20 3d 20  tryKey subKey = 
1f790 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 43  RegistryHelper.C
1f7a0 72 65 61 74 65 53 75 62 4b 65 79 28 0d 0a 20 20  reateSubKey(..  
1f7b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f7c0 20 20 20 20 20 20 6b 65 79 2c 20 73 75 62 4b 65        key, subKe
1f7d0 79 4e 61 6d 65 2c 20 77 68 61 74 49 66 2c 20 76  yName, whatIf, v
1f7e0 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20  erbose))..      
1f7f0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1f800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f810 20 69 66 20 28 73 75 62 4b 65 79 20 3d 3d 20 6e   if (subKey == n
1f820 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
1f830 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1f840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f850 20 20 20 20 20 65 72 72 6f 72 20 3d 20 53 74 72       error = Str
1f860 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
1f870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f880 20 20 20 20 20 20 20 20 20 22 63 6f 75 6c 64 20           "could 
1f890 6e 6f 74 20 63 72 65 61 74 65 20 72 65 67 69 73  not create regis
1f8a0 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 7b 31  try key: {0}\\{1
1f8b0 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }",..           
1f8c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f8d0 20 6b 65 79 2c 20 73 75 62 4b 65 79 4e 61 6d 65   key, subKeyName
1f8e0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
1f8f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
1f900 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
1f910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f920 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
1f930 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74            Regist
1f940 72 79 48 65 6c 70 65 72 2e 53 65 74 56 61 6c 75  ryHelper.SetValu
1f950 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
1f960 20 20 20 20 20 20 20 20 20 20 20 20 73 75 62 4b              subK
1f970 65 79 2c 20 6e 75 6c 6c 2c 20 64 69 72 65 63 74  ey, null, direct
1f980 6f 72 79 2c 20 77 68 61 74 49 66 2c 20 76 65 72  ory, whatIf, ver
1f990 62 6f 73 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  bose);..        
1f9a0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
1f9b0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
1f9c0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74          return t
1f9d0 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  rue;..        }.
1f9e0 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
1f9f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fa00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fa10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fa20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fa30 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72  //....        pr
1fa40 69 76 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f  ivate static boo
1fa50 6c 20 52 65 6d 6f 76 65 46 72 6f 6d 41 73 73 65  l RemoveFromAsse
1fa60 6d 62 6c 79 46 6f 6c 64 65 72 73 28 0d 0a 20 20  mblyFolders(..  
1fa70 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74            Regist
1fa80 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a  ryKey rootKey,..
1fa90 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
1faa0 6e 67 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65  ng frameworkName
1fab0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 56  ,..            V
1fac0 65 72 73 69 6f 6e 20 66 72 61 6d 65 77 6f 72 6b  ersion framework
1fad0 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20  Version,..      
1fae0 20 20 20 20 20 20 73 74 72 69 6e 67 20 70 6c 61        string pla
1faf0 74 66 6f 72 6d 4e 61 6d 65 2c 0d 0a 20 20 20 20  tformName,..    
1fb00 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 73          string s
1fb10 75 62 4b 65 79 4e 61 6d 65 2c 0d 0a 20 20 20 20  ubKeyName,..    
1fb20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61          bool wha
1fb30 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf,..          
1fb40 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d    bool verbose,.
1fb50 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66  .            ref
1fb60 20 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20   string error.. 
1fb70 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
1fb80 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1fb90 20 20 20 20 20 73 74 72 69 6e 67 20 6b 65 79 4e       string keyN
1fba0 61 6d 65 20 3d 20 47 65 74 41 73 73 65 6d 62 6c  ame = GetAssembl
1fbb0 79 46 6f 6c 64 65 72 73 4b 65 79 4e 61 6d 65 28  yFoldersKeyName(
1fbc0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1fbd0 20 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c    frameworkName,
1fbe0 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f   frameworkVersio
1fbf0 6e 2c 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 29  n, platformName)
1fc00 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
1fc10 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69   using (MockRegi
1fc20 73 74 72 79 4b 65 79 20 6b 65 79 20 3d 20 52 65  stryKey key = Re
1fc30 67 69 73 74 72 79 48 65 6c 70 65 72 2e 4f 70 65  gistryHelper.Ope
1fc40 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20  nSubKey(..      
1fc50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f                ro
1fc60 6f 74 4b 65 79 2c 20 6b 65 79 4e 61 6d 65 2c 20  otKey, keyName, 
1fc70 66 61 6c 73 65 2c 20 77 68 61 74 49 66 2c 20 76  false, whatIf, v
1fc80 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20  erbose))..      
1fc90 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1fca0 20 20 20 20 20 20 20 20 20 69 66 20 28 6b 65 79           if (key
1fcb0 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
1fcc0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
1fcd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fce0 20 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67    error = String
1fcf0 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
1fd00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fd10 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20 6f 70 65    "could not ope
1fd20 6e 20 72 65 67 69 73 74 72 79 20 6b 65 79 3a 20  n registry key: 
1fd30 7b 30 7d 5c 5c 7b 31 7d 22 2c 0d 0a 20 20 20 20  {0}\\{1}",..    
1fd40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fd50 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 6b 65 79      rootKey, key
1fd60 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  Name);....      
1fd70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
1fd80 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
1fd90 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
1fda0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1fdb0 20 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72    RegistryHelper
1fdc0 2e 44 65 6c 65 74 65 53 75 62 4b 65 79 28 0d 0a  .DeleteSubKey(..
1fdd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fde0 20 20 20 20 6b 65 79 2c 20 73 75 62 4b 65 79 4e      key, subKeyN
1fdf0 61 6d 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72  ame, whatIf, ver
1fe00 62 6f 73 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  bose);..        
1fe10 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
1fe20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65       return true
1fe30 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  ;..        }....
1fe40 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
1fe50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fe60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fe70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fe80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
1fe90 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  ...        priva
1fea0 74 65 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 50  te static bool P
1feb0 72 6f 63 65 73 73 41 73 73 65 6d 62 6c 79 46 6f  rocessAssemblyFo
1fec0 6c 64 65 72 73 28 0d 0a 20 20 20 20 20 20 20 20  lders(..        
1fed0 20 20 20 20 52 65 67 69 73 74 72 79 4b 65 79 20      RegistryKey 
1fee0 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20  rootKey,..      
1fef0 20 20 20 20 20 20 73 74 72 69 6e 67 20 66 72 61        string fra
1ff00 6d 65 77 6f 72 6b 4e 61 6d 65 2c 0d 0a 20 20 20  meworkName,..   
1ff10 20 20 20 20 20 20 20 20 20 56 65 72 73 69 6f 6e           Version
1ff20 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f   frameworkVersio
1ff30 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n,..            
1ff40 73 74 72 69 6e 67 20 70 6c 61 74 66 6f 72 6d 4e  string platformN
1ff50 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ame,..          
1ff60 20 20 6f 62 6a 65 63 74 20 63 6c 69 65 6e 74 44    object clientD
1ff70 61 74 61 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ata,..          
1ff80 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a    bool whatIf,..
1ff90 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
1ffa0 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20   verbose,..     
1ffb0 20 20 20 20 20 20 20 72 65 66 20 73 74 72 69 6e         ref strin
1ffc0 67 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20  g error..       
1ffd0 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
1ffe0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 41  {..            A
1fff0 6e 79 50 61 69 72 3c 73 74 72 69 6e 67 2c 20 62  nyPair<string, b
20000 6f 6f 6c 3e 20 70 61 69 72 20 3d 20 63 6c 69 65  ool> pair = clie
20010 6e 74 44 61 74 61 20 61 73 20 41 6e 79 50 61 69  ntData as AnyPai
20020 72 3c 73 74 72 69 6e 67 2c 20 62 6f 6f 6c 3e 3b  r<string, bool>;
20030 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
20040 69 66 20 28 70 61 69 72 20 3d 3d 20 6e 75 6c 6c  if (pair == null
20050 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
20060 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
20070 20 20 65 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c    error = "inval
20080 69 64 20 66 72 61 6d 65 77 6f 72 6b 20 63 61 6c  id framework cal
20090 6c 62 61 63 6b 20 64 61 74 61 22 3b 0d 0a 20 20  lback data";..  
200a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
200b0 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
200c0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
200d0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 70 61            if (pa
200e0 69 72 2e 59 29 0d 0a 20 20 20 20 20 20 20 20 20  ir.Y)..         
200f0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
20100 20 20 20 20 20 20 72 65 74 75 72 6e 20 52 65 6d        return Rem
20110 6f 76 65 46 72 6f 6d 41 73 73 65 6d 62 6c 79 46  oveFromAssemblyF
20120 6f 6c 64 65 72 73 28 0d 0a 20 20 20 20 20 20 20  olders(..       
20130 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f               roo
20140 74 4b 65 79 2c 20 66 72 61 6d 65 77 6f 72 6b 4e  tKey, frameworkN
20150 61 6d 65 2c 20 66 72 61 6d 65 77 6f 72 6b 56 65  ame, frameworkVe
20160 72 73 69 6f 6e 2c 20 70 6c 61 74 66 6f 72 6d 4e  rsion, platformN
20170 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ame,..          
20180 20 20 20 20 20 20 20 20 20 20 4c 65 67 61 63 79            Legacy
20190 50 72 6f 6a 65 63 74 4e 61 6d 65 2c 20 77 68 61  ProjectName, wha
201a0 74 49 66 2c 20 76 65 72 62 6f 73 65 2c 20 72 65  tIf, verbose, re
201b0 66 20 65 72 72 6f 72 29 20 26 26 0d 0a 20 20 20  f error) &&..   
201c0 20 20 20 20 20 20 20 20 20 20 20 20 20 41 64 64               Add
201d0 54 6f 41 73 73 65 6d 62 6c 79 46 6f 6c 64 65 72  ToAssemblyFolder
201e0 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s(..            
201f0 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c          rootKey,
20200 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 20   frameworkName, 
20210 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e  frameworkVersion
20220 2c 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c 0d  , platformName,.
20230 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
20240 20 20 20 20 20 50 72 6f 6a 65 63 74 4e 61 6d 65       ProjectName
20250 2c 20 70 61 69 72 2e 58 2c 20 77 68 61 74 49 66  , pair.X, whatIf
20260 2c 20 76 65 72 62 6f 73 65 2c 20 72 65 66 20 65  , verbose, ref e
20270 72 72 6f 72 29 3b 0d 0a 20 20 20 20 20 20 20 20  rror);..        
20280 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
20290 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20     else..       
202a0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
202b0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 52          return R
202c0 65 6d 6f 76 65 46 72 6f 6d 41 73 73 65 6d 62 6c  emoveFromAssembl
202d0 79 46 6f 6c 64 65 72 73 28 0d 0a 20 20 20 20 20  yFolders(..     
202e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
202f0 6f 6f 74 4b 65 79 2c 20 66 72 61 6d 65 77 6f 72  ootKey, framewor
20300 6b 4e 61 6d 65 2c 20 66 72 61 6d 65 77 6f 72 6b  kName, framework
20310 56 65 72 73 69 6f 6e 2c 20 70 6c 61 74 66 6f 72  Version, platfor
20320 6d 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20  mName,..        
20330 20 20 20 20 20 20 20 20 20 20 20 20 50 72 6f 6a              Proj
20340 65 63 74 4e 61 6d 65 2c 20 77 68 61 74 49 66 2c  ectName, whatIf,
20350 20 76 65 72 62 6f 73 65 2c 20 72 65 66 20 65 72   verbose, ref er
20360 72 6f 72 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ror);..         
20370 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d     }..        }.
20380 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67  .        #endreg
20390 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  ion....        /
203a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
203b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
203c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
203d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
203e0 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
203f0 20 20 23 72 65 67 69 6f 6e 20 56 69 73 75 61 6c    #region Visual
20400 20 53 74 75 64 69 6f 20 48 61 6e 64 6c 69 6e 67   Studio Handling
20410 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
20420 65 20 73 74 61 74 69 63 20 73 74 72 69 6e 67 20  e static string 
20430 47 65 74 56 73 4b 65 79 4e 61 6d 65 28 0d 0a 20  GetVsKeyName(.. 
20440 20 20 20 20 20 20 20 20 20 20 20 56 65 72 73 69             Versi
20450 6f 6e 20 76 73 56 65 72 73 69 6f 6e 0d 0a 20 20  on vsVersion..  
20460 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
20470 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
20480 20 20 20 20 72 65 74 75 72 6e 20 53 74 72 69 6e      return Strin
20490 67 2e 46 6f 72 6d 61 74 28 22 53 6f 66 74 77 61  g.Format("Softwa
204a0 72 65 5c 5c 4d 69 63 72 6f 73 6f 66 74 5c 5c 56  re\\Microsoft\\V
204b0 69 73 75 61 6c 53 74 75 64 69 6f 5c 5c 7b 30 7d  isualStudio\\{0}
204c0 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
204d0 20 20 20 20 76 73 56 65 72 73 69 6f 6e 29 3b 0d      vsVersion);.
204e0 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
204f0 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
20500 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20510 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20520 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20530 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
20540 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e  .        #region
20550 20 56 69 73 75 61 6c 20 53 74 75 64 69 6f 20 56   Visual Studio V
20560 65 72 73 69 6f 6e 20 48 61 6e 64 6c 69 6e 67 0d  ersion Handling.
20570 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
20580 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 41 64 64   static bool Add
20590 56 73 56 65 72 73 69 6f 6e 28 0d 0a 20 20 20 20  VsVersion(..    
205a0 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79          Registry
205b0 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20  Key rootKey,..  
205c0 20 20 20 20 20 20 20 20 20 20 56 65 72 73 69 6f            Versio
205d0 6e 20 76 73 56 65 72 73 69 6f 6e 2c 0d 0a 20 20  n vsVersion,..  
205e0 20 20 20 20 20 20 20 20 20 20 47 75 69 64 20 70            Guid p
205f0 61 63 6b 61 67 65 49 64 2c 0d 0a 20 20 20 20 20  ackageId,..     
20600 20 20 20 20 20 20 20 47 75 69 64 20 73 65 72 76         Guid serv
20610 69 63 65 49 64 2c 0d 0a 20 20 20 20 20 20 20 20  iceId,..        
20620 20 20 20 20 47 75 69 64 20 64 61 74 61 53 6f 75      Guid dataSou
20630 72 63 65 49 64 2c 0d 0a 20 20 20 20 20 20 20 20  rceId,..        
20640 20 20 20 20 47 75 69 64 20 64 61 74 61 50 72 6f      Guid dataPro
20650 76 69 64 65 72 49 64 2c 0d 0a 20 20 20 20 20 20  viderId,..      
20660 20 20 20 20 20 20 6f 62 6a 65 63 74 20 63 6c 69        object cli
20670 65 6e 74 44 61 74 61 2c 0d 0a 20 20 20 20 20 20  entData,..      
20680 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49        bool whatI
20690 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f,..            
206a0 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a 20  bool verbose,.. 
206b0 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20 73             ref s
206c0 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20  tring error..   
206d0 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
206e0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
206f0 20 20 20 56 65 72 73 69 6f 6e 4c 69 73 74 20 76     VersionList v
20700 65 72 73 69 6f 6e 4c 69 73 74 20 3d 20 63 6c 69  ersionList = cli
20710 65 6e 74 44 61 74 61 20 61 73 20 56 65 72 73 69  entData as Versi
20720 6f 6e 4c 69 73 74 3b 0d 0a 0d 0a 20 20 20 20 20  onList;....     
20730 20 20 20 20 20 20 20 69 66 20 28 76 65 72 73 69         if (versi
20740 6f 6e 4c 69 73 74 20 21 3d 20 6e 75 6c 6c 29 0d  onList != null).
20750 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
20760 20 76 65 72 73 69 6f 6e 4c 69 73 74 2e 41 64 64   versionList.Add
20770 28 76 73 56 65 72 73 69 6f 6e 29 3b 0d 0a 0d 0a  (vsVersion);....
20780 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
20790 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20  rn true;..      
207a0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e    }..        #en
207b0 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
207c0 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
207d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
207e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
207f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20800 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
20810 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 56 69        #region Vi
20820 73 75 61 6c 20 53 74 75 64 69 6f 20 44 61 74 61  sual Studio Data
20830 20 53 6f 75 72 63 65 20 48 61 6e 64 6c 69 6e 67   Source Handling
20840 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
20850 65 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 41 64  e static bool Ad
20860 64 56 73 44 61 74 61 53 6f 75 72 63 65 28 0d 0a  dVsDataSource(..
20870 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69              Regi
20880 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c  stryKey rootKey,
20890 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 56 65  ..            Ve
208a0 72 73 69 6f 6e 20 76 73 56 65 72 73 69 6f 6e 2c  rsion vsVersion,
208b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 47 75  ..            Gu
208c0 69 64 20 64 61 74 61 53 6f 75 72 63 65 49 64 2c  id dataSourceId,
208d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 47 75  ..            Gu
208e0 69 64 20 64 61 74 61 50 72 6f 76 69 64 65 72 49  id dataProviderI
208f0 64 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d,..            
20900 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20  bool whatIf,..  
20910 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76            bool v
20920 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20  erbose,..       
20930 20 20 20 20 20 72 65 66 20 73 74 72 69 6e 67 20       ref string 
20940 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20  error..         
20950 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d     )..        {.
20960 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72  .            str
20970 69 6e 67 20 6b 65 79 4e 61 6d 65 20 3d 20 47 65  ing keyName = Ge
20980 74 56 73 4b 65 79 4e 61 6d 65 28 76 73 56 65 72  tVsKeyName(vsVer
20990 73 69 6f 6e 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  sion);....      
209a0 20 20 20 20 20 20 75 73 69 6e 67 20 28 4d 6f 63        using (Moc
209b0 6b 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65 79  kRegistryKey key
209c0 20 3d 20 52 65 67 69 73 74 72 79 48 65 6c 70 65   = RegistryHelpe
209d0 72 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20  r.OpenSubKey(.. 
209e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
209f0 20 20 20 72 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e     rootKey, keyN
20a00 61 6d 65 2c 20 66 61 6c 73 65 2c 20 77 68 61 74  ame, false, what
20a10 49 66 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a 20  If, verbose)).. 
20a20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
20a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
20a40 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a   (key == null)..
20a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20a60 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
20a70 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 53         error = S
20a80 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
20a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20aa0 20 20 20 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f         "could no
20ab0 74 20 6f 70 65 6e 20 72 65 67 69 73 74 72 79 20  t open registry 
20ac0 6b 65 79 3a 20 7b 30 7d 5c 5c 7b 31 7d 22 2c 0d  key: {0}\\{1}",.
20ad0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
20ae0 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79           rootKey
20af0 2c 20 6b 65 79 4e 61 6d 65 29 3b 0d 0a 0d 0a 20  , keyName);.... 
20b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20b10 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
20b20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
20b30 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
20b40 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 4d 6f         using (Mo
20b50 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 73 75  ckRegistryKey su
20b60 62 4b 65 79 20 3d 20 52 65 67 69 73 74 72 79 48  bKey = RegistryH
20b70 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62 4b 65 79  elper.OpenSubKey
20b80 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
20b90 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 2c 20             key, 
20ba0 22 44 61 74 61 53 6f 75 72 63 65 73 22 2c 20 74  "DataSources", t
20bb0 72 75 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72  rue, whatIf, ver
20bc0 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20  bose))..        
20bd0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
20be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
20bf0 66 20 28 73 75 62 4b 65 79 20 3d 3d 20 6e 75 6c  f (subKey == nul
20c00 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
20c10 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
20c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20c30 20 20 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e     error = Strin
20c40 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
20c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20c60 20 20 20 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f         "could no
20c70 74 20 6f 70 65 6e 20 72 65 67 69 73 74 72 79 20  t open registry 
20c80 6b 65 79 3a 20 7b 30 7d 5c 5c 44 61 74 61 53 6f  key: {0}\\DataSo
20c90 75 72 63 65 73 22 2c 0d 0a 20 20 20 20 20 20 20  urces",..       
20ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20cb0 20 20 20 20 20 6b 65 79 29 3b 0d 0a 0d 0a 20 20       key);....  
20cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20cd0 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
20ce0 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se;..           
20cf0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
20d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20d10 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67    using (MockReg
20d20 69 73 74 72 79 4b 65 79 20 64 61 74 61 53 6f 75  istryKey dataSou
20d30 72 63 65 4b 65 79 20 3d 20 52 65 67 69 73 74 72  rceKey = Registr
20d40 79 48 65 6c 70 65 72 2e 43 72 65 61 74 65 53 75  yHelper.CreateSu
20d50 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20  bKey(..         
20d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20d70 20 20 20 73 75 62 4b 65 79 2c 20 64 61 74 61 53     subKey, dataS
20d80 6f 75 72 63 65 49 64 2e 54 6f 53 74 72 69 6e 67  ourceId.ToString
20d90 28 56 73 49 64 46 6f 72 6d 61 74 29 2c 20 77 68  (VsIdFormat), wh
20da0 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20  atIf,..         
20db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20dc0 20 20 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20     verbose))..  
20dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20de0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
20df0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
20e00 28 64 61 74 61 53 6f 75 72 63 65 4b 65 79 20 3d  (dataSourceKey =
20e10 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
20e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20e30 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
20e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20e50 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46  error = String.F
20e60 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
20e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20e80 20 20 20 20 20 20 20 20 22 63 6f 75 6c 64 20 6e          "could n
20e90 6f 74 20 63 72 65 61 74 65 20 72 65 67 69 73 74  ot create regist
20ea0 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 7b 31 7d  ry key: {0}\\{1}
20eb0 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
20ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20ed0 20 20 20 20 6b 65 79 2c 20 64 61 74 61 53 6f 75      key, dataSou
20ee0 72 63 65 49 64 2e 54 6f 53 74 72 69 6e 67 28 56  rceId.ToString(V
20ef0 73 49 64 46 6f 72 6d 61 74 29 29 3b 0d 0a 0d 0a  sIdFormat));....
20f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20f10 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
20f20 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
20f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20f40 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
20f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20f60 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 53  RegistryHelper.S
20f70 65 74 56 61 6c 75 65 28 0d 0a 20 20 20 20 20 20  etValue(..      
20f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20f90 20 20 20 20 20 20 64 61 74 61 53 6f 75 72 63 65        dataSource
20fa0 4b 65 79 2c 20 6e 75 6c 6c 2c 20 53 74 72 69 6e  Key, null, Strin
20fb0 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
20fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20fd0 20 20 20 20 20 20 20 22 7b 30 7d 20 44 61 74 61         "{0} Data
20fe0 62 61 73 65 20 46 69 6c 65 22 2c 20 50 72 6f 6a  base File", Proj
20ff0 65 63 74 4e 61 6d 65 29 2c 20 77 68 61 74 49 66  ectName), whatIf
21000 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
21010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76                 v
21020 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20  erbose);....    
21030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21040 20 20 20 20 52 65 67 69 73 74 72 79 48 65 6c 70      RegistryHelp
21050 65 72 2e 43 72 65 61 74 65 53 75 62 4b 65 79 28  er.CreateSubKey(
21060 64 61 74 61 53 6f 75 72 63 65 4b 65 79 2c 0d 0a  dataSourceKey,..
21070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21080 20 20 20 20 20 20 20 20 20 20 20 20 53 74 72 69              Stri
21090 6e 67 2e 46 6f 72 6d 61 74 28 22 53 75 70 70 6f  ng.Format("Suppo
210a0 72 74 69 6e 67 50 72 6f 76 69 64 65 72 73 5c 5c  rtingProviders\\
210b0 7b 30 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  {0}",..         
210c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
210d0 20 20 20 64 61 74 61 50 72 6f 76 69 64 65 72 49     dataProviderI
210e0 64 2e 54 6f 53 74 72 69 6e 67 28 56 73 49 64 46  d.ToString(VsIdF
210f0 6f 72 6d 61 74 29 29 2c 20 77 68 61 74 49 66 2c  ormat)), whatIf,
21100 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
21110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76 65                ve
21120 72 62 6f 73 65 29 3b 0d 0a 20 20 20 20 20 20 20  rbose);..       
21130 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
21140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21150 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
21160 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
21170 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20  return true;..  
21180 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
21190 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
211a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
211b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
211c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
211d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
211e0 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
211f0 61 74 69 63 20 62 6f 6f 6c 20 52 65 6d 6f 76 65  atic bool Remove
21200 56 73 44 61 74 61 53 6f 75 72 63 65 28 0d 0a 20  VsDataSource(.. 
21210 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73             Regis
21220 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d  tryKey rootKey,.
21230 0a 20 20 20 20 20 20 20 20 20 20 20 20 56 65 72  .            Ver
21240 73 69 6f 6e 20 76 73 56 65 72 73 69 6f 6e 2c 0d  sion vsVersion,.
21250 0a 20 20 20 20 20 20 20 20 20 20 20 20 47 75 69  .            Gui
21260 64 20 64 61 74 61 53 6f 75 72 63 65 49 64 2c 0d  d dataSourceId,.
21270 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
21280 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20  l whatIf,..     
21290 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62         bool verb
212a0 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ose,..          
212b0 20 20 72 65 66 20 73 74 72 69 6e 67 20 65 72 72    ref string err
212c0 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  or..            
212d0 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
212e0 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
212f0 20 6b 65 79 4e 61 6d 65 20 3d 20 47 65 74 56 73   keyName = GetVs
21300 4b 65 79 4e 61 6d 65 28 76 73 56 65 72 73 69 6f  KeyName(vsVersio
21310 6e 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  n);....         
21320 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65     using (MockRe
21330 67 69 73 74 72 79 4b 65 79 20 6b 65 79 20 3d 20  gistryKey key = 
21340 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 4f  RegistryHelper.O
21350 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20  penSubKey(..    
21360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21370 72 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e 61 6d 65  rootKey, keyName
21380 2c 20 66 61 6c 73 65 2c 20 77 68 61 74 49 66 2c  , false, whatIf,
21390 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20   verbose))..    
213a0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
213b0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6b             if (k
213c0 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ey == null)..   
213d0 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
213e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
213f0 20 20 20 20 65 72 72 6f 72 20 3d 20 53 74 72 69      error = Stri
21400 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
21410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21420 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20 6f      "could not o
21430 70 65 6e 20 72 65 67 69 73 74 72 79 20 6b 65 79  pen registry key
21440 3a 20 7b 30 7d 5c 5c 7b 31 7d 22 2c 0d 0a 20 20  : {0}\\{1}",..  
21450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21460 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 6b        rootKey, k
21470 65 79 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20  eyName);....    
21480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21490 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20  return false;.. 
214a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
214b0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
214c0 20 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52      using (MockR
214d0 65 67 69 73 74 72 79 4b 65 79 20 73 75 62 4b 65  egistryKey subKe
214e0 79 20 3d 20 52 65 67 69 73 74 72 79 48 65 6c 70  y = RegistryHelp
214f0 65 72 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a  er.OpenSubKey(..
21500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21510 20 20 20 20 20 20 20 20 6b 65 79 2c 20 22 44 61          key, "Da
21520 74 61 53 6f 75 72 63 65 73 22 2c 20 74 72 75 65  taSources", true
21530 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73  , whatIf, verbos
21540 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e))..           
21550 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
21560 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
21570 73 75 62 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d  subKey == null).
21580 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
21590 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
215a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
215b0 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46  error = String.F
215c0 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
215d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
215e0 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20 6f      "could not o
215f0 70 65 6e 20 72 65 67 69 73 74 72 79 20 6b 65 79  pen registry key
21600 3a 20 7b 30 7d 5c 5c 44 61 74 61 53 6f 75 72 63  : {0}\\DataSourc
21610 65 73 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  es",..          
21620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21630 20 20 6b 65 79 29 3b 0d 0a 0d 0a 20 20 20 20 20    key);....     
21640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21650 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
21660 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
21670 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
21680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52                 R
21690 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 44 65  egistryHelper.De
216a0 6c 65 74 65 53 75 62 4b 65 79 54 72 65 65 28 0d  leteSubKeyTree(.
216b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
216c0 20 20 20 20 20 20 20 20 20 73 75 62 4b 65 79 2c           subKey,
216d0 20 64 61 74 61 53 6f 75 72 63 65 49 64 2e 54 6f   dataSourceId.To
216e0 53 74 72 69 6e 67 28 56 73 49 64 46 6f 72 6d 61  String(VsIdForma
216f0 74 29 2c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20  t), whatIf,..   
21700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21710 20 20 20 20 20 76 65 72 62 6f 73 65 29 3b 0d 0a       verbose);..
21720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21730 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
21740 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
21750 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20  return true;..  
21760 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
21770 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
21780 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21790 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
217a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
217b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
217c0 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
217d0 61 74 69 63 20 62 6f 6f 6c 20 50 72 6f 63 65 73  atic bool Proces
217e0 73 56 73 44 61 74 61 53 6f 75 72 63 65 28 0d 0a  sVsDataSource(..
217f0 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69              Regi
21800 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c  stryKey rootKey,
21810 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 56 65  ..            Ve
21820 72 73 69 6f 6e 20 76 73 56 65 72 73 69 6f 6e 2c  rsion vsVersion,
21830 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 47 75  ..            Gu
21840 69 64 20 70 61 63 6b 61 67 65 49 64 2c 20 2f 2a  id packageId, /*
21850 20 4e 4f 54 20 55 53 45 44 20 2a 2f 0d 0a 20 20   NOT USED */..  
21860 20 20 20 20 20 20 20 20 20 20 47 75 69 64 20 73            Guid s
21870 65 72 76 69 63 65 49 64 2c 20 2f 2a 20 4e 4f 54  erviceId, /* NOT
21880 20 55 53 45 44 20 2a 2f 0d 0a 20 20 20 20 20 20   USED */..      
21890 20 20 20 20 20 20 47 75 69 64 20 64 61 74 61 53        Guid dataS
218a0 6f 75 72 63 65 49 64 2c 0d 0a 20 20 20 20 20 20  ourceId,..      
218b0 20 20 20 20 20 20 47 75 69 64 20 64 61 74 61 50        Guid dataP
218c0 72 6f 76 69 64 65 72 49 64 2c 0d 0a 20 20 20 20  roviderId,..    
218d0 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 63          object c
218e0 6c 69 65 6e 74 44 61 74 61 2c 0d 0a 20 20 20 20  lientData,..    
218f0 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61          bool wha
21900 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf,..          
21910 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d    bool verbose,.
21920 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66  .            ref
21930 20 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20   string error.. 
21940 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
21950 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
21960 20 20 20 20 20 41 6e 79 50 61 69 72 3c 73 74 72       AnyPair<str
21970 69 6e 67 2c 20 62 6f 6f 6c 3e 20 70 61 69 72 20  ing, bool> pair 
21980 3d 20 63 6c 69 65 6e 74 44 61 74 61 20 61 73 20  = clientData as 
21990 41 6e 79 50 61 69 72 3c 73 74 72 69 6e 67 2c 20  AnyPair<string, 
219a0 62 6f 6f 6c 3e 3b 0d 0a 0d 0a 20 20 20 20 20 20  bool>;....      
219b0 20 20 20 20 20 20 69 66 20 28 70 61 69 72 20 3d        if (pair =
219c0 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
219d0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
219e0 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
219f0 22 69 6e 76 61 6c 69 64 20 56 53 20 63 61 6c 6c  "invalid VS call
21a00 62 61 63 6b 20 64 61 74 61 22 3b 0d 0a 20 20 20  back data";..   
21a10 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
21a20 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  urn false;..    
21a30 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
21a40 20 20 20 20 20 20 20 20 20 69 66 20 28 70 61 69           if (pai
21a50 72 2e 59 29 0d 0a 20 20 20 20 20 20 20 20 20 20  r.Y)..          
21a60 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
21a70 20 20 20 20 20 72 65 74 75 72 6e 20 41 64 64 56       return AddV
21a80 73 44 61 74 61 53 6f 75 72 63 65 28 0d 0a 20 20  sDataSource(..  
21a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21aa0 20 20 72 6f 6f 74 4b 65 79 2c 20 76 73 56 65 72    rootKey, vsVer
21ab0 73 69 6f 6e 2c 20 64 61 74 61 53 6f 75 72 63 65  sion, dataSource
21ac0 49 64 2c 20 64 61 74 61 50 72 6f 76 69 64 65 72  Id, dataProvider
21ad0 49 64 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  Id,..           
21ae0 20 20 20 20 20 20 20 20 20 77 68 61 74 49 66 2c           whatIf,
21af0 20 76 65 72 62 6f 73 65 2c 20 72 65 66 20 65 72   verbose, ref er
21b00 72 6f 72 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ror);..         
21b10 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
21b20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20    else..        
21b30 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
21b40 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 52 65         return Re
21b50 6d 6f 76 65 56 73 44 61 74 61 53 6f 75 72 63 65  moveVsDataSource
21b60 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
21b70 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20         rootKey, 
21b80 76 73 56 65 72 73 69 6f 6e 2c 20 64 61 74 61 53  vsVersion, dataS
21b90 6f 75 72 63 65 49 64 2c 20 77 68 61 74 49 66 2c  ourceId, whatIf,
21ba0 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20   verbose,..     
21bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
21bc0 65 66 20 65 72 72 6f 72 29 3b 0d 0a 20 20 20 20  ef error);..    
21bd0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
21be0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65     }..        #e
21bf0 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
21c00 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
21c10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21c20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21c30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21c40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
21c50 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 56         #region V
21c60 69 73 75 61 6c 20 53 74 75 64 69 6f 20 44 61 74  isual Studio Dat
21c70 61 20 50 72 6f 76 69 64 65 72 20 48 61 6e 64 6c  a Provider Handl
21c80 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 70 72 69  ing..        pri
21c90 76 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f 6c  vate static bool
21ca0 20 41 64 64 56 73 44 61 74 61 50 72 6f 76 69 64   AddVsDataProvid
21cb0 65 72 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  er(..           
21cc0 20 52 65 67 69 73 74 72 79 4b 65 79 20 72 6f 6f   RegistryKey roo
21cd0 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20  tKey,..         
21ce0 20 20 20 56 65 72 73 69 6f 6e 20 76 73 56 65 72     Version vsVer
21cf0 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20  sion,..         
21d00 20 20 20 47 75 69 64 20 73 65 72 76 69 63 65 49     Guid serviceI
21d10 64 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d,..            
21d20 47 75 69 64 20 64 61 74 61 50 72 6f 76 69 64 65  Guid dataProvide
21d30 72 49 64 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  rId,..          
21d40 20 20 73 74 72 69 6e 67 20 66 69 6c 65 4e 61 6d    string fileNam
21d50 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
21d60 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20  bool whatIf,..  
21d70 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76            bool v
21d80 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20  erbose,..       
21d90 20 20 20 20 20 72 65 66 20 73 74 72 69 6e 67 20       ref string 
21da0 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20  error..         
21db0 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d     )..        {.
21dc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
21dd0 28 76 73 41 64 6f 4e 65 74 54 65 63 68 6e 6f 6c  (vsAdoNetTechnol
21de0 6f 67 79 49 64 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  ogyId == null)..
21df0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
21e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
21e10 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64 20  rror = "invalid 
21e20 41 44 4f 2e 4e 45 54 20 74 65 63 68 6e 6f 6c 6f  ADO.NET technolo
21e30 67 79 20 49 64 22 3b 0d 0a 20 20 20 20 20 20 20  gy Id";..       
21e40 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
21e50 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
21e60 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
21e70 20 20 20 20 20 73 74 72 69 6e 67 20 6b 65 79 4e       string keyN
21e80 61 6d 65 20 3d 20 47 65 74 56 73 4b 65 79 4e 61  ame = GetVsKeyNa
21e90 6d 65 28 76 73 56 65 72 73 69 6f 6e 29 3b 0d 0a  me(vsVersion);..
21ea0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 75 73  ..            us
21eb0 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72  ing (MockRegistr
21ec0 79 4b 65 79 20 6b 65 79 20 3d 20 52 65 67 69 73  yKey key = Regis
21ed0 74 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75  tryHelper.OpenSu
21ee0 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20  bKey(..         
21ef0 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b             rootK
21f00 65 79 2c 20 6b 65 79 4e 61 6d 65 2c 20 66 61 6c  ey, keyName, fal
21f10 73 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62  se, whatIf, verb
21f20 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ose))..         
21f30 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
21f40 20 20 20 20 20 20 69 66 20 28 6b 65 79 20 3d 3d        if (key ==
21f50 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
21f60 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
21f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
21f80 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f  rror = String.Fo
21f90 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
21fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
21fb0 63 6f 75 6c 64 20 6e 6f 74 20 6f 70 65 6e 20 72  could not open r
21fc0 65 67 69 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d  egistry key: {0}
21fd0 5c 5c 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20  \\{1}",..       
21fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21ff0 20 72 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e 61 6d   rootKey, keyNam
22000 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
22010 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
22020 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
22030 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
22040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 75                 u
22050 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74  sing (MockRegist
22060 72 79 4b 65 79 20 73 75 62 4b 65 79 20 3d 20 52  ryKey subKey = R
22070 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 4f 70  egistryHelper.Op
22080 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20  enSubKey(..     
22090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
220a0 20 20 20 6b 65 79 2c 20 22 44 61 74 61 50 72 6f     key, "DataPro
220b0 76 69 64 65 72 73 22 2c 20 74 72 75 65 2c 20 77  viders", true, w
220c0 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 29  hatIf, verbose))
220d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
220e0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
220f0 20 20 20 20 20 20 20 20 20 69 66 20 28 73 75 62           if (sub
22100 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  Key == null)..  
22110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22120 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
22130 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
22140 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d  or = String.Form
22150 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
22160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22170 20 22 63 6f 75 6c 64 20 6e 6f 74 20 6f 70 65 6e   "could not open
22180 20 72 65 67 69 73 74 72 79 20 6b 65 79 3a 20 7b   registry key: {
22190 30 7d 5c 5c 44 61 74 61 50 72 6f 76 69 64 65 72  0}\\DataProvider
221a0 73 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s",..           
221b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
221c0 20 6b 65 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20   key);....      
221d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
221e0 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
221f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
22200 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
22210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 75 73                us
22220 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72  ing (MockRegistr
22230 79 4b 65 79 20 64 61 74 61 50 72 6f 76 69 64 65  yKey dataProvide
22240 72 4b 65 79 20 3d 20 52 65 67 69 73 74 72 79 48  rKey = RegistryH
22250 65 6c 70 65 72 2e 43 72 65 61 74 65 53 75 62 4b  elper.CreateSubK
22260 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey(..           
22270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22280 20 73 75 62 4b 65 79 2c 20 64 61 74 61 50 72 6f   subKey, dataPro
22290 76 69 64 65 72 49 64 2e 54 6f 53 74 72 69 6e 67  viderId.ToString
222a0 28 56 73 49 64 46 6f 72 6d 61 74 29 2c 20 77 68  (VsIdFormat), wh
222b0 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20  atIf,..         
222c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
222d0 20 20 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20     verbose))..  
222e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
222f0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
22300 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
22310 28 64 61 74 61 50 72 6f 76 69 64 65 72 4b 65 79  (dataProviderKey
22320 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
22330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22340 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
22350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22360 20 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67    error = String
22370 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
22380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22390 20 20 20 20 20 20 20 20 20 20 22 63 6f 75 6c 64            "could
223a0 20 6e 6f 74 20 63 72 65 61 74 65 20 72 65 67 69   not create regi
223b0 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 7b  stry key: {0}\\{
223c0 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  1}",..          
223d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
223e0 20 20 20 20 20 20 6b 65 79 2c 20 64 61 74 61 50        key, dataP
223f0 72 6f 76 69 64 65 72 49 64 2e 54 6f 53 74 72 69  roviderId.ToStri
22400 6e 67 28 56 73 49 64 46 6f 72 6d 61 74 29 29 3b  ng(VsIdFormat));
22410 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
22420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22430 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20  return false;.. 
22440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22450 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
22460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22470 20 20 20 20 52 65 67 69 73 74 72 79 48 65 6c 70      RegistryHelp
22480 65 72 2e 53 65 74 56 61 6c 75 65 28 0d 0a 20 20  er.SetValue(..  
22490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
224a0 20 20 20 20 20 20 20 20 20 20 64 61 74 61 50 72            dataPr
224b0 6f 76 69 64 65 72 4b 65 79 2c 20 6e 75 6c 6c 2c  oviderKey, null,
224c0 20 44 65 73 63 72 69 70 74 69 6f 6e 2c 20 77 68   Description, wh
224d0 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20  atIf,..         
224e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
224f0 20 20 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a     verbose);....
22500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22510 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79          Registry
22520 48 65 6c 70 65 72 2e 53 65 74 56 61 6c 75 65 28  Helper.SetValue(
22530 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
22540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 61                da
22550 74 61 50 72 6f 76 69 64 65 72 4b 65 79 2c 20 22  taProviderKey, "
22560 49 6e 76 61 72 69 61 6e 74 4e 61 6d 65 22 2c 20  InvariantName", 
22570 49 6e 76 61 72 69 61 6e 74 4e 61 6d 65 2c 0d 0a  InvariantName,..
22580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22590 20 20 20 20 20 20 20 20 20 20 20 20 77 68 61 74              what
225a0 49 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d  If, verbose);...
225b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
225c0 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72           Registr
225d0 79 48 65 6c 70 65 72 2e 53 65 74 56 61 6c 75 65  yHelper.SetValue
225e0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
225f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
22600 61 74 61 50 72 6f 76 69 64 65 72 4b 65 79 2c 20  ataProviderKey, 
22610 22 54 65 63 68 6e 6f 6c 6f 67 79 22 2c 0d 0a 20  "Technology",.. 
22620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22630 20 20 20 20 20 20 20 20 20 20 20 28 28 47 75 69             ((Gui
22640 64 29 76 73 41 64 6f 4e 65 74 54 65 63 68 6e 6f  d)vsAdoNetTechno
22650 6c 6f 67 79 49 64 29 2e 54 6f 53 74 72 69 6e 67  logyId).ToString
22660 28 56 73 49 64 46 6f 72 6d 61 74 29 2c 0d 0a 20  (VsIdFormat),.. 
22670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22680 20 20 20 20 20 20 20 20 20 20 20 77 68 61 74 49             whatI
22690 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a  f, verbose);....
226a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
226b0 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79          Registry
226c0 48 65 6c 70 65 72 2e 53 65 74 56 61 6c 75 65 28  Helper.SetValue(
226d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
226e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 61                da
226f0 74 61 50 72 6f 76 69 64 65 72 4b 65 79 2c 20 22  taProviderKey, "
22700 43 6f 64 65 42 61 73 65 22 2c 20 66 69 6c 65 4e  CodeBase", fileN
22710 61 6d 65 2c 20 77 68 61 74 49 66 2c 0d 0a 20 20  ame, whatIf,..  
22720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22730 20 20 20 20 20 20 20 20 20 20 76 65 72 62 6f 73            verbos
22740 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
22750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52                 R
22760 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 53 65  egistryHelper.Se
22770 74 56 61 6c 75 65 28 0d 0a 20 20 20 20 20 20 20  tValue(..       
22780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22790 20 20 20 20 20 64 61 74 61 50 72 6f 76 69 64 65       dataProvide
227a0 72 4b 65 79 2c 20 22 46 61 63 74 6f 72 79 53 65  rKey, "FactorySe
227b0 72 76 69 63 65 22 2c 0d 0a 20 20 20 20 20 20 20  rvice",..       
227c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
227d0 20 20 20 20 20 73 65 72 76 69 63 65 49 64 2e 54       serviceId.T
227e0 6f 53 74 72 69 6e 67 28 56 73 49 64 46 6f 72 6d  oString(VsIdForm
227f0 61 74 29 2c 20 77 68 61 74 49 66 2c 20 76 65 72  at), whatIf, ver
22800 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  bose);....      
22810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22820 20 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72    RegistryHelper
22830 2e 43 72 65 61 74 65 53 75 62 4b 65 79 28 64 61  .CreateSubKey(da
22840 74 61 50 72 6f 76 69 64 65 72 4b 65 79 2c 0d 0a  taProviderKey,..
22850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22860 20 20 20 20 20 20 20 20 20 20 20 20 22 53 75 70              "Sup
22870 70 6f 72 74 65 64 4f 62 6a 65 63 74 73 5c 5c 44  portedObjects\\D
22880 61 74 61 43 6f 6e 6e 65 63 74 69 6f 6e 55 49 43  ataConnectionUIC
22890 6f 6e 74 72 6f 6c 22 2c 0d 0a 20 20 20 20 20 20  ontrol",..      
228a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
228b0 20 20 20 20 20 20 77 68 61 74 49 66 2c 20 76 65        whatIf, ve
228c0 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  rbose);....     
228d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
228e0 20 20 20 52 65 67 69 73 74 72 79 48 65 6c 70 65     RegistryHelpe
228f0 72 2e 43 72 65 61 74 65 53 75 62 4b 65 79 28 64  r.CreateSubKey(d
22900 61 74 61 50 72 6f 76 69 64 65 72 4b 65 79 2c 0d  ataProviderKey,.
22910 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
22920 20 20 20 20 20 20 20 20 20 20 20 20 20 22 53 75               "Su
22930 70 70 6f 72 74 65 64 4f 62 6a 65 63 74 73 5c 5c  pportedObjects\\
22940 44 61 74 61 43 6f 6e 6e 65 63 74 69 6f 6e 50 72  DataConnectionPr
22950 6f 70 65 72 74 69 65 73 22 2c 0d 0a 20 20 20 20  operties",..    
22960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22970 20 20 20 20 20 20 20 20 77 68 61 74 49 66 2c 20          whatIf, 
22980 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20  verbose);....   
22990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
229a0 20 20 20 20 20 52 65 67 69 73 74 72 79 48 65 6c       RegistryHel
229b0 70 65 72 2e 43 72 65 61 74 65 53 75 62 4b 65 79  per.CreateSubKey
229c0 28 64 61 74 61 50 72 6f 76 69 64 65 72 4b 65 79  (dataProviderKey
229d0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
229e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
229f0 53 75 70 70 6f 72 74 65 64 4f 62 6a 65 63 74 73  SupportedObjects
22a00 5c 5c 44 61 74 61 43 6f 6e 6e 65 63 74 69 6f 6e  \\DataConnection
22a10 53 75 70 70 6f 72 74 22 2c 20 77 68 61 74 49 66  Support", whatIf
22a20 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
22a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76                 v
22a40 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20  erbose);....    
22a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22a60 20 20 20 20 52 65 67 69 73 74 72 79 48 65 6c 70      RegistryHelp
22a70 65 72 2e 43 72 65 61 74 65 53 75 62 4b 65 79 28  er.CreateSubKey(
22a80 64 61 74 61 50 72 6f 76 69 64 65 72 4b 65 79 2c  dataProviderKey,
22a90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
22aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 53                "S
22ab0 75 70 70 6f 72 74 65 64 4f 62 6a 65 63 74 73 5c  upportedObjects\
22ac0 5c 44 61 74 61 4f 62 6a 65 63 74 53 75 70 70 6f  \DataObjectSuppo
22ad0 72 74 22 2c 20 77 68 61 74 49 66 2c 0d 0a 20 20  rt", whatIf,..  
22ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22af0 20 20 20 20 20 20 20 20 20 20 76 65 72 62 6f 73            verbos
22b00 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
22b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52                 R
22b20 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 43 72  egistryHelper.Cr
22b30 65 61 74 65 53 75 62 4b 65 79 28 64 61 74 61 50  eateSubKey(dataP
22b40 72 6f 76 69 64 65 72 4b 65 79 2c 0d 0a 20 20 20  roviderKey,..   
22b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22b60 20 20 20 20 20 20 20 20 20 22 53 75 70 70 6f 72           "Suppor
22b70 74 65 64 4f 62 6a 65 63 74 73 5c 5c 44 61 74 61  tedObjects\\Data
22b80 56 69 65 77 53 75 70 70 6f 72 74 22 2c 20 77 68  ViewSupport", wh
22b90 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20  atIf,..         
22ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22bb0 20 20 20 76 65 72 62 6f 73 65 29 3b 0d 0a 20 20     verbose);..  
22bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22bd0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
22be0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
22bf0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
22c00 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65       return true
22c10 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  ;..        }....
22c20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
22c30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22c40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22c50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22c60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
22c70 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  ...        priva
22c80 74 65 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 52  te static bool R
22c90 65 6d 6f 76 65 56 73 44 61 74 61 50 72 6f 76 69  emoveVsDataProvi
22ca0 64 65 72 28 0d 0a 20 20 20 20 20 20 20 20 20 20  der(..          
22cb0 20 20 52 65 67 69 73 74 72 79 4b 65 79 20 72 6f    RegistryKey ro
22cc0 6f 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20  otKey,..        
22cd0 20 20 20 20 56 65 72 73 69 6f 6e 20 76 73 56 65      Version vsVe
22ce0 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20  rsion,..        
22cf0 20 20 20 20 47 75 69 64 20 64 61 74 61 50 72 6f      Guid dataPro
22d00 76 69 64 65 72 49 64 2c 0d 0a 20 20 20 20 20 20  viderId,..      
22d10 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49        bool whatI
22d20 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f,..            
22d30 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a 20  bool verbose,.. 
22d40 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20 73             ref s
22d50 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20  tring error..   
22d60 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
22d70 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
22d80 20 20 20 73 74 72 69 6e 67 20 6b 65 79 4e 61 6d     string keyNam
22d90 65 20 3d 20 47 65 74 56 73 4b 65 79 4e 61 6d 65  e = GetVsKeyName
22da0 28 76 73 56 65 72 73 69 6f 6e 29 3b 0d 0a 0d 0a  (vsVersion);....
22db0 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e              usin
22dc0 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b  g (MockRegistryK
22dd0 65 79 20 6b 65 79 20 3d 20 52 65 67 69 73 74 72  ey key = Registr
22de0 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62 4b  yHelper.OpenSubK
22df0 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey(..           
22e00 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79           rootKey
22e10 2c 20 6b 65 79 4e 61 6d 65 2c 20 66 61 6c 73 65  , keyName, false
22e20 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73  , whatIf, verbos
22e30 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e))..           
22e40 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
22e50 20 20 20 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e      if (key == n
22e60 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
22e70 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
22e80 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
22e90 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d  or = String.Form
22ea0 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
22eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 63 6f               "co
22ec0 75 6c 64 20 6e 6f 74 20 6f 70 65 6e 20 72 65 67  uld not open reg
22ed0 69 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c  istry key: {0}\\
22ee0 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  {1}",..         
22ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
22f00 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e 61 6d 65 29  ootKey, keyName)
22f10 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
22f20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
22f30 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
22f40 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
22f50 20 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69               usi
22f60 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79  ng (MockRegistry
22f70 4b 65 79 20 73 75 62 4b 65 79 20 3d 20 52 65 67  Key subKey = Reg
22f80 69 73 74 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e  istryHelper.Open
22f90 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20  SubKey(..       
22fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22fb0 20 6b 65 79 2c 20 22 44 61 74 61 50 72 6f 76 69   key, "DataProvi
22fc0 64 65 72 73 22 2c 20 74 72 75 65 2c 20 77 68 61  ders", true, wha
22fd0 74 49 66 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a  tIf, verbose))..
22fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22ff0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
23000 20 20 20 20 20 20 20 69 66 20 28 73 75 62 4b 65         if (subKe
23010 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  y == null)..    
23020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23030 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
23040 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
23050 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74   = String.Format
23060 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
23070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
23080 63 6f 75 6c 64 20 6e 6f 74 20 6f 70 65 6e 20 72  could not open r
23090 65 67 69 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d  egistry key: {0}
230a0 5c 5c 44 61 74 61 50 72 6f 76 69 64 65 72 73 22  \\DataProviders"
230b0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
230c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b                 k
230d0 65 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ey);....        
230e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
230f0 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20  return false;.. 
23100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23110 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
23120 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69              Regi
23130 73 74 72 79 48 65 6c 70 65 72 2e 44 65 6c 65 74  stryHelper.Delet
23140 65 53 75 62 4b 65 79 54 72 65 65 28 0d 0a 20 20  eSubKeyTree(..  
23150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23160 20 20 20 20 20 20 73 75 62 4b 65 79 2c 20 64 61        subKey, da
23170 74 61 50 72 6f 76 69 64 65 72 49 64 2e 54 6f 53  taProviderId.ToS
23180 74 72 69 6e 67 28 56 73 49 64 46 6f 72 6d 61 74  tring(VsIdFormat
23190 29 2c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20  ), whatIf,..    
231a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
231b0 20 20 20 20 76 65 72 62 6f 73 65 29 3b 0d 0a 20      verbose);.. 
231c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
231d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
231e0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ...            r
231f0 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20  eturn true;..   
23200 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
23210 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
23220 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23230 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23240 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23250 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
23260 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61       private sta
23270 74 69 63 20 62 6f 6f 6c 20 50 72 6f 63 65 73 73  tic bool Process
23280 56 73 44 61 74 61 50 72 6f 76 69 64 65 72 28 0d  VsDataProvider(.
23290 0a 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67  .            Reg
232a0 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79  istryKey rootKey
232b0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 56  ,..            V
232c0 65 72 73 69 6f 6e 20 76 73 56 65 72 73 69 6f 6e  ersion vsVersion
232d0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 47  ,..            G
232e0 75 69 64 20 70 61 63 6b 61 67 65 49 64 2c 20 2f  uid packageId, /
232f0 2a 20 4e 4f 54 20 55 53 45 44 20 2a 2f 0d 0a 20  * NOT USED */.. 
23300 20 20 20 20 20 20 20 20 20 20 20 47 75 69 64 20             Guid 
23310 73 65 72 76 69 63 65 49 64 2c 0d 0a 20 20 20 20  serviceId,..    
23320 20 20 20 20 20 20 20 20 47 75 69 64 20 64 61 74          Guid dat
23330 61 53 6f 75 72 63 65 49 64 2c 20 2f 2a 20 4e 4f  aSourceId, /* NO
23340 54 20 55 53 45 44 20 2a 2f 0d 0a 20 20 20 20 20  T USED */..     
23350 20 20 20 20 20 20 20 47 75 69 64 20 64 61 74 61         Guid data
23360 50 72 6f 76 69 64 65 72 49 64 2c 0d 0a 20 20 20  ProviderId,..   
23370 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20           object 
23380 63 6c 69 65 6e 74 44 61 74 61 2c 0d 0a 20 20 20  clientData,..   
23390 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68           bool wh
233a0 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20  atIf,..         
233b0 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c     bool verbose,
233c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
233d0 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a  f string error..
233e0 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
233f0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
23400 20 20 20 20 20 20 41 6e 79 50 61 69 72 3c 73 74        AnyPair<st
23410 72 69 6e 67 2c 20 62 6f 6f 6c 3e 20 70 61 69 72  ring, bool> pair
23420 20 3d 20 63 6c 69 65 6e 74 44 61 74 61 20 61 73   = clientData as
23430 20 41 6e 79 50 61 69 72 3c 73 74 72 69 6e 67 2c   AnyPair<string,
23440 20 62 6f 6f 6c 3e 3b 0d 0a 0d 0a 20 20 20 20 20   bool>;....     
23450 20 20 20 20 20 20 20 69 66 20 28 70 61 69 72 20         if (pair 
23460 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
23470 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
23480 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
23490 20 22 69 6e 76 61 6c 69 64 20 56 53 20 63 61 6c   "invalid VS cal
234a0 6c 62 61 63 6b 20 64 61 74 61 22 3b 0d 0a 20 20  lback data";..  
234b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
234c0 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
234d0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
234e0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 70 61            if (pa
234f0 69 72 2e 59 29 0d 0a 20 20 20 20 20 20 20 20 20  ir.Y)..         
23500 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
23510 20 20 20 20 20 20 72 65 74 75 72 6e 20 41 64 64        return Add
23520 56 73 44 61 74 61 50 72 6f 76 69 64 65 72 28 0d  VsDataProvider(.
23530 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
23540 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 76 73       rootKey, vs
23550 56 65 72 73 69 6f 6e 2c 20 73 65 72 76 69 63 65  Version, service
23560 49 64 2c 20 64 61 74 61 50 72 6f 76 69 64 65 72  Id, dataProvider
23570 49 64 2c 20 70 61 69 72 2e 58 2c 0d 0a 20 20 20  Id, pair.X,..   
23580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23590 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65   whatIf, verbose
235a0 2c 20 72 65 66 20 65 72 72 6f 72 29 3b 0d 0a 20  , ref error);.. 
235b0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
235c0 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a            else..
235d0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
235e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
235f0 65 74 75 72 6e 20 52 65 6d 6f 76 65 56 73 44 61  eturn RemoveVsDa
23600 74 61 50 72 6f 76 69 64 65 72 28 0d 0a 20 20 20  taProvider(..   
23610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23620 20 72 6f 6f 74 4b 65 79 2c 20 76 73 56 65 72 73   rootKey, vsVers
23630 69 6f 6e 2c 20 64 61 74 61 50 72 6f 76 69 64 65  ion, dataProvide
23640 72 49 64 2c 20 77 68 61 74 49 66 2c 20 76 65 72  rId, whatIf, ver
23650 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  bose,..         
23660 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20 65             ref e
23670 72 72 6f 72 29 3b 0d 0a 20 20 20 20 20 20 20 20  rror);..        
23680 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d      }..        }
23690 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65  ..        #endre
236a0 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
236b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
236c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
236d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
236e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
236f0 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
23700 20 20 20 23 72 65 67 69 6f 6e 20 56 69 73 75 61     #region Visua
23710 6c 20 53 74 75 64 69 6f 20 50 61 63 6b 61 67 65  l Studio Package
23720 20 48 61 6e 64 6c 69 6e 67 0d 0a 20 20 20 20 20   Handling..     
23730 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
23740 63 20 62 6f 6f 6c 20 41 64 64 56 73 50 61 63 6b  c bool AddVsPack
23750 61 67 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  age(..          
23760 20 20 52 65 67 69 73 74 72 79 4b 65 79 20 72 6f    RegistryKey ro
23770 6f 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20  otKey,..        
23780 20 20 20 20 56 65 72 73 69 6f 6e 20 76 73 56 65      Version vsVe
23790 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20  rsion,..        
237a0 20 20 20 20 47 75 69 64 20 70 61 63 6b 61 67 65      Guid package
237b0 49 64 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  Id,..           
237c0 20 47 75 69 64 20 73 65 72 76 69 63 65 49 64 2c   Guid serviceId,
237d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
237e0 72 69 6e 67 20 66 69 6c 65 4e 61 6d 65 2c 0d 0a  ring fileName,..
237f0 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
23800 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20   whatIf,..      
23810 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f        bool verbo
23820 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se,..           
23830 20 72 65 66 20 73 74 72 69 6e 67 20 65 72 72 6f   ref string erro
23840 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29  r..            )
23850 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
23860 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
23870 6b 65 79 4e 61 6d 65 20 3d 20 47 65 74 56 73 4b  keyName = GetVsK
23880 65 79 4e 61 6d 65 28 76 73 56 65 72 73 69 6f 6e  eyName(vsVersion
23890 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
238a0 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67    using (MockReg
238b0 69 73 74 72 79 4b 65 79 20 6b 65 79 20 3d 20 52  istryKey key = R
238c0 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 4f 70  egistryHelper.Op
238d0 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20  enSubKey(..     
238e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
238f0 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e 61 6d 65 2c  ootKey, keyName,
23900 20 66 61 6c 73 65 2c 20 77 68 61 74 49 66 2c 20   false, whatIf, 
23910 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20  verbose))..     
23920 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
23930 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6b 65            if (ke
23940 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  y == null)..    
23950 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
23960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23970 20 20 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e     error = Strin
23980 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
23990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
239a0 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20 6f 70     "could not op
239b0 65 6e 20 72 65 67 69 73 74 72 79 20 6b 65 79 3a  en registry key:
239c0 20 7b 30 7d 5c 5c 7b 31 7d 22 2c 0d 0a 20 20 20   {0}\\{1}",..   
239d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
239e0 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 6b 65       rootKey, ke
239f0 79 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  yName);....     
23a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
23a10 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
23a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
23a30 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
23a40 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65     using (MockRe
23a50 67 69 73 74 72 79 4b 65 79 20 73 75 62 4b 65 79  gistryKey subKey
23a60 20 3d 20 52 65 67 69 73 74 72 79 48 65 6c 70 65   = RegistryHelpe
23a70 72 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20  r.OpenSubKey(.. 
23a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23a90 20 20 20 20 20 20 20 6b 65 79 2c 20 22 50 61 63         key, "Pac
23aa0 6b 61 67 65 73 22 2c 20 74 72 75 65 2c 20 77 68  kages", true, wh
23ab0 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 29 0d  atIf, verbose)).
23ac0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
23ad0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
23ae0 20 20 20 20 20 20 20 20 69 66 20 28 73 75 62 4b          if (subK
23af0 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ey == null)..   
23b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23b10 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
23b20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
23b30 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  r = String.Forma
23b40 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
23b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23b60 22 63 6f 75 6c 64 20 6e 6f 74 20 6f 70 65 6e 20  "could not open 
23b70 72 65 67 69 73 74 72 79 20 6b 65 79 3a 20 7b 30  registry key: {0
23b80 7d 5c 5c 50 61 63 6b 61 67 65 73 22 2c 0d 0a 20  }\\Packages",.. 
23b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23ba0 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 29 3b             key);
23bb0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
23bc0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
23bd0 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
23be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
23bf0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
23c00 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 4d          using (M
23c10 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 70  ockRegistryKey p
23c20 61 63 6b 61 67 65 4b 65 79 20 3d 20 52 65 67 69  ackageKey = Regi
23c30 73 74 72 79 48 65 6c 70 65 72 2e 43 72 65 61 74  stryHelper.Creat
23c40 65 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20  eSubKey(..      
23c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23c60 20 20 20 20 20 20 73 75 62 4b 65 79 2c 20 70 61        subKey, pa
23c70 63 6b 61 67 65 49 64 2e 54 6f 53 74 72 69 6e 67  ckageId.ToString
23c80 28 56 73 49 64 46 6f 72 6d 61 74 29 2c 20 77 68  (VsIdFormat), wh
23c90 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20  atIf,..         
23ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23cb0 20 20 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20     verbose))..  
23cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23cd0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
23ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
23cf0 28 70 61 63 6b 61 67 65 4b 65 79 20 3d 3d 20 6e  (packageKey == n
23d00 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
23d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
23d20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
23d30 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
23d40 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d  or = String.Form
23d50 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
23d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23d70 20 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20       "could not 
23d80 63 72 65 61 74 65 20 72 65 67 69 73 74 72 79 20  create registry 
23d90 6b 65 79 3a 20 7b 30 7d 5c 5c 7b 31 7d 22 2c 0d  key: {0}\\{1}",.
23da0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
23db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23dc0 20 6b 65 79 2c 20 70 61 63 6b 61 67 65 49 64 2e   key, packageId.
23dd0 54 6f 53 74 72 69 6e 67 28 56 73 49 64 46 6f 72  ToString(VsIdFor
23de0 6d 61 74 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  mat));....      
23df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23e00 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
23e10 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se;..           
23e20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
23e30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
23e40 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74            Regist
23e50 72 79 48 65 6c 70 65 72 2e 53 65 74 56 61 6c 75  ryHelper.SetValu
23e60 65 28 70 61 63 6b 61 67 65 4b 65 79 2c 20 6e 75  e(packageKey, nu
23e70 6c 6c 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ll, String.Forma
23e80 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
23e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23ea0 22 7b 30 7d 20 44 65 73 69 67 6e 65 72 20 50 61  "{0} Designer Pa
23eb0 63 6b 61 67 65 22 2c 20 50 72 6f 6a 65 63 74 4e  ckage", ProjectN
23ec0 61 6d 65 29 2c 20 77 68 61 74 49 66 2c 0d 0a 20  ame), whatIf,.. 
23ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23ee0 20 20 20 20 20 20 20 20 20 20 20 76 65 72 62 6f             verbo
23ef0 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  se);....        
23f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23f10 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 53  RegistryHelper.S
23f20 65 74 56 61 6c 75 65 28 70 61 63 6b 61 67 65 4b  etValue(packageK
23f30 65 79 2c 20 22 43 6c 61 73 73 22 2c 0d 0a 20 20  ey, "Class",..  
23f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23f50 20 20 20 20 20 20 20 20 20 20 22 53 51 4c 69 74            "SQLit
23f60 65 2e 44 65 73 69 67 6e 65 72 2e 53 51 4c 69 74  e.Designer.SQLit
23f70 65 50 61 63 6b 61 67 65 22 2c 20 77 68 61 74 49  ePackage", whatI
23f80 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a  f, verbose);....
23f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23fa0 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79          Registry
23fb0 48 65 6c 70 65 72 2e 53 65 74 56 61 6c 75 65 28  Helper.SetValue(
23fc0 70 61 63 6b 61 67 65 4b 65 79 2c 20 22 43 6f 64  packageKey, "Cod
23fd0 65 42 61 73 65 22 2c 0d 0a 20 20 20 20 20 20 20  eBase",..       
23fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23ff0 20 20 20 20 20 66 69 6c 65 4e 61 6d 65 2c 20 77       fileName, w
24000 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 3b  hatIf, verbose);
24010 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
24020 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69              Regi
24030 73 74 72 79 48 65 6c 70 65 72 2e 53 65 74 56 61  stryHelper.SetVa
24040 6c 75 65 28 70 61 63 6b 61 67 65 4b 65 79 2c 20  lue(packageKey, 
24050 22 49 44 22 2c 20 34 30 30 2c 20 77 68 61 74 49  "ID", 400, whatI
24060 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f,..            
24070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24080 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20  verbose);....   
24090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
240a0 20 20 20 20 20 52 65 67 69 73 74 72 79 48 65 6c       RegistryHel
240b0 70 65 72 2e 53 65 74 56 61 6c 75 65 28 70 61 63  per.SetValue(pac
240c0 6b 61 67 65 4b 65 79 2c 20 22 49 6e 70 72 6f 63  kageKey, "Inproc
240d0 53 65 72 76 65 72 33 32 22 2c 0d 0a 20 20 20 20  Server32",..    
240e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
240f0 20 20 20 20 20 20 20 20 50 61 74 68 2e 43 6f 6d          Path.Com
24100 62 69 6e 65 28 45 6e 76 69 72 6f 6e 6d 65 6e 74  bine(Environment
24110 2e 53 79 73 74 65 6d 44 69 72 65 63 74 6f 72 79  .SystemDirectory
24120 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
24130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24140 20 20 20 22 6d 73 63 6f 72 65 65 2e 64 6c 6c 22     "mscoree.dll"
24150 29 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f  ), whatIf, verbo
24160 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  se);....        
24170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24180 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 53  RegistryHelper.S
24190 65 74 56 61 6c 75 65 28 70 61 63 6b 61 67 65 4b  etValue(packageK
241a0 65 79 2c 20 22 43 6f 6d 70 61 6e 79 4e 61 6d 65  ey, "CompanyName
241b0 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
241c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
241d0 22 68 74 74 70 3a 2f 2f 73 79 73 74 65 6d 2e 64  "http://system.d
241e0 61 74 61 2e 73 71 6c 69 74 65 2e 6f 72 67 2f 22  ata.sqlite.org/"
241f0 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73  , whatIf, verbos
24200 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
24210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52                 R
24220 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 53 65  egistryHelper.Se
24230 74 56 61 6c 75 65 28 70 61 63 6b 61 67 65 4b 65  tValue(packageKe
24240 79 2c 20 22 4d 69 6e 45 64 69 74 69 6f 6e 22 2c  y, "MinEdition",
24250 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
24260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 73                "s
24270 74 61 6e 64 61 72 64 22 2c 20 77 68 61 74 49 66  tandard", whatIf
24280 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20  , verbose);.... 
24290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
242a0 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79 48         RegistryH
242b0 65 6c 70 65 72 2e 53 65 74 56 61 6c 75 65 28 70  elper.SetValue(p
242c0 61 63 6b 61 67 65 4b 65 79 2c 20 22 50 72 6f 64  ackageKey, "Prod
242d0 75 63 74 4e 61 6d 65 22 2c 0d 0a 20 20 20 20 20  uctName",..     
242e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
242f0 20 20 20 20 20 20 20 53 74 72 69 6e 67 2e 46 6f         String.Fo
24300 72 6d 61 74 28 22 7b 30 7d 20 44 65 73 69 67 6e  rmat("{0} Design
24310 65 72 20 50 61 63 6b 61 67 65 22 2c 20 50 72 6f  er Package", Pro
24320 6a 65 63 74 4e 61 6d 65 29 2c 0d 0a 20 20 20 20  jectName),..    
24330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24340 20 20 20 20 20 20 20 20 77 68 61 74 49 66 2c 20          whatIf, 
24350 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20  verbose);....   
24360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24370 20 20 20 20 20 52 65 67 69 73 74 72 79 48 65 6c       RegistryHel
24380 70 65 72 2e 53 65 74 56 61 6c 75 65 28 70 61 63  per.SetValue(pac
24390 6b 61 67 65 4b 65 79 2c 20 22 50 72 6f 64 75 63  kageKey, "Produc
243a0 74 56 65 72 73 69 6f 6e 22 2c 0d 0a 20 20 20 20  tVersion",..    
243b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
243c0 20 20 20 20 20 20 20 20 22 31 2e 30 22 2c 20 77          "1.0", w
243d0 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 3b  hatIf, verbose);
243e0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
243f0 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e              usin
24400 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b  g (MockRegistryK
24410 65 79 20 74 6f 6f 6c 62 6f 78 4b 65 79 20 3d 20  ey toolboxKey = 
24420 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 43  RegistryHelper.C
24430 72 65 61 74 65 53 75 62 4b 65 79 28 0d 0a 20 20  reateSubKey(..  
24440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 61                pa
24460 63 6b 61 67 65 4b 65 79 2c 20 22 54 6f 6f 6c 62  ckageKey, "Toolb
24470 6f 78 22 2c 20 77 68 61 74 49 66 2c 20 76 65 72  ox", whatIf, ver
24480 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20  bose))..        
24490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
244a0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
244b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
244c0 66 20 28 74 6f 6f 6c 62 6f 78 4b 65 79 20 3d 3d  f (toolboxKey ==
244d0 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
244e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
244f0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
24500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24510 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 53         error = S
24520 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
24530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24550 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20 63 72     "could not cr
24560 65 61 74 65 20 72 65 67 69 73 74 72 79 20 6b 65  eate registry ke
24570 79 3a 20 7b 30 7d 5c 5c 54 6f 6f 6c 62 6f 78 22  y: {0}\\Toolbox"
24580 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
24590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
245a0 20 20 20 20 20 20 20 70 61 63 6b 61 67 65 4b 65         packageKe
245b0 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
245c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
245d0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
245e0 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lse;..          
245f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24600 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
24610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24620 20 20 20 52 65 67 69 73 74 72 79 48 65 6c 70 65     RegistryHelpe
24630 72 2e 53 65 74 56 61 6c 75 65 28 0d 0a 20 20 20  r.SetValue(..   
24640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24650 20 20 20 20 20 20 20 20 20 20 20 20 20 74 6f 6f               too
24660 6c 62 6f 78 4b 65 79 2c 20 22 44 65 66 61 75 6c  lboxKey, "Defaul
24670 74 20 49 74 65 6d 73 22 2c 20 33 2c 20 77 68 61  t Items", 3, wha
24680 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf,..          
24690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
246a0 20 20 20 20 20 20 76 65 72 62 6f 73 65 29 3b 0d        verbose);.
246b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
246c0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
246d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
246e0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
246f0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
24700 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 4d          using (M
24710 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 73  ockRegistryKey s
24720 75 62 4b 65 79 20 3d 20 52 65 67 69 73 74 72 79  ubKey = Registry
24730 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62 4b 65  Helper.OpenSubKe
24740 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
24750 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 2c              key,
24760 20 22 4d 65 6e 75 73 22 2c 20 74 72 75 65 2c 20   "Menus", true, 
24770 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29  whatIf, verbose)
24780 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
24790 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
247a0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73 75            if (su
247b0 62 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  bKey == null).. 
247c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
247d0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
247e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
247f0 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72  ror = String.For
24800 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
24810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24820 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20 6f 70 65    "could not ope
24830 6e 20 72 65 67 69 73 74 72 79 20 6b 65 79 3a 20  n registry key: 
24840 7b 30 7d 5c 5c 4d 65 6e 75 73 22 2c 0d 0a 20 20  {0}\\Menus",..  
24850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24860 20 20 20 20 20 20 20 20 20 20 6b 65 79 29 3b 0d            key);.
24870 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
24880 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
24890 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
248a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
248b0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
248c0 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79 48         RegistryH
248d0 65 6c 70 65 72 2e 53 65 74 56 61 6c 75 65 28 0d  elper.SetValue(.
248e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
248f0 20 20 20 20 20 20 20 20 20 73 75 62 4b 65 79 2c           subKey,
24900 20 70 61 63 6b 61 67 65 49 64 2e 54 6f 53 74 72   packageId.ToStr
24910 69 6e 67 28 56 73 49 64 46 6f 72 6d 61 74 29 2c  ing(VsIdFormat),
24920 20 22 2c 20 31 30 30 30 2c 20 33 22 2c 0d 0a 20   ", 1000, 3",.. 
24930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24940 20 20 20 20 20 20 20 77 68 61 74 49 66 2c 20 76         whatIf, v
24950 65 72 62 6f 73 65 29 3b 0d 0a 20 20 20 20 20 20  erbose);..      
24960 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
24970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 75                 u
24980 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74  sing (MockRegist
24990 72 79 4b 65 79 20 73 75 62 4b 65 79 20 3d 20 52  ryKey subKey = R
249a0 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 4f 70  egistryHelper.Op
249b0 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20  enSubKey(..     
249c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
249d0 20 20 20 6b 65 79 2c 20 22 53 65 72 76 69 63 65     key, "Service
249e0 73 22 2c 20 74 72 75 65 2c 20 77 68 61 74 49 66  s", true, whatIf
249f0 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20  , verbose))..   
24a00 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
24a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24a20 20 20 20 20 69 66 20 28 73 75 62 4b 65 79 20 3d      if (subKey =
24a30 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
24a40 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
24a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24a60 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
24a70 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
24a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24a90 20 20 20 20 20 20 20 20 20 20 20 20 22 63 6f 75              "cou
24aa0 6c 64 20 6e 6f 74 20 6f 70 65 6e 20 72 65 67 69  ld not open regi
24ab0 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 53  stry key: {0}\\S
24ac0 65 72 76 69 63 65 73 22 2c 0d 0a 20 20 20 20 20  ervices",..     
24ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24ae0 20 20 20 20 20 20 20 6b 65 79 29 3b 0d 0a 0d 0a         key);....
24af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24b00 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
24b10 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
24b20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
24b30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24b40 20 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52      using (MockR
24b50 65 67 69 73 74 72 79 4b 65 79 20 73 65 72 76 69  egistryKey servi
24b60 63 65 4b 65 79 20 3d 20 52 65 67 69 73 74 72 79  ceKey = Registry
24b70 48 65 6c 70 65 72 2e 43 72 65 61 74 65 53 75 62  Helper.CreateSub
24b80 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  Key(..          
24b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24ba0 20 20 73 75 62 4b 65 79 2c 20 73 65 72 76 69 63    subKey, servic
24bb0 65 49 64 2e 54 6f 53 74 72 69 6e 67 28 56 73 49  eId.ToString(VsI
24bc0 64 46 6f 72 6d 61 74 29 2c 20 77 68 61 74 49 66  dFormat), whatIf
24bd0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
24be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76                 v
24bf0 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20  erbose))..      
24c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
24c10 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
24c20 20 20 20 20 20 20 20 20 20 69 66 20 28 73 65 72           if (ser
24c30 76 69 63 65 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29  viceKey == null)
24c40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
24c50 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
24c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24c70 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
24c80 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
24c90 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
24ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24cb0 20 22 63 6f 75 6c 64 20 6e 6f 74 20 63 72 65 61   "could not crea
24cc0 74 65 20 72 65 67 69 73 74 72 79 20 6b 65 79 3a  te registry key:
24cd0 20 7b 30 7d 5c 5c 7b 31 7d 22 2c 0d 0a 20 20 20   {0}\\{1}",..   
24ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79               key
24d00 2c 20 73 65 72 76 69 63 65 49 64 2e 54 6f 53 74  , serviceId.ToSt
24d10 72 69 6e 67 28 56 73 49 64 46 6f 72 6d 61 74 29  ring(VsIdFormat)
24d20 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
24d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24d40 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
24d50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
24d60 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
24d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24d80 20 20 20 20 20 20 52 65 67 69 73 74 72 79 48 65        RegistryHe
24d90 6c 70 65 72 2e 53 65 74 56 61 6c 75 65 28 73 65  lper.SetValue(se
24da0 72 76 69 63 65 4b 65 79 2c 20 6e 75 6c 6c 2c 0d  rviceKey, null,.
24db0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
24dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 70 61 63               pac
24dd0 6b 61 67 65 49 64 2e 54 6f 53 74 72 69 6e 67 28  kageId.ToString(
24de0 56 73 49 64 46 6f 72 6d 61 74 29 2c 20 77 68 61  VsIdFormat), wha
24df0 74 49 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a  tIf, verbose);..
24e00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
24e10 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74            Regist
24e20 72 79 48 65 6c 70 65 72 2e 53 65 74 56 61 6c 75  ryHelper.SetValu
24e30 65 28 73 65 72 76 69 63 65 4b 65 79 2c 20 22 4e  e(serviceKey, "N
24e40 61 6d 65 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  ame",..         
24e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24e60 20 20 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74     String.Format
24e70 28 22 7b 30 7d 20 44 65 73 69 67 6e 65 72 20 53  ("{0} Designer S
24e80 65 72 76 69 63 65 22 2c 20 50 72 6f 6a 65 63 74  ervice", Project
24e90 4e 61 6d 65 29 2c 0d 0a 20 20 20 20 20 20 20 20  Name),..        
24ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24eb0 20 20 20 20 77 68 61 74 49 66 2c 20 76 65 72 62      whatIf, verb
24ec0 6f 73 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ose);..         
24ed0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
24ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
24ef0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
24f00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
24f10 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20  turn true;..    
24f20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
24f30 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
24f40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24f50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24f60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24f70 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
24f80 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74      private stat
24f90 69 63 20 62 6f 6f 6c 20 52 65 6d 6f 76 65 56 73  ic bool RemoveVs
24fa0 50 61 63 6b 61 67 65 28 0d 0a 20 20 20 20 20 20  Package(..      
24fb0 20 20 20 20 20 20 52 65 67 69 73 74 72 79 4b 65        RegistryKe
24fc0 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 20  y rootKey,..    
24fd0 20 20 20 20 20 20 20 20 56 65 72 73 69 6f 6e 20          Version 
24fe0 76 73 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20  vsVersion,..    
24ff0 20 20 20 20 20 20 20 20 47 75 69 64 20 70 61 63          Guid pac
25000 6b 61 67 65 49 64 2c 0d 0a 20 20 20 20 20 20 20  kageId,..       
25010 20 20 20 20 20 47 75 69 64 20 73 65 72 76 69 63       Guid servic
25020 65 49 64 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  eId,..          
25030 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a    bool whatIf,..
25040 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
25050 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20   verbose,..     
25060 20 20 20 20 20 20 20 72 65 66 20 73 74 72 69 6e         ref strin
25070 67 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20  g error..       
25080 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
25090 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  {..            s
250a0 74 72 69 6e 67 20 6b 65 79 4e 61 6d 65 20 3d 20  tring keyName = 
250b0 47 65 74 56 73 4b 65 79 4e 61 6d 65 28 76 73 56  GetVsKeyName(vsV
250c0 65 72 73 69 6f 6e 29 3b 0d 0a 0d 0a 20 20 20 20  ersion);....    
250d0 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 4d          using (M
250e0 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 6b  ockRegistryKey k
250f0 65 79 20 3d 20 52 65 67 69 73 74 72 79 48 65 6c  ey = RegistryHel
25100 70 65 72 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d  per.OpenSubKey(.
25110 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
25120 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 6b 65       rootKey, ke
25130 79 4e 61 6d 65 2c 20 66 61 6c 73 65 2c 20 77 68  yName, false, wh
25140 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 29 0d  atIf, verbose)).
25150 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
25160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25170 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29  if (key == null)
25180 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
25190 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
251a0 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
251b0 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
251c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
251d0 20 20 20 20 20 20 20 20 20 22 63 6f 75 6c 64 20           "could 
251e0 6e 6f 74 20 6f 70 65 6e 20 72 65 67 69 73 74 72  not open registr
251f0 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 7b 31 7d 22  y key: {0}\\{1}"
25200 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
25210 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b             rootK
25220 65 79 2c 20 6b 65 79 4e 61 6d 65 29 3b 0d 0a 0d  ey, keyName);...
25230 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
25240 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
25250 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
25260 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
25270 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28           using (
25280 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20  MockRegistryKey 
25290 73 75 62 4b 65 79 20 3d 20 52 65 67 69 73 74 72  subKey = Registr
252a0 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62 4b  yHelper.OpenSubK
252b0 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey(..           
252c0 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79               key
252d0 2c 20 22 50 61 63 6b 61 67 65 73 22 2c 20 74 72  , "Packages", tr
252e0 75 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62  ue, whatIf, verb
252f0 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ose))..         
25300 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
25310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
25320 20 28 73 75 62 4b 65 79 20 3d 3d 20 6e 75 6c 6c   (subKey == null
25330 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
25340 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
25350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25360 20 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67    error = String
25370 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
25380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25390 20 20 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74        "could not
253a0 20 6f 70 65 6e 20 72 65 67 69 73 74 72 79 20 6b   open registry k
253b0 65 79 3a 20 7b 30 7d 5c 5c 50 61 63 6b 61 67 65  ey: {0}\\Package
253c0 73 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s",..           
253d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
253e0 20 6b 65 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20   key);....      
253f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25400 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
25410 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
25420 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
25430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65                Re
25440 67 69 73 74 72 79 48 65 6c 70 65 72 2e 44 65 6c  gistryHelper.Del
25450 65 74 65 53 75 62 4b 65 79 54 72 65 65 28 0d 0a  eteSubKeyTree(..
25460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25470 20 20 20 20 20 20 20 20 6b 65 79 2c 20 70 61 63          key, pac
25480 6b 61 67 65 49 64 2e 54 6f 53 74 72 69 6e 67 28  kageId.ToString(
25490 56 73 49 64 46 6f 72 6d 61 74 29 2c 20 77 68 61  VsIdFormat), wha
254a0 74 49 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a  tIf, verbose);..
254b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
254c0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
254d0 20 20 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b       using (Mock
254e0 52 65 67 69 73 74 72 79 4b 65 79 20 73 75 62 4b  RegistryKey subK
254f0 65 79 20 3d 20 52 65 67 69 73 74 72 79 48 65 6c  ey = RegistryHel
25500 70 65 72 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d  per.OpenSubKey(.
25510 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
25520 20 20 20 20 20 20 20 20 20 6b 65 79 2c 20 22 4d           key, "M
25530 65 6e 75 73 22 2c 20 74 72 75 65 2c 20 77 68 61  enus", true, wha
25540 74 49 66 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a  tIf, verbose))..
25550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25560 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
25570 20 20 20 20 20 20 20 69 66 20 28 73 75 62 4b 65         if (subKe
25580 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  y == null)..    
25590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
255a0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
255b0 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
255c0 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74   = String.Format
255d0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
255e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
255f0 63 6f 75 6c 64 20 6e 6f 74 20 6f 70 65 6e 20 72  could not open r
25600 65 67 69 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d  egistry key: {0}
25610 5c 5c 4d 65 6e 75 73 22 2c 0d 0a 20 20 20 20 20  \\Menus",..     
25620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25630 20 20 20 20 20 20 20 6b 65 79 29 3b 0d 0a 0d 0a         key);....
25640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25650 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
25660 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
25670 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
25680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25690 20 20 20 20 52 65 67 69 73 74 72 79 48 65 6c 70      RegistryHelp
256a0 65 72 2e 44 65 6c 65 74 65 56 61 6c 75 65 28 0d  er.DeleteValue(.
256b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
256c0 20 20 20 20 20 20 20 20 20 73 75 62 4b 65 79 2c           subKey,
256d0 20 70 61 63 6b 61 67 65 49 64 2e 54 6f 53 74 72   packageId.ToStr
256e0 69 6e 67 28 56 73 49 64 46 6f 72 6d 61 74 29 2c  ing(VsIdFormat),
256f0 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20   whatIf,..      
25700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25710 20 20 76 65 72 62 6f 73 65 29 3b 0d 0a 20 20 20    verbose);..   
25720 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
25730 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
25740 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67    using (MockReg
25750 69 73 74 72 79 4b 65 79 20 73 75 62 4b 65 79 20  istryKey subKey 
25760 3d 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72  = RegistryHelper
25770 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20  .OpenSubKey(..  
25780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25790 20 20 20 20 20 20 6b 65 79 2c 20 22 53 65 72 76        key, "Serv
257a0 69 63 65 73 22 2c 20 74 72 75 65 2c 20 77 68 61  ices", true, wha
257b0 74 49 66 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a  tIf, verbose))..
257c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
257d0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
257e0 20 20 20 20 20 20 20 69 66 20 28 73 75 62 4b 65         if (subKe
257f0 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  y == null)..    
25800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25810 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
25820 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
25830 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74   = String.Format
25840 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
25850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
25860 63 6f 75 6c 64 20 6e 6f 74 20 6f 70 65 6e 20 72  could not open r
25870 65 67 69 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d  egistry key: {0}
25880 5c 5c 53 65 72 76 69 63 65 73 22 2c 0d 0a 20 20  \\Services",..  
25890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
258a0 20 20 20 20 20 20 20 20 20 20 6b 65 79 29 3b 0d            key);.
258b0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
258c0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
258d0 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
258e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
258f0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
25900 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79 48         RegistryH
25910 65 6c 70 65 72 2e 44 65 6c 65 74 65 53 75 62 4b  elper.DeleteSubK
25920 65 79 54 72 65 65 28 0d 0a 20 20 20 20 20 20 20  eyTree(..       
25930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25940 20 73 75 62 4b 65 79 2c 20 73 65 72 76 69 63 65   subKey, service
25950 49 64 2e 54 6f 53 74 72 69 6e 67 28 56 73 49 64  Id.ToString(VsId
25960 46 6f 72 6d 61 74 29 2c 20 77 68 61 74 49 66 2c  Format), whatIf,
25970 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
25980 20 20 20 20 20 20 20 20 20 20 76 65 72 62 6f 73            verbos
25990 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e);..           
259a0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
259b0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
259c0 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65       return true
259d0 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  ;..        }....
259e0 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
259f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25a00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25a10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25a20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
25a30 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  ...        priva
25a40 74 65 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 50  te static bool P
25a50 72 6f 63 65 73 73 56 73 50 61 63 6b 61 67 65 28  rocessVsPackage(
25a60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 52 65  ..            Re
25a70 67 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65  gistryKey rootKe
25a80 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y,..            
25a90 56 65 72 73 69 6f 6e 20 76 73 56 65 72 73 69 6f  Version vsVersio
25aa0 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n,..            
25ab0 47 75 69 64 20 70 61 63 6b 61 67 65 49 64 2c 0d  Guid packageId,.
25ac0 0a 20 20 20 20 20 20 20 20 20 20 20 20 47 75 69  .            Gui
25ad0 64 20 73 65 72 76 69 63 65 49 64 2c 0d 0a 20 20  d serviceId,..  
25ae0 20 20 20 20 20 20 20 20 20 20 47 75 69 64 20 64            Guid d
25af0 61 74 61 53 6f 75 72 63 65 49 64 2c 0d 0a 20 20  ataSourceId,..  
25b00 20 20 20 20 20 20 20 20 20 20 47 75 69 64 20 64            Guid d
25b10 61 74 61 50 72 6f 76 69 64 65 72 49 64 2c 0d 0a  ataProviderId,..
25b20 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65              obje
25b30 63 74 20 63 6c 69 65 6e 74 44 61 74 61 2c 0d 0a  ct clientData,..
25b40 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
25b50 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20   whatIf,..      
25b60 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f        bool verbo
25b70 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se,..           
25b80 20 72 65 66 20 73 74 72 69 6e 67 20 65 72 72 6f   ref string erro
25b90 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29  r..            )
25ba0 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
25bb0 20 20 20 20 20 20 20 20 20 41 6e 79 50 61 69 72           AnyPair
25bc0 3c 73 74 72 69 6e 67 2c 20 62 6f 6f 6c 3e 20 70  <string, bool> p
25bd0 61 69 72 20 3d 20 63 6c 69 65 6e 74 44 61 74 61  air = clientData
25be0 20 61 73 20 41 6e 79 50 61 69 72 3c 73 74 72 69   as AnyPair<stri
25bf0 6e 67 2c 20 62 6f 6f 6c 3e 3b 0d 0a 0d 0a 20 20  ng, bool>;....  
25c00 20 20 20 20 20 20 20 20 20 20 69 66 20 28 70 61            if (pa
25c10 69 72 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ir == null)..   
25c20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
25c30 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
25c40 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 56 53 20  r = "invalid VS 
25c50 63 61 6c 6c 62 61 63 6b 20 64 61 74 61 22 3b 0d  callback data";.
25c60 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
25c70 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
25c80 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
25c90 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
25ca0 28 70 61 69 72 2e 59 29 0d 0a 20 20 20 20 20 20  (pair.Y)..      
25cb0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
25cc0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
25cd0 41 64 64 56 73 50 61 63 6b 61 67 65 28 0d 0a 20  AddVsPackage(.. 
25ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25cf0 20 20 20 72 6f 6f 74 4b 65 79 2c 20 76 73 56 65     rootKey, vsVe
25d00 72 73 69 6f 6e 2c 20 70 61 63 6b 61 67 65 49 64  rsion, packageId
25d10 2c 20 73 65 72 76 69 63 65 49 64 2c 20 70 61 69  , serviceId, pai
25d20 72 2e 58 2c 20 77 68 61 74 49 66 2c 0d 0a 20 20  r.X, whatIf,..  
25d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25d40 20 20 76 65 72 62 6f 73 65 2c 20 72 65 66 20 65    verbose, ref e
25d50 72 72 6f 72 29 3b 0d 0a 20 20 20 20 20 20 20 20  rror);..        
25d60 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
25d70 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20     else..       
25d80 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
25d90 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 52          return R
25da0 65 6d 6f 76 65 56 73 50 61 63 6b 61 67 65 28 0d  emoveVsPackage(.
25db0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
25dc0 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 76 73       rootKey, vs
25dd0 56 65 72 73 69 6f 6e 2c 20 70 61 63 6b 61 67 65  Version, package
25de0 49 64 2c 20 73 65 72 76 69 63 65 49 64 2c 20 77  Id, serviceId, w
25df0 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 2c 0d  hatIf, verbose,.
25e00 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
25e10 20 20 20 20 20 72 65 66 20 65 72 72 6f 72 29 3b       ref error);
25e20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
25e30 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
25e40 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
25e50 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
25e60 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  on....        //
25e70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25e80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25e90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25ea0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25eb0 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
25ec0 20 23 72 65 67 69 6f 6e 20 41 70 70 6c 69 63 61   #region Applica
25ed0 74 69 6f 6e 20 45 6e 74 72 79 20 50 6f 69 6e 74  tion Entry Point
25ee0 0d 0a 20 20 20 20 20 20 20 20 70 75 62 6c 69 63  ..        public
25ef0 20 73 74 61 74 69 63 20 73 74 72 69 6e 67 20 47   static string G
25f00 65 74 49 6d 61 67 65 52 75 6e 74 69 6d 65 56 65  etImageRuntimeVe
25f10 72 73 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20  rsion(..        
25f20 20 20 20 20 73 74 72 69 6e 67 20 66 69 6c 65 4e      string fileN
25f30 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ame..           
25f40 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20   )..        {.. 
25f50 20 20 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a             try..
25f60 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
25f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 41                 A
25f80 73 73 65 6d 62 6c 79 20 61 73 73 65 6d 62 6c 79  ssembly assembly
25f90 20 3d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   =..            
25fa0 20 20 20 20 20 20 20 20 41 73 73 65 6d 62 6c 79          Assembly
25fb0 2e 52 65 66 6c 65 63 74 69 6f 6e 4f 6e 6c 79 4c  .ReflectionOnlyL
25fc0 6f 61 64 46 72 6f 6d 28 66 69 6c 65 4e 61 6d 65  oadFrom(fileName
25fd0 29 3b 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a  ); /* throw */..
25fe0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
25ff0 20 20 69 66 20 28 61 73 73 65 6d 62 6c 79 20 21    if (assembly !
26000 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
26010 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
26020 75 72 6e 20 61 73 73 65 6d 62 6c 79 2e 49 6d 61  urn assembly.Ima
26030 67 65 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e  geRuntimeVersion
26040 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
26050 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 61  ..            ca
26060 74 63 68 0d 0a 20 20 20 20 20 20 20 20 20 20 20  tch..           
26070 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
26080 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e      // do nothin
26090 67 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  g...            
260a0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
260b0 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 20   return null;.. 
260c0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
260d0 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
260e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
260f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26100 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26110 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
26120 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
26130 74 61 74 69 63 20 69 6e 74 20 4d 61 69 6e 28 0d  tatic int Main(.
26140 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72  .            str
26150 69 6e 67 5b 5d 20 61 72 67 73 0d 0a 20 20 20 20  ing[] args..    
26160 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
26170 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
26180 20 20 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20    Configuration 
26190 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d 20  configuration = 
261a0 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20  null;..         
261b0 20 20 20 73 74 72 69 6e 67 20 65 72 72 6f 72 20     string error 
261c0 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20  = null;....     
261d0 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
261e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
261f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26200 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26210 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
26220 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f            #regio
26230 6e 20 43 6f 6d 6d 61 6e 64 20 4c 69 6e 65 20 50  n Command Line P
26240 72 6f 63 65 73 73 69 6e 67 0d 0a 20 20 20 20 20  rocessing..     
26250 20 20 20 20 20 20 20 69 66 20 28 21 43 6f 6e 66         if (!Conf
26260 69 67 75 72 61 74 69 6f 6e 2e 46 72 6f 6d 41 72  iguration.FromAr
26270 67 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  gs(..           
26280 20 20 20 20 20 20 20 20 20 61 72 67 73 2c 20 74           args, t
26290 72 75 65 2c 20 72 65 66 20 63 6f 6e 66 69 67 75  rue, ref configu
262a0 72 61 74 69 6f 6e 2c 20 72 65 66 20 65 72 72 6f  ration, ref erro
262b0 72 29 20 7c 7c 0d 0a 20 20 20 20 20 20 20 20 20  r) ||..         
262c0 20 20 20 20 20 20 20 21 43 6f 6e 66 69 67 75 72         !Configur
262d0 61 74 69 6f 6e 2e 50 72 6f 63 65 73 73 28 0d 0a  ation.Process(..
262e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
262f0 20 20 20 20 61 72 67 73 2c 20 63 6f 6e 66 69 67      args, config
26300 75 72 61 74 69 6f 6e 2c 20 74 72 75 65 2c 20 72  uration, true, r
26310 65 66 20 65 72 72 6f 72 29 29 0d 0a 20 20 20 20  ef error))..    
26320 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
26330 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
26340 4f 70 73 2e 53 68 6f 77 4d 65 73 73 61 67 65 28  Ops.ShowMessage(
26350 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
26360 20 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72        TracePrior
26370 69 74 79 2e 48 69 67 68 65 73 74 2c 20 74 72 61  ity.Highest, tra
26380 63 65 43 61 6c 6c 62 61 63 6b 2c 20 74 68 69 73  ceCallback, this
26390 41 73 73 65 6d 62 6c 79 2c 0d 0a 20 20 20 20 20  Assembly,..     
263a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
263b0 72 72 6f 72 2c 20 74 72 61 63 65 43 61 74 65 67  rror, traceCateg
263c0 6f 72 79 2c 20 4d 65 73 73 61 67 65 42 6f 78 42  ory, MessageBoxB
263d0 75 74 74 6f 6e 73 2e 4f 4b 2c 0d 0a 20 20 20 20  uttons.OK,..    
263e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
263f0 4d 65 73 73 61 67 65 42 6f 78 49 63 6f 6e 2e 45  MessageBoxIcon.E
26400 72 72 6f 72 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  rror);....      
26410 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
26420 20 31 3b 20 2f 2a 20 46 41 49 4c 55 52 45 20 2a   1; /* FAILURE *
26430 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  /..            }
26440 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65  ..            #e
26450 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
26460 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
26470 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26480 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26490 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
264a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
264b0 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69             #regi
264c0 6f 6e 20 43 68 65 63 6b 20 49 6e 73 74 61 6c 6c  on Check Install
264d0 65 64 20 56 53 20 56 65 72 73 69 6f 6e 73 0d 0a  ed VS Versions..
264e0 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 69 74              Init
264f0 69 61 6c 69 7a 65 56 73 52 6f 6f 74 4b 65 79 41  ializeVsRootKeyA
26500 6e 64 49 64 73 28 29 3b 0d 0a 20 20 20 20 20 20  ndIds();..      
26510 20 20 20 20 20 20 49 6e 69 74 69 61 6c 69 7a 65        Initialize
26520 41 6c 6c 46 72 61 6d 65 77 6f 72 6b 73 28 6e 75  AllFrameworks(nu
26530 6c 6c 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ll);..          
26540 20 20 49 6e 69 74 69 61 6c 69 7a 65 41 6c 6c 56    InitializeAllV
26550 73 56 65 72 73 69 6f 6e 73 28 6e 75 6c 6c 29 3b  sVersions(null);
26560 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
26570 56 65 72 73 69 6f 6e 4c 69 73 74 20 69 6e 73 74  VersionList inst
26580 61 6c 6c 65 64 56 73 56 65 72 73 69 6f 6e 73 20  alledVsVersions 
26590 3d 20 6e 65 77 20 56 65 72 73 69 6f 6e 4c 69 73  = new VersionLis
265a0 74 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  t();....        
265b0 20 20 20 20 69 66 20 28 63 6f 6e 66 69 67 75 72      if (configur
265c0 61 74 69 6f 6e 2e 48 61 73 46 6c 61 67 73 28 49  ation.HasFlags(I
265d0 6e 73 74 61 6c 6c 46 6c 61 67 73 2e 41 6c 6c 2c  nstallFlags.All,
265e0 20 2f 2a 20 61 6e 79 20 2a 2f 20 66 61 6c 73 65   /* any */ false
265f0 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
26600 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
26610 20 20 20 69 66 20 28 21 46 6f 72 45 61 63 68 56     if (!ForEachV
26620 73 56 65 72 73 69 6f 6e 52 65 67 69 73 74 72 79  sVersionRegistry
26630 28 41 64 64 56 73 56 65 72 73 69 6f 6e 2c 0d 0a  (AddVsVersion,..
26640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26650 20 20 20 20 20 20 20 20 47 75 69 64 2e 45 6d 70          Guid.Emp
26660 74 79 2c 20 47 75 69 64 2e 45 6d 70 74 79 2c 20  ty, Guid.Empty, 
26670 47 75 69 64 2e 45 6d 70 74 79 2c 20 47 75 69 64  Guid.Empty, Guid
26680 2e 45 6d 70 74 79 2c 0d 0a 20 20 20 20 20 20 20  .Empty,..       
26690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
266a0 20 69 6e 73 74 61 6c 6c 65 64 56 73 56 65 72 73   installedVsVers
266b0 69 6f 6e 73 2c 20 63 6f 6e 66 69 67 75 72 61 74  ions, configurat
266c0 69 6f 6e 2e 57 68 61 74 49 66 2c 0d 0a 20 20 20  ion.WhatIf,..   
266d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
266e0 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69       configurati
266f0 6f 6e 2e 56 65 72 62 6f 73 65 2c 20 72 65 66 20  on.Verbose, ref 
26700 65 72 72 6f 72 29 29 0d 0a 20 20 20 20 20 20 20  error))..       
26710 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
26720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26730 54 72 61 63 65 4f 70 73 2e 53 68 6f 77 4d 65 73  TraceOps.ShowMes
26740 73 61 67 65 28 0d 0a 20 20 20 20 20 20 20 20 20  sage(..         
26750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
26760 72 61 63 65 50 72 69 6f 72 69 74 79 2e 48 69 67  racePriority.Hig
26770 68 65 73 74 2c 20 74 72 61 63 65 43 61 6c 6c 62  hest, traceCallb
26780 61 63 6b 2c 20 6e 75 6c 6c 2c 0d 0a 20 20 20 20  ack, null,..    
26790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
267a0 20 20 20 20 65 72 72 6f 72 2c 20 74 72 61 63 65      error, trace
267b0 43 61 74 65 67 6f 72 79 2c 20 4d 65 73 73 61 67  Category, Messag
267c0 65 42 6f 78 42 75 74 74 6f 6e 73 2e 4f 4b 2c 0d  eBoxButtons.OK,.
267d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
267e0 20 20 20 20 20 20 20 20 20 4d 65 73 73 61 67 65           Message
267f0 42 6f 78 49 63 6f 6e 2e 45 72 72 6f 72 29 3b 0d  BoxIcon.Error);.
26800 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
26810 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 31 3b         return 1;
26820 20 2f 2a 20 46 41 49 4c 55 52 45 20 2a 2f 0d 0a   /* FAILURE */..
26830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26840 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
26850 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
26860 49 6e 69 74 69 61 6c 69 7a 65 56 73 46 72 61 6d  InitializeVsFram
26870 65 77 6f 72 6b 56 65 72 73 69 6f 6e 4d 61 70 28  eworkVersionMap(
26880 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 29 3b 0d  configuration);.
26890 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
268a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
268b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
268c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
268d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
268e0 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
268f0 20 20 69 66 20 28 21 43 6f 6e 66 69 67 75 72 61    if (!Configura
26900 74 69 6f 6e 2e 43 68 65 63 6b 49 6d 61 67 65 52  tion.CheckImageR
26910 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 28 0d 0a  untimeVersion(..
26920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26930 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f      configuratio
26940 6e 2c 20 76 73 46 72 61 6d 65 77 6f 72 6b 56 65  n, vsFrameworkVe
26950 72 73 69 6f 6e 4d 61 70 2c 0d 0a 20 20 20 20 20  rsionMap,..     
26960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
26970 6e 73 74 61 6c 6c 65 64 56 73 56 65 72 73 69 6f  nstalledVsVersio
26980 6e 73 2c 20 74 72 75 65 2c 20 72 65 66 20 65 72  ns, true, ref er
26990 72 6f 72 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ror))..         
269a0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
269b0 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 53        TraceOps.S
269c0 68 6f 77 4d 65 73 73 61 67 65 28 0d 0a 20 20 20  howMessage(..   
269d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
269e0 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 48   TracePriority.H
269f0 69 67 68 65 73 74 2c 20 74 72 61 63 65 43 61 6c  ighest, traceCal
26a00 6c 62 61 63 6b 2c 20 74 68 69 73 41 73 73 65 6d  lback, thisAssem
26a10 62 6c 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  bly,..          
26a20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 2c            error,
26a30 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 2c 20   traceCategory, 
26a40 4d 65 73 73 61 67 65 42 6f 78 42 75 74 74 6f 6e  MessageBoxButton
26a50 73 2e 4f 4b 2c 0d 0a 20 20 20 20 20 20 20 20 20  s.OK,..         
26a60 20 20 20 20 20 20 20 20 20 20 20 4d 65 73 73 61             Messa
26a70 67 65 42 6f 78 49 63 6f 6e 2e 45 72 72 6f 72 29  geBoxIcon.Error)
26a80 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
26a90 20 20 20 20 20 72 65 74 75 72 6e 20 31 3b 20 2f       return 1; /
26aa0 2a 20 46 41 49 4c 55 52 45 20 2a 2f 0d 0a 20 20  * FAILURE */..  
26ab0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
26ac0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
26ad0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26ae0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26af0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26b00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
26b10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 6e  ..            In
26b20 69 74 69 61 6c 69 7a 65 41 6c 6c 46 72 61 6d 65  itializeAllFrame
26b30 77 6f 72 6b 73 28 63 6f 6e 66 69 67 75 72 61 74  works(configurat
26b40 69 6f 6e 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ion);..         
26b50 20 20 20 49 6e 69 74 69 61 6c 69 7a 65 41 6c 6c     InitializeAll
26b60 56 73 56 65 72 73 69 6f 6e 73 28 63 6f 6e 66 69  VsVersions(confi
26b70 67 75 72 61 74 69 6f 6e 29 3b 0d 0a 20 20 20 20  guration);..    
26b80 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
26b90 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  on....          
26ba0 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
26bb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26bc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26bd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26be0 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
26bf0 20 20 20 20 20 41 73 73 65 6d 62 6c 79 4e 61 6d       AssemblyNam
26c00 65 20 61 73 73 65 6d 62 6c 79 4e 61 6d 65 20 3d  e assemblyName =
26c10 20 41 73 73 65 6d 62 6c 79 4e 61 6d 65 2e 47 65   AssemblyName.Ge
26c20 74 41 73 73 65 6d 62 6c 79 4e 61 6d 65 28 0d 0a  tAssemblyName(..
26c30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26c40 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 43 6f  configuration.Co
26c50 72 65 46 69 6c 65 4e 61 6d 65 29 3b 20 2f 2a 20  reFileName); /* 
26c60 74 68 72 6f 77 20 2a 2f 0d 0a 0d 0a 20 20 20 20  throw */....    
26c70 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
26c80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26c90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26ca0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26cb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
26cc0 20 20 20 20 20 20 20 20 20 20 20 41 6e 79 50 61             AnyPa
26cd0 69 72 3c 73 74 72 69 6e 67 2c 20 62 6f 6f 6c 3e  ir<string, bool>
26ce0 20 64 69 72 65 63 74 6f 72 79 50 61 69 72 20 3d   directoryPair =
26cf0 20 6e 65 77 20 41 6e 79 50 61 69 72 3c 73 74 72   new AnyPair<str
26d00 69 6e 67 2c 20 62 6f 6f 6c 3e 28 0d 0a 20 20 20  ing, bool>(..   
26d10 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
26d20 66 69 67 75 72 61 74 69 6f 6e 2e 44 69 72 65 63  figuration.Direc
26d30 74 6f 72 79 2c 20 63 6f 6e 66 69 67 75 72 61 74  tory, configurat
26d40 69 6f 6e 2e 49 6e 73 74 61 6c 6c 29 3b 0d 0a 0d  ion.Install);...
26d50 0a 20 20 20 20 20 20 20 20 20 20 20 20 41 6e 79  .            Any
26d60 50 61 69 72 3c 73 74 72 69 6e 67 2c 20 62 6f 6f  Pair<string, boo
26d70 6c 3e 20 66 69 6c 65 4e 61 6d 65 50 61 69 72 20  l> fileNamePair 
26d80 3d 20 6e 65 77 20 41 6e 79 50 61 69 72 3c 73 74  = new AnyPair<st
26d90 72 69 6e 67 2c 20 62 6f 6f 6c 3e 28 0d 0a 20 20  ring, bool>(..  
26da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
26db0 6e 66 69 67 75 72 61 74 69 6f 6e 2e 44 65 73 69  nfiguration.Desi
26dc0 67 6e 65 72 46 69 6c 65 4e 61 6d 65 2c 20 63 6f  gnerFileName, co
26dd0 6e 66 69 67 75 72 61 74 69 6f 6e 2e 49 6e 73 74  nfiguration.Inst
26de0 61 6c 6c 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  all);....       
26df0 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
26e00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26e10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26e20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26e30 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
26e40 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
26e50 2e 4e 45 54 20 47 41 43 20 49 6e 73 74 61 6c 6c  .NET GAC Install
26e60 2f 52 65 6d 6f 76 65 0d 0a 20 20 20 20 20 20 20  /Remove..       
26e70 20 20 20 20 20 69 66 20 28 63 6f 6e 66 69 67 75       if (configu
26e80 72 61 74 69 6f 6e 2e 48 61 73 46 6c 61 67 73 28  ration.HasFlags(
26e90 49 6e 73 74 61 6c 6c 46 6c 61 67 73 2e 47 41 43  InstallFlags.GAC
26ea0 2c 20 74 72 75 65 29 29 0d 0a 20 20 20 20 20 20  , true))..      
26eb0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
26ec0 20 20 20 20 20 20 20 20 20 50 75 62 6c 69 73 68           Publish
26ed0 20 70 75 62 6c 69 73 68 20 3d 20 6e 75 6c 6c 3b   publish = null;
26ee0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
26ef0 20 20 20 20 69 66 20 28 21 63 6f 6e 66 69 67 75      if (!configu
26f00 72 61 74 69 6f 6e 2e 57 68 61 74 49 66 29 0d 0a  ration.WhatIf)..
26f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26f20 20 20 20 20 70 75 62 6c 69 73 68 20 3d 20 6e 65      publish = ne
26f30 77 20 50 75 62 6c 69 73 68 28 29 3b 0d 0a 0d 0a  w Publish();....
26f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26f50 69 66 20 28 63 6f 6e 66 69 67 75 72 61 74 69 6f  if (configuratio
26f60 6e 2e 49 6e 73 74 61 6c 6c 29 0d 0a 20 20 20 20  n.Install)..    
26f70 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
26f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26f90 20 20 20 69 66 20 28 21 63 6f 6e 66 69 67 75 72     if (!configur
26fa0 61 74 69 6f 6e 2e 57 68 61 74 49 66 29 0d 0a 20  ation.WhatIf).. 
26fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26fc0 20 20 20 20 20 20 20 70 75 62 6c 69 73 68 2e 47         publish.G
26fd0 61 63 49 6e 73 74 61 6c 6c 28 63 6f 6e 66 69 67  acInstall(config
26fe0 75 72 61 74 69 6f 6e 2e 43 6f 72 65 46 69 6c 65  uration.CoreFile
26ff0 4e 61 6d 65 29 3b 20 2f 2a 20 74 68 72 6f 77 20  Name); /* throw 
27000 2a 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  */....          
27010 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f            TraceO
27020 70 73 2e 54 72 61 63 65 28 0d 0a 20 20 20 20 20  ps.Trace(..     
27030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27040 20 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79     TracePriority
27050 2e 48 69 67 68 65 73 74 2c 20 74 72 61 63 65 43  .Highest, traceC
27060 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e  allback, String.
27070 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
27080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27090 20 22 47 61 63 49 6e 73 74 61 6c 6c 3a 20 61 73   "GacInstall: as
270a0 73 65 6d 62 6c 79 50 61 74 68 20 3d 20 7b 30 7d  semblyPath = {0}
270b0 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
270c0 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44              ForD
270d0 69 73 70 6c 61 79 28 63 6f 6e 66 69 67 75 72 61  isplay(configura
270e0 74 69 6f 6e 2e 43 6f 72 65 46 69 6c 65 4e 61 6d  tion.CoreFileNam
270f0 65 29 29 2c 20 74 72 61 63 65 43 61 74 65 67 6f  e)), traceCatego
27100 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
27110 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
27120 21 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 57  !configuration.W
27130 68 61 74 49 66 29 0d 0a 20 20 20 20 20 20 20 20  hatIf)..        
27140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27150 70 75 62 6c 69 73 68 2e 47 61 63 49 6e 73 74 61  publish.GacInsta
27160 6c 6c 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  ll(configuration
27170 2e 4c 69 6e 71 46 69 6c 65 4e 61 6d 65 29 3b 20  .LinqFileName); 
27180 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 0d 0a 20  /* throw */.... 
27190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
271a0 20 20 20 54 72 61 63 65 4f 70 73 2e 54 72 61 63     TraceOps.Trac
271b0 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
271c0 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
271d0 65 50 72 69 6f 72 69 74 79 2e 48 69 67 68 65 73  ePriority.Highes
271e0 74 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b  t, traceCallback
271f0 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  , String.Format(
27200 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
27210 20 20 20 20 20 20 20 20 20 20 22 47 61 63 49 6e            "GacIn
27220 73 74 61 6c 6c 3a 20 61 73 73 65 6d 62 6c 79 50  stall: assemblyP
27230 61 74 68 20 3d 20 7b 30 7d 22 2c 0d 0a 20 20 20  ath = {0}",..   
27240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27250 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28       ForDisplay(
27260 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 4c 69  configuration.Li
27270 6e 71 46 69 6c 65 4e 61 6d 65 29 29 2c 20 74 72  nqFileName)), tr
27280 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 20  aceCategory);.. 
27290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
272a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
272b0 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20    else..        
272c0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
272d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
272e0 66 20 28 21 63 6f 6e 66 69 67 75 72 61 74 69 6f  f (!configuratio
272f0 6e 2e 57 68 61 74 49 66 29 0d 0a 20 20 20 20 20  n.WhatIf)..     
27300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27310 20 20 20 70 75 62 6c 69 73 68 2e 47 61 63 52 65     publish.GacRe
27320 6d 6f 76 65 28 63 6f 6e 66 69 67 75 72 61 74 69  move(configurati
27330 6f 6e 2e 4c 69 6e 71 46 69 6c 65 4e 61 6d 65 29  on.LinqFileName)
27340 3b 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 0d  ; /* throw */...
27350 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
27360 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 54 72       TraceOps.Tr
27370 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ace(..          
27380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
27390 61 63 65 50 72 69 6f 72 69 74 79 2e 48 69 67 68  acePriority.High
273a0 65 73 74 2c 20 74 72 61 63 65 43 61 6c 6c 62 61  est, traceCallba
273b0 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ck, String.Forma
273c0 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
273d0 20 20 20 20 20 20 20 20 20 20 20 20 22 47 61 63              "Gac
273e0 52 65 6d 6f 76 65 3a 20 61 73 73 65 6d 62 6c 79  Remove: assembly
273f0 50 61 74 68 20 3d 20 7b 30 7d 22 2c 0d 0a 20 20  Path = {0}",..  
27400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27410 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79        ForDisplay
27420 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 4c  (configuration.L
27430 69 6e 71 46 69 6c 65 4e 61 6d 65 29 29 2c 20 74  inqFileName)), t
27440 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
27450 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
27460 20 20 20 20 20 20 69 66 20 28 21 63 6f 6e 66 69        if (!confi
27470 67 75 72 61 74 69 6f 6e 2e 57 68 61 74 49 66 29  guration.WhatIf)
27480 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
27490 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 73            publis
274a0 68 2e 47 61 63 52 65 6d 6f 76 65 28 63 6f 6e 66  h.GacRemove(conf
274b0 69 67 75 72 61 74 69 6f 6e 2e 43 6f 72 65 46 69  iguration.CoreFi
274c0 6c 65 4e 61 6d 65 29 3b 20 2f 2a 20 74 68 72 6f  leName); /* thro
274d0 77 20 2a 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  w */....        
274e0 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
274f0 65 4f 70 73 2e 54 72 61 63 65 28 0d 0a 20 20 20  eOps.Trace(..   
27500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27510 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69       TracePriori
27520 74 79 2e 48 69 67 68 65 73 74 2c 20 74 72 61 63  ty.Highest, trac
27530 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e  eCallback, Strin
27540 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
27550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27560 20 20 20 22 47 61 63 52 65 6d 6f 76 65 3a 20 61     "GacRemove: a
27570 73 73 65 6d 62 6c 79 50 61 74 68 20 3d 20 7b 30  ssemblyPath = {0
27580 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }",..           
27590 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72               For
275a0 44 69 73 70 6c 61 79 28 63 6f 6e 66 69 67 75 72  Display(configur
275b0 61 74 69 6f 6e 2e 43 6f 72 65 46 69 6c 65 4e 61  ation.CoreFileNa
275c0 6d 65 29 29 2c 20 74 72 61 63 65 43 61 74 65 67  me)), traceCateg
275d0 6f 72 79 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ory);..         
275e0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
275f0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
27600 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
27610 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
27620 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27630 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27640 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27650 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27660 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
27670 20 20 23 72 65 67 69 6f 6e 20 2e 4e 45 54 20 41    #region .NET A
27680 73 73 65 6d 62 6c 79 46 6f 6c 64 65 72 73 0d 0a  ssemblyFolders..
27690 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
276a0 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 48 61  configuration.Ha
276b0 73 46 6c 61 67 73 28 49 6e 73 74 61 6c 6c 46 6c  sFlags(InstallFl
276c0 61 67 73 2e 41 73 73 65 6d 62 6c 79 46 6f 6c 64  ags.AssemblyFold
276d0 65 72 73 2c 20 74 72 75 65 29 29 0d 0a 20 20 20  ers, true))..   
276e0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
276f0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
27700 21 46 6f 72 45 61 63 68 46 72 61 6d 65 77 6f 72  !ForEachFramewor
27710 6b 52 65 67 69 73 74 72 79 28 50 72 6f 63 65 73  kRegistry(Proces
27720 73 41 73 73 65 6d 62 6c 79 46 6f 6c 64 65 72 73  sAssemblyFolders
27730 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
27740 20 20 20 20 20 20 20 20 20 20 20 64 69 72 65 63             direc
27750 74 6f 72 79 50 61 69 72 2c 20 63 6f 6e 66 69 67  toryPair, config
27760 75 72 61 74 69 6f 6e 2e 57 68 61 74 49 66 2c 0d  uration.WhatIf,.
27770 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
27780 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75           configu
27790 72 61 74 69 6f 6e 2e 56 65 72 62 6f 73 65 2c 20  ration.Verbose, 
277a0 72 65 66 20 65 72 72 6f 72 29 29 0d 0a 20 20 20  ref error))..   
277b0 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
277c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
277d0 20 20 20 20 54 72 61 63 65 4f 70 73 2e 53 68 6f      TraceOps.Sho
277e0 77 4d 65 73 73 61 67 65 28 0d 0a 20 20 20 20 20  wMessage(..     
277f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27800 20 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79     TracePriority
27810 2e 48 69 67 68 65 73 74 2c 20 74 72 61 63 65 43  .Highest, traceC
27820 61 6c 6c 62 61 63 6b 2c 20 6e 75 6c 6c 2c 0d 0a  allback, null,..
27830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27840 20 20 20 20 20 20 20 20 65 72 72 6f 72 2c 20 74          error, t
27850 72 61 63 65 43 61 74 65 67 6f 72 79 2c 20 4d 65  raceCategory, Me
27860 73 73 61 67 65 42 6f 78 42 75 74 74 6f 6e 73 2e  ssageBoxButtons.
27870 4f 4b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  OK,..           
27880 20 20 20 20 20 20 20 20 20 20 20 20 20 4d 65 73               Mes
27890 73 61 67 65 42 6f 78 49 63 6f 6e 2e 45 72 72 6f  sageBoxIcon.Erro
278a0 72 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  r);....         
278b0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
278c0 6e 20 31 3b 20 2f 2a 20 46 41 49 4c 55 52 45 20  n 1; /* FAILURE 
278d0 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  */..            
278e0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
278f0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
27900 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
27910 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
27920 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27930 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27940 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27950 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
27960 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  ...            #
27970 72 65 67 69 6f 6e 20 2e 4e 45 54 20 44 62 50 72  region .NET DbPr
27980 6f 76 69 64 65 72 46 61 63 74 6f 72 79 0d 0a 20  oviderFactory.. 
27990 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 63             if (c
279a0 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 48 61 73  onfiguration.Has
279b0 46 6c 61 67 73 28 49 6e 73 74 61 6c 6c 46 6c 61  Flags(InstallFla
279c0 67 73 2e 44 62 50 72 6f 76 69 64 65 72 46 61 63  gs.DbProviderFac
279d0 74 6f 72 79 2c 20 74 72 75 65 29 29 0d 0a 20 20  tory, true))..  
279e0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
279f0 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
27a00 6c 20 73 61 76 65 64 20 3d 20 66 61 6c 73 65 3b  l saved = false;
27a10 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
27a20 20 20 20 20 69 66 20 28 21 46 6f 72 45 61 63 68      if (!ForEach
27a30 46 72 61 6d 65 77 6f 72 6b 43 6f 6e 66 69 67 28  FrameworkConfig(
27a40 50 72 6f 63 65 73 73 44 62 50 72 6f 76 69 64 65  ProcessDbProvide
27a50 72 46 61 63 74 6f 72 79 2c 0d 0a 20 20 20 20 20  rFactory,..     
27a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27a70 20 20 20 49 6e 76 61 72 69 61 6e 74 4e 61 6d 65     InvariantName
27a80 2c 20 50 72 6f 76 69 64 65 72 4e 61 6d 65 2c 20  , ProviderName, 
27a90 44 65 73 63 72 69 70 74 69 6f 6e 2c 0d 0a 20 20  Description,..  
27aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27ab0 20 20 20 20 20 20 46 61 63 74 6f 72 79 54 79 70        FactoryTyp
27ac0 65 4e 61 6d 65 2c 20 61 73 73 65 6d 62 6c 79 4e  eName, assemblyN
27ad0 61 6d 65 2c 20 64 69 72 65 63 74 6f 72 79 50 61  ame, directoryPa
27ae0 69 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ir,..           
27af0 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
27b00 66 69 67 75 72 61 74 69 6f 6e 2e 57 68 61 74 49  figuration.WhatI
27b10 66 2c 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  f, configuration
27b20 2e 56 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20  .Verbose,..     
27b30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27b40 20 20 20 72 65 66 20 73 61 76 65 64 2c 20 72 65     ref saved, re
27b50 66 20 65 72 72 6f 72 29 29 0d 0a 20 20 20 20 20  f error))..     
27b60 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
27b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27b80 20 20 54 72 61 63 65 4f 70 73 2e 53 68 6f 77 4d    TraceOps.ShowM
27b90 65 73 73 61 67 65 28 0d 0a 20 20 20 20 20 20 20  essage(..       
27ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27bb0 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 48   TracePriority.H
27bc0 69 67 68 65 73 74 2c 20 74 72 61 63 65 43 61 6c  ighest, traceCal
27bd0 6c 62 61 63 6b 2c 20 6e 75 6c 6c 2c 0d 0a 20 20  lback, null,..  
27be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27bf0 20 20 20 20 20 20 65 72 72 6f 72 2c 20 74 72 61        error, tra
27c00 63 65 43 61 74 65 67 6f 72 79 2c 20 4d 65 73 73  ceCategory, Mess
27c10 61 67 65 42 6f 78 42 75 74 74 6f 6e 73 2e 4f 4b  ageBoxButtons.OK
27c20 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
27c30 20 20 20 20 20 20 20 20 20 20 20 4d 65 73 73 61             Messa
27c40 67 65 42 6f 78 49 63 6f 6e 2e 45 72 72 6f 72 29  geBoxIcon.Error)
27c50 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
27c60 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
27c70 31 3b 20 2f 2a 20 46 41 49 4c 55 52 45 20 2a 2f  1; /* FAILURE */
27c80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
27c90 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
27ca0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
27cb0 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
27cc0 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
27cd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27ce0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27cf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27d00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
27d10 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65  .            #re
27d20 67 69 6f 6e 20 56 53 20 50 61 63 6b 61 67 65 0d  gion VS Package.
27d30 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
27d40 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 48  (configuration.H
27d50 61 73 46 6c 61 67 73 28 49 6e 73 74 61 6c 6c 46  asFlags(InstallF
27d60 6c 61 67 73 2e 56 73 50 61 63 6b 61 67 65 2c 20  lags.VsPackage, 
27d70 74 72 75 65 29 29 0d 0a 20 20 20 20 20 20 20 20  true))..        
27d80 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
27d90 20 20 20 20 20 20 20 69 66 20 28 21 46 6f 72 45         if (!ForE
27da0 61 63 68 56 73 56 65 72 73 69 6f 6e 52 65 67 69  achVsVersionRegi
27db0 73 74 72 79 28 50 72 6f 63 65 73 73 56 73 50 61  stry(ProcessVsPa
27dc0 63 6b 61 67 65 2c 0d 0a 20 20 20 20 20 20 20 20  ckage,..        
27dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27de0 28 47 75 69 64 29 76 73 50 61 63 6b 61 67 65 49  (Guid)vsPackageI
27df0 64 2c 20 28 47 75 69 64 29 76 73 53 65 72 76 69  d, (Guid)vsServi
27e00 63 65 49 64 2c 0d 0a 20 20 20 20 20 20 20 20 20  ceId,..         
27e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28                 (
27e20 47 75 69 64 29 76 73 44 61 74 61 53 6f 75 72 63  Guid)vsDataSourc
27e30 65 73 49 64 2c 20 28 47 75 69 64 29 76 73 44 61  esId, (Guid)vsDa
27e40 74 61 50 72 6f 76 69 64 65 72 49 64 2c 0d 0a 20  taProviderId,.. 
27e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27e60 20 20 20 20 20 20 20 66 69 6c 65 4e 61 6d 65 50         fileNameP
27e70 61 69 72 2c 20 63 6f 6e 66 69 67 75 72 61 74 69  air, configurati
27e80 6f 6e 2e 57 68 61 74 49 66 2c 0d 0a 20 20 20 20  on.WhatIf,..    
27e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27ea0 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f      configuratio
27eb0 6e 2e 56 65 72 62 6f 73 65 2c 20 72 65 66 20 65  n.Verbose, ref e
27ec0 72 72 6f 72 29 29 0d 0a 20 20 20 20 20 20 20 20  rror))..        
27ed0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
27ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
27ef0 72 61 63 65 4f 70 73 2e 53 68 6f 77 4d 65 73 73  raceOps.ShowMess
27f00 61 67 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  age(..          
27f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
27f20 61 63 65 50 72 69 6f 72 69 74 79 2e 48 69 67 68  acePriority.High
27f30 65 73 74 2c 20 74 72 61 63 65 43 61 6c 6c 62 61  est, traceCallba
27f40 63 6b 2c 20 6e 75 6c 6c 2c 0d 0a 20 20 20 20 20  ck, null,..     
27f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27f60 20 20 20 65 72 72 6f 72 2c 20 74 72 61 63 65 43     error, traceC
27f70 61 74 65 67 6f 72 79 2c 20 4d 65 73 73 61 67 65  ategory, Message
27f80 42 6f 78 42 75 74 74 6f 6e 73 2e 4f 4b 2c 0d 0a  BoxButtons.OK,..
27f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27fa0 20 20 20 20 20 20 20 20 4d 65 73 73 61 67 65 42          MessageB
27fb0 6f 78 49 63 6f 6e 2e 45 72 72 6f 72 29 3b 0d 0a  oxIcon.Error);..
27fc0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
27fd0 20 20 20 20 20 20 72 65 74 75 72 6e 20 31 3b 20        return 1; 
27fe0 2f 2a 20 46 41 49 4c 55 52 45 20 2a 2f 0d 0a 20  /* FAILURE */.. 
27ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
28000 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
28010 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e  .            #en
28020 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
28030 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
28040 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28050 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28060 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28070 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
28080 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f            #regio
28090 6e 20 56 53 20 44 61 74 61 53 6f 75 72 63 65 0d  n VS DataSource.
280a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
280b0 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 48  (configuration.H
280c0 61 73 46 6c 61 67 73 28 49 6e 73 74 61 6c 6c 46  asFlags(InstallF
280d0 6c 61 67 73 2e 56 73 44 61 74 61 53 6f 75 72 63  lags.VsDataSourc
280e0 65 2c 20 74 72 75 65 29 29 0d 0a 20 20 20 20 20  e, true))..     
280f0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
28100 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21 46            if (!F
28110 6f 72 45 61 63 68 56 73 56 65 72 73 69 6f 6e 52  orEachVsVersionR
28120 65 67 69 73 74 72 79 28 50 72 6f 63 65 73 73 56  egistry(ProcessV
28130 73 44 61 74 61 53 6f 75 72 63 65 2c 0d 0a 20 20  sDataSource,..  
28140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28150 20 20 20 20 20 20 28 47 75 69 64 29 76 73 50 61        (Guid)vsPa
28160 63 6b 61 67 65 49 64 2c 20 28 47 75 69 64 29 76  ckageId, (Guid)v
28170 73 53 65 72 76 69 63 65 49 64 2c 0d 0a 20 20 20  sServiceId,..   
28180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28190 20 20 20 20 20 28 47 75 69 64 29 76 73 44 61 74       (Guid)vsDat
281a0 61 53 6f 75 72 63 65 73 49 64 2c 20 28 47 75 69  aSourcesId, (Gui
281b0 64 29 76 73 44 61 74 61 50 72 6f 76 69 64 65 72  d)vsDataProvider
281c0 49 64 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  Id,..           
281d0 20 20 20 20 20 20 20 20 20 20 20 20 20 66 69 6c               fil
281e0 65 4e 61 6d 65 50 61 69 72 2c 20 63 6f 6e 66 69  eNamePair, confi
281f0 67 75 72 61 74 69 6f 6e 2e 57 68 61 74 49 66 2c  guration.WhatIf,
28200 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
28210 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67            config
28220 75 72 61 74 69 6f 6e 2e 56 65 72 62 6f 73 65 2c  uration.Verbose,
28230 20 72 65 66 20 65 72 72 6f 72 29 29 0d 0a 20 20   ref error))..  
28240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
28250 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
28260 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 53 68       TraceOps.Sh
28270 6f 77 4d 65 73 73 61 67 65 28 0d 0a 20 20 20 20  owMessage(..    
28280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28290 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69 74      TracePriorit
282a0 79 2e 48 69 67 68 65 73 74 2c 20 74 72 61 63 65  y.Highest, trace
282b0 43 61 6c 6c 62 61 63 6b 2c 20 6e 75 6c 6c 2c 0d  Callback, null,.
282c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
282d0 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 2c 20           error, 
282e0 74 72 61 63 65 43 61 74 65 67 6f 72 79 2c 20 4d  traceCategory, M
282f0 65 73 73 61 67 65 42 6f 78 42 75 74 74 6f 6e 73  essageBoxButtons
28300 2e 4f 4b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  .OK,..          
28310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4d 65                Me
28320 73 73 61 67 65 42 6f 78 49 63 6f 6e 2e 45 72 72  ssageBoxIcon.Err
28330 6f 72 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  or);....        
28340 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
28350 72 6e 20 31 3b 20 2f 2a 20 46 41 49 4c 55 52 45  rn 1; /* FAILURE
28360 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   */..           
28370 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
28380 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
28390 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
283a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
283b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
283c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
283d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
283e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
283f0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
28400 23 72 65 67 69 6f 6e 20 56 53 20 44 61 74 61 50  #region VS DataP
28410 72 6f 76 69 64 65 72 0d 0a 20 20 20 20 20 20 20  rovider..       
28420 20 20 20 20 20 69 66 20 28 63 6f 6e 66 69 67 75       if (configu
28430 72 61 74 69 6f 6e 2e 48 61 73 46 6c 61 67 73 28  ration.HasFlags(
28440 49 6e 73 74 61 6c 6c 46 6c 61 67 73 2e 56 73 44  InstallFlags.VsD
28450 61 74 61 50 72 6f 76 69 64 65 72 2c 20 74 72 75  ataProvider, tru
28460 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e))..           
28470 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
28480 20 20 20 20 69 66 20 28 21 46 6f 72 45 61 63 68      if (!ForEach
28490 56 73 56 65 72 73 69 6f 6e 52 65 67 69 73 74 72  VsVersionRegistr
284a0 79 28 50 72 6f 63 65 73 73 56 73 44 61 74 61 50  y(ProcessVsDataP
284b0 72 6f 76 69 64 65 72 2c 0d 0a 20 20 20 20 20 20  rovider,..      
284c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
284d0 20 20 28 47 75 69 64 29 76 73 50 61 63 6b 61 67    (Guid)vsPackag
284e0 65 49 64 2c 20 28 47 75 69 64 29 76 73 53 65 72  eId, (Guid)vsSer
284f0 76 69 63 65 49 64 2c 0d 0a 20 20 20 20 20 20 20  viceId,..       
28500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28510 20 28 47 75 69 64 29 76 73 44 61 74 61 53 6f 75   (Guid)vsDataSou
28520 72 63 65 73 49 64 2c 20 28 47 75 69 64 29 76 73  rcesId, (Guid)vs
28530 44 61 74 61 50 72 6f 76 69 64 65 72 49 64 2c 0d  DataProviderId,.
28540 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
28550 20 20 20 20 20 20 20 20 20 66 69 6c 65 4e 61 6d           fileNam
28560 65 50 61 69 72 2c 20 63 6f 6e 66 69 67 75 72 61  ePair, configura
28570 74 69 6f 6e 2e 57 68 61 74 49 66 2c 0d 0a 20 20  tion.WhatIf,..  
28580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28590 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74        configurat
285a0 69 6f 6e 2e 56 65 72 62 6f 73 65 2c 20 72 65 66  ion.Verbose, ref
285b0 20 65 72 72 6f 72 29 29 0d 0a 20 20 20 20 20 20   error))..      
285c0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
285d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
285e0 20 54 72 61 63 65 4f 70 73 2e 53 68 6f 77 4d 65   TraceOps.ShowMe
285f0 73 73 61 67 65 28 0d 0a 20 20 20 20 20 20 20 20  ssage(..        
28600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28610 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 48 69  TracePriority.Hi
28620 67 68 65 73 74 2c 20 74 72 61 63 65 43 61 6c 6c  ghest, traceCall
28630 62 61 63 6b 2c 20 6e 75 6c 6c 2c 0d 0a 20 20 20  back, null,..   
28640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28650 20 20 20 20 20 65 72 72 6f 72 2c 20 74 72 61 63       error, trac
28660 65 43 61 74 65 67 6f 72 79 2c 20 4d 65 73 73 61  eCategory, Messa
28670 67 65 42 6f 78 42 75 74 74 6f 6e 73 2e 4f 4b 2c  geBoxButtons.OK,
28680 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
28690 20 20 20 20 20 20 20 20 20 20 4d 65 73 73 61 67            Messag
286a0 65 42 6f 78 49 63 6f 6e 2e 45 72 72 6f 72 29 3b  eBoxIcon.Error);
286b0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
286c0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 31          return 1
286d0 3b 20 2f 2a 20 46 41 49 4c 55 52 45 20 2a 2f 0d  ; /* FAILURE */.
286e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
286f0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
28700 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  }..            #
28710 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
28720 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
28730 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28740 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28750 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28760 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
28770 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67              #reg
28780 69 6f 6e 20 4c 6f 67 20 53 75 6d 6d 61 72 79 0d  ion Log Summary.
28790 0a 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61  .            Tra
287a0 63 65 4f 70 73 2e 54 72 61 63 65 28 0d 0a 20 20  ceOps.Trace(..  
287b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
287c0 61 63 65 50 72 69 6f 72 69 74 79 2e 48 69 67 68  acePriority.High
287d0 65 72 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63  er, traceCallbac
287e0 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  k, String.Format
287f0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
28800 20 20 20 22 73 75 62 4b 65 79 73 43 72 65 61 74     "subKeysCreat
28810 65 64 20 3d 20 7b 30 7d 2c 20 73 75 62 4b 65 79  ed = {0}, subKey
28820 73 44 65 6c 65 74 65 64 20 3d 20 7b 31 7d 2c 20  sDeleted = {1}, 
28830 22 20 2b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  " +..           
28840 20 20 20 20 20 22 6b 65 79 56 61 6c 75 65 73 53       "keyValuesS
28850 65 74 20 3d 20 7b 32 7d 2c 20 6b 65 79 56 61 6c  et = {2}, keyVal
28860 75 65 73 44 65 6c 65 74 65 64 20 3d 20 7b 33 7d  uesDeleted = {3}
28870 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
28880 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 52      ForDisplay(R
28890 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 53 75  egistryHelper.Su
288a0 62 4b 65 79 73 43 72 65 61 74 65 64 29 2c 0d 0a  bKeysCreated),..
288b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
288c0 46 6f 72 44 69 73 70 6c 61 79 28 52 65 67 69 73  ForDisplay(Regis
288d0 74 72 79 48 65 6c 70 65 72 2e 53 75 62 4b 65 79  tryHelper.SubKey
288e0 73 44 65 6c 65 74 65 64 29 2c 0d 0a 20 20 20 20  sDeleted),..    
288f0 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44              ForD
28900 69 73 70 6c 61 79 28 52 65 67 69 73 74 72 79 48  isplay(RegistryH
28910 65 6c 70 65 72 2e 4b 65 79 56 61 6c 75 65 73 53  elper.KeyValuesS
28920 65 74 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  et),..          
28930 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79        ForDisplay
28940 28 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e  (RegistryHelper.
28950 4b 65 79 56 61 6c 75 65 73 44 65 6c 65 74 65 64  KeyValuesDeleted
28960 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
28970 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
28980 72 79 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ry);..          
28990 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
289a0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
289b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
289c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
289d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
289e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
289f0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ...            r
28a00 65 74 75 72 6e 20 30 3b 20 2f 2a 20 53 55 43 43  eturn 0; /* SUCC
28a10 45 53 53 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20  ESS */..        
28a20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72  }..        #endr
28a30 65 67 69 6f 6e 0d 0a 20 20 20 20 7d 0d 0a 20 20  egion..    }..  
28a40 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 7d 0d    #endregion..}.
28a50 0a                                               .