System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact 81149b06e6e766eba749350d0cab5f12e618066e:


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 43 6f        #region Co
9f20: 6e 66 69 67 75 72 61 74 69 6f 6e 20 43 6c 61 73  nfiguration Clas
9f30: 73 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  s..        priva
9f40: 74 65 20 73 65 61 6c 65 64 20 63 6c 61 73 73 20  te sealed class 
9f50: 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 0d 0a 20  Configuration.. 
9f60: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
9f70: 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 72        #region Pr
9f80: 69 76 61 74 65 20 43 6f 6e 73 74 61 6e 74 73 0d  ivate Constants.
9f90: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
9fa0: 76 61 74 65 20 63 6f 6e 73 74 20 63 68 61 72 20  vate const char 
9fb0: 53 77 69 74 63 68 20 3d 20 27 2d 27 3b 0d 0a 20  Switch = '-';.. 
9fc0: 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
9fd0: 74 65 20 63 6f 6e 73 74 20 63 68 61 72 20 41 6c  te const char Al
9fe0: 74 53 77 69 74 63 68 20 3d 20 27 2f 27 3b 0d 0a  tSwitch = '/';..
9ff0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
a000: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a010: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
a050: 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
a060: 72 65 61 64 6f 6e 6c 79 20 63 68 61 72 5b 5d 20  readonly char[] 
a070: 53 77 69 74 63 68 43 68 61 72 73 20 3d 20 7b 0d  SwitchChars = {.
a080: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
a090: 20 53 77 69 74 63 68 2c 20 41 6c 74 53 77 69 74   Switch, AltSwit
a0a0: 63 68 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ch..            
a0b0: 7d 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  };..            
a0c0: 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
a0d0: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
a0e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a0f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a100: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a110: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
a120: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65  .            #re
a130: 67 69 6f 6e 20 50 72 69 76 61 74 65 20 43 6f 6e  gion Private Con
a140: 73 74 72 75 63 74 6f 72 73 0d 0a 20 20 20 20 20  structors..     
a150: 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 43         private C
a160: 6f 6e 66 69 67 75 72 61 74 69 6f 6e 28 0d 0a 20  onfiguration(.. 
a170: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 41                 A
a180: 73 73 65 6d 62 6c 79 20 61 73 73 65 6d 62 6c 79  ssembly assembly
a190: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
a1a0: 20 20 20 73 74 72 69 6e 67 20 6c 6f 67 46 69 6c     string logFil
a1b0: 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20  eName,..        
a1c0: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 64          string d
a1d0: 69 72 65 63 74 6f 72 79 2c 0d 0a 20 20 20 20 20  irectory,..     
a1e0: 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
a1f0: 67 20 63 6f 72 65 46 69 6c 65 4e 61 6d 65 2c 0d  g coreFileName,.
a200: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
a210: 20 73 74 72 69 6e 67 20 6c 69 6e 71 46 69 6c 65   string linqFile
a220: 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  Name,..         
a230: 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 64 65         string de
a240: 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 2c 0d  signerFileName,.
a250: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
a260: 20 73 74 72 69 6e 67 20 74 72 61 63 65 46 6f 72   string traceFor
a270: 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  mat,..          
a280: 20 20 20 20 20 20 49 6e 73 74 61 6c 6c 46 6c 61        InstallFla
a290: 67 73 20 69 6e 73 74 61 6c 6c 46 6c 61 67 73 2c  gs installFlags,
a2a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
a2b0: 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 20    TracePriority 
a2c0: 74 72 61 63 65 50 72 69 6f 72 69 74 79 2c 0d 0a  tracePriority,..
a2d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a2e0: 62 6f 6f 6c 20 69 6e 73 74 61 6c 6c 2c 0d 0a 20  bool install,.. 
a2f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
a300: 6f 6f 6c 20 6e 6f 44 65 73 6b 74 6f 70 2c 0d 0a  ool noDesktop,..
a310: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a320: 62 6f 6f 6c 20 6e 6f 43 6f 6d 70 61 63 74 2c 0d  bool noCompact,.
a330: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
a340: 20 62 6f 6f 6c 20 6e 6f 4e 65 74 46 78 32 30 2c   bool noNetFx20,
a350: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
a360: 20 20 62 6f 6f 6c 20 6e 6f 4e 65 74 46 78 34 30    bool noNetFx40
a370: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
a380: 20 20 20 62 6f 6f 6c 20 6e 6f 56 73 32 30 30 38     bool noVs2008
a390: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
a3a0: 20 20 20 62 6f 6f 6c 20 6e 6f 56 73 32 30 31 30     bool noVs2010
a3b0: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
a3c0: 20 20 20 62 6f 6f 6c 20 6e 6f 54 72 61 63 65 2c     bool noTrace,
a3d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
a3e0: 20 20 62 6f 6f 6c 20 6e 6f 43 6f 6e 73 6f 6c 65    bool noConsole
a3f0: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
a400: 20 20 20 62 6f 6f 6c 20 6e 6f 4c 6f 67 2c 0d 0a     bool noLog,..
a410: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a420: 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20  bool whatIf,..  
a430: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
a440: 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20  ol verbose,..   
a450: 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
a460: 6c 20 63 6f 6e 66 69 72 6d 0d 0a 20 20 20 20 20  l confirm..     
a470: 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
a480: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
a490: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69               thi
a4a0: 73 2e 61 73 73 65 6d 62 6c 79 20 3d 20 61 73 73  s.assembly = ass
a4b0: 65 6d 62 6c 79 3b 0d 0a 20 20 20 20 20 20 20 20  embly;..        
a4c0: 20 20 20 20 20 20 20 20 74 68 69 73 2e 6c 6f 67          this.log
a4d0: 46 69 6c 65 4e 61 6d 65 20 3d 20 6c 6f 67 46 69  FileName = logFi
a4e0: 6c 65 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20  leName;..       
a4f0: 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 64 69           this.di
a500: 72 65 63 74 6f 72 79 20 3d 20 64 69 72 65 63 74  rectory = direct
a510: 6f 72 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ory;..          
a520: 20 20 20 20 20 20 74 68 69 73 2e 63 6f 72 65 46        this.coreF
a530: 69 6c 65 4e 61 6d 65 20 3d 20 63 6f 72 65 46 69  ileName = coreFi
a540: 6c 65 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20  leName;..       
a550: 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 6c 69           this.li
a560: 6e 71 46 69 6c 65 4e 61 6d 65 20 3d 20 6c 69 6e  nqFileName = lin
a570: 71 46 69 6c 65 4e 61 6d 65 3b 0d 0a 20 20 20 20  qFileName;..    
a580: 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73              this
a590: 2e 64 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d  .designerFileNam
a5a0: 65 20 3d 20 64 65 73 69 67 6e 65 72 46 69 6c 65  e = designerFile
a5b0: 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  Name;..         
a5c0: 20 20 20 20 20 20 20 74 68 69 73 2e 74 72 61 63         this.trac
a5d0: 65 46 6f 72 6d 61 74 20 3d 20 74 72 61 63 65 46  eFormat = traceF
a5e0: 6f 72 6d 61 74 3b 0d 0a 20 20 20 20 20 20 20 20  ormat;..        
a5f0: 20 20 20 20 20 20 20 20 74 68 69 73 2e 69 6e 73          this.ins
a600: 74 61 6c 6c 46 6c 61 67 73 20 3d 20 69 6e 73 74  tallFlags = inst
a610: 61 6c 6c 46 6c 61 67 73 3b 0d 0a 20 20 20 20 20  allFlags;..     
a620: 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e             this.
a630: 74 72 61 63 65 50 72 69 6f 72 69 74 79 20 3d 20  tracePriority = 
a640: 74 72 61 63 65 50 72 69 6f 72 69 74 79 3b 0d 0a  tracePriority;..
a650: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a660: 74 68 69 73 2e 69 6e 73 74 61 6c 6c 20 3d 20 69  this.install = i
a670: 6e 73 74 61 6c 6c 3b 0d 0a 20 20 20 20 20 20 20  nstall;..       
a680: 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 6e 6f           this.no
a690: 44 65 73 6b 74 6f 70 20 3d 20 6e 6f 44 65 73 6b  Desktop = noDesk
a6a0: 74 6f 70 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  top;..          
a6b0: 20 20 20 20 20 20 74 68 69 73 2e 6e 6f 43 6f 6d        this.noCom
a6c0: 70 61 63 74 20 3d 20 6e 6f 43 6f 6d 70 61 63 74  pact = noCompact
a6d0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
a6e0: 20 20 20 74 68 69 73 2e 6e 6f 4e 65 74 46 78 32     this.noNetFx2
a6f0: 30 20 3d 20 6e 6f 4e 65 74 46 78 32 30 3b 0d 0a  0 = noNetFx20;..
a700: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a710: 74 68 69 73 2e 6e 6f 4e 65 74 46 78 34 30 20 3d  this.noNetFx40 =
a720: 20 6e 6f 4e 65 74 46 78 34 30 3b 0d 0a 20 20 20   noNetFx40;..   
a730: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69               thi
a740: 73 2e 6e 6f 56 73 32 30 30 38 20 3d 20 6e 6f 56  s.noVs2008 = noV
a750: 73 32 30 30 38 3b 0d 0a 20 20 20 20 20 20 20 20  s2008;..        
a760: 20 20 20 20 20 20 20 20 74 68 69 73 2e 6e 6f 56          this.noV
a770: 73 32 30 31 30 20 3d 20 6e 6f 56 73 32 30 31 30  s2010 = noVs2010
a780: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
a790: 20 20 20 74 68 69 73 2e 6e 6f 54 72 61 63 65 20     this.noTrace 
a7a0: 3d 20 6e 6f 54 72 61 63 65 3b 0d 0a 20 20 20 20  = noTrace;..    
a7b0: 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73              this
a7c0: 2e 6e 6f 43 6f 6e 73 6f 6c 65 20 3d 20 6e 6f 43  .noConsole = noC
a7d0: 6f 6e 73 6f 6c 65 3b 0d 0a 20 20 20 20 20 20 20  onsole;..       
a7e0: 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 6e 6f           this.no
a7f0: 4c 6f 67 20 3d 20 6e 6f 4c 6f 67 3b 0d 0a 20 20  Log = noLog;..  
a800: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
a810: 69 73 2e 77 68 61 74 49 66 20 3d 20 77 68 61 74  is.whatIf = what
a820: 49 66 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  If;..           
a830: 20 20 20 20 20 74 68 69 73 2e 76 65 72 62 6f 73       this.verbos
a840: 65 20 3d 20 76 65 72 62 6f 73 65 3b 0d 0a 20 20  e = verbose;..  
a850: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
a860: 69 73 2e 63 6f 6e 66 69 72 6d 20 3d 20 63 6f 6e  is.confirm = con
a870: 66 69 72 6d 3b 0d 0a 20 20 20 20 20 20 20 20 20  firm;..         
a880: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
a890: 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
a8a0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
a8b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a8c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a8d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a8e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
a8f0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  ...            #
a900: 72 65 67 69 6f 6e 20 50 72 69 76 61 74 65 20 53  region Private S
a910: 74 61 74 69 63 20 4d 65 74 68 6f 64 73 0d 0a 20  tatic Methods.. 
a920: 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
a930: 74 65 20 73 74 61 74 69 63 20 76 6f 69 64 20 47  te static void G
a940: 65 74 44 65 66 61 75 6c 74 46 69 6c 65 4e 61 6d  etDefaultFileNam
a950: 65 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  es(..           
a960: 20 20 20 20 20 72 65 66 20 73 74 72 69 6e 67 20       ref string 
a970: 64 69 72 65 63 74 6f 72 79 2c 0d 0a 20 20 20 20  directory,..    
a980: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20              ref 
a990: 73 74 72 69 6e 67 20 63 6f 72 65 46 69 6c 65 4e  string coreFileN
a9a0: 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ame,..          
a9b0: 20 20 20 20 20 20 72 65 66 20 73 74 72 69 6e 67        ref string
a9c0: 20 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 2c 0d 0a   linqFileName,..
a9d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a9e0: 72 65 66 20 73 74 72 69 6e 67 20 64 65 73 69 67  ref string desig
a9f0: 6e 65 72 46 69 6c 65 4e 61 6d 65 0d 0a 20 20 20  nerFileName..   
aa00: 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a               )..
aa10: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
aa20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
aa30: 66 20 28 74 68 69 73 41 73 73 65 6d 62 6c 79 20  f (thisAssembly 
aa40: 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
aa50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
aa60: 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  turn;....       
aa70: 20 20 20 20 20 20 20 20 20 64 69 72 65 63 74 6f           directo
aa80: 72 79 20 3d 20 50 61 74 68 2e 47 65 74 44 69 72  ry = Path.GetDir
aa90: 65 63 74 6f 72 79 4e 61 6d 65 28 74 68 69 73 41  ectoryName(thisA
aaa0: 73 73 65 6d 62 6c 79 2e 4c 6f 63 61 74 69 6f 6e  ssembly.Location
aab0: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
aac0: 20 20 20 20 20 20 69 66 20 28 53 74 72 69 6e 67        if (String
aad0: 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 64  .IsNullOrEmpty(d
aae0: 69 72 65 63 74 6f 72 79 29 29 0d 0a 20 20 20 20  irectory))..    
aaf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ab00: 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20  return;....     
ab10: 20 20 20 20 20 20 20 20 20 20 20 63 6f 72 65 46             coreF
ab20: 69 6c 65 4e 61 6d 65 20 3d 20 50 61 74 68 2e 43  ileName = Path.C
ab30: 6f 6d 62 69 6e 65 28 64 69 72 65 63 74 6f 72 79  ombine(directory
ab40: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
ab50: 20 20 20 20 20 20 20 49 6e 73 74 61 6c 6c 65 72         Installer
ab60: 2e 43 6f 72 65 46 69 6c 65 4e 61 6d 65 29 3b 0d  .CoreFileName);.
ab70: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
ab80: 20 20 20 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 20     linqFileName 
ab90: 3d 20 50 61 74 68 2e 43 6f 6d 62 69 6e 65 28 64  = Path.Combine(d
aba0: 69 72 65 63 74 6f 72 79 2c 0d 0a 20 20 20 20 20  irectory,..     
abb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 49                 I
abc0: 6e 73 74 61 6c 6c 65 72 2e 4c 69 6e 71 46 69 6c  nstaller.LinqFil
abd0: 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  eName);....     
abe0: 20 20 20 20 20 20 20 20 20 20 20 64 65 73 69 67             desig
abf0: 6e 65 72 46 69 6c 65 4e 61 6d 65 20 3d 20 50 61  nerFileName = Pa
ac00: 74 68 2e 43 6f 6d 62 69 6e 65 28 64 69 72 65 63  th.Combine(direc
ac10: 74 6f 72 79 2c 0d 0a 20 20 20 20 20 20 20 20 20  tory,..         
ac20: 20 20 20 20 20 20 20 20 20 20 20 49 6e 73 74 61             Insta
ac30: 6c 6c 65 72 2e 44 65 73 69 67 6e 65 72 46 69 6c  ller.DesignerFil
ac40: 65 4e 61 6d 65 29 3b 0d 0a 20 20 20 20 20 20 20  eName);..       
ac50: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
ac60: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
ac70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ac80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ac90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
aca0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
acb0: 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
acc0: 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 43 68 65   static bool Che
acd0: 63 6b 4f 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20  ckOption(..     
ace0: 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20 73             ref s
acf0: 74 72 69 6e 67 20 61 72 67 0d 0a 20 20 20 20 20  tring arg..     
ad00: 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
ad10: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
ad20: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72               str
ad30: 69 6e 67 20 72 65 73 75 6c 74 20 3d 20 61 72 67  ing result = arg
ad40: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
ad50: 20 20 20 20 20 69 66 20 28 21 53 74 72 69 6e 67       if (!String
ad60: 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 72  .IsNullOrEmpty(r
ad70: 65 73 75 6c 74 29 29 0d 0a 20 20 20 20 20 20 20  esult))..       
ad80: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
ad90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ada0: 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
adb0: 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a          // NOTE:
adc0: 20 52 65 6d 6f 76 65 20 61 6c 6c 20 6c 65 61 64   Remove all lead
add0: 69 6e 67 20 73 77 69 74 63 68 20 63 68 61 72 73  ing switch chars
ade0: 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
adf0: 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
ae00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
ae10: 65 73 75 6c 74 20 3d 20 72 65 73 75 6c 74 2e 54  esult = result.T
ae20: 72 69 6d 53 74 61 72 74 28 53 77 69 74 63 68 43  rimStart(SwitchC
ae30: 68 61 72 73 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  hars);....      
ae40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
ae50: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
ae60: 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 48        // NOTE: H
ae70: 6f 77 20 6d 61 6e 79 20 63 68 61 72 73 20 77 65  ow many chars we
ae80: 72 65 20 72 65 6d 6f 76 65 64 3f 0d 0a 20 20 20  re removed?..   
ae90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
aea0: 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
aeb0: 20 20 20 20 20 20 20 20 20 69 6e 74 20 63 6f 75           int cou
aec0: 6e 74 20 3d 20 61 72 67 2e 4c 65 6e 67 74 68 20  nt = arg.Length 
aed0: 2d 20 72 65 73 75 6c 74 2e 4c 65 6e 67 74 68 3b  - result.Length;
aee0: 0d 0a 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 57 61 73 20 74 68 65  // NOTE: Was the
af20: 72 65 20 61 74 20 6c 65 61 73 74 20 6f 6e 65 3f  re at least one?
af30: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
af40: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
af50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
af60: 20 28 63 6f 75 6e 74 20 3e 20 30 29 0d 0a 20 20   (count > 0)..  
af70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
af80: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
af90: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
afa0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
afb0: 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45           // NOTE
afc0: 3a 20 4f 6b 2c 20 72 65 70 6c 61 63 65 20 74 68  : Ok, replace th
afd0: 65 69 72 20 6f 72 69 67 69 6e 61 6c 0d 0a 20 20  eir original..  
afe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
aff0: 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 61        //       a
b000: 72 67 75 6d 65 6e 74 2e 0d 0a 20 20 20 20 20 20  rgument...      
b010: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b020: 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
b030: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61 72                ar
b040: 67 20 3d 20 72 65 73 75 6c 74 3b 0d 0a 0d 0a 20  g = result;.... 
b050: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b060: 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
b070: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b080: 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 59 65 73 2c     // NOTE: Yes,
b090: 20 74 68 69 73 20 69 73 20 61 20 73 77 69 74 63   this is a switc
b0a0: 68 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  h...            
b0b0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
b0c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b0d0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74          return t
b0e0: 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  rue;..          
b0f0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
b100: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
b110: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
b120: 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
b130: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
b140: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
b150: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b160: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b170: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b180: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b190: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
b1a0: 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
b1b0: 62 6f 6f 6c 20 4d 61 74 63 68 4f 70 74 69 6f 6e  bool MatchOption
b1c0: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
b1d0: 20 20 20 73 74 72 69 6e 67 20 61 72 67 2c 0d 0a     string arg,..
b1e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b1f0: 73 74 72 69 6e 67 20 6f 70 74 69 6f 6e 0d 0a 20  string option.. 
b200: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29                 )
b210: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
b220: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
b230: 20 69 66 20 28 28 61 72 67 20 3d 3d 20 6e 75 6c   if ((arg == nul
b240: 6c 29 20 7c 7c 20 28 6f 70 74 69 6f 6e 20 3d 3d  l) || (option ==
b250: 20 6e 75 6c 6c 29 29 0d 0a 20 20 20 20 20 20 20   null))..       
b260: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
b270: 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20  urn false;....  
b280: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
b290: 74 75 72 6e 20 53 74 72 69 6e 67 2e 43 6f 6d 70  turn String.Comp
b2a0: 61 72 65 28 61 72 67 2c 20 30 2c 20 6f 70 74 69  are(arg, 0, opti
b2b0: 6f 6e 2c 20 30 2c 0d 0a 20 20 20 20 20 20 20 20  on, 0,..        
b2c0: 20 20 20 20 20 20 20 20 20 20 20 20 61 72 67 2e              arg.
b2d0: 4c 65 6e 67 74 68 2c 20 53 74 72 69 6e 67 43 6f  Length, StringCo
b2e0: 6d 70 61 72 69 73 6f 6e 2e 4f 72 64 69 6e 61 6c  mparison.Ordinal
b2f0: 49 67 6e 6f 72 65 43 61 73 65 29 20 3d 3d 20 30  IgnoreCase) == 0
b300: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
b310: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
b320: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b330: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b340: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b350: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b360: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
b370: 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
b380: 63 20 62 6f 6f 6c 3f 20 50 61 72 73 65 42 6f 6f  c bool? ParseBoo
b390: 6c 65 61 6e 28 0d 0a 20 20 20 20 20 20 20 20 20  lean(..         
b3a0: 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 74 65         string te
b3b0: 78 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  xt..            
b3c0: 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20      )..         
b3d0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
b3e0: 20 20 20 20 20 20 69 66 20 28 21 53 74 72 69 6e        if (!Strin
b3f0: 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28  g.IsNullOrEmpty(
b400: 74 65 78 74 29 29 0d 0a 20 20 20 20 20 20 20 20  text))..        
b410: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
b420: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
b430: 6f 6f 6c 20 76 61 6c 75 65 3b 0d 0a 0d 0a 20 20  ool value;....  
b440: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b450: 20 20 69 66 20 28 62 6f 6f 6c 2e 54 72 79 50 61    if (bool.TryPa
b460: 72 73 65 28 74 65 78 74 2c 20 6f 75 74 20 76 61  rse(text, out va
b470: 6c 75 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20  lue))..         
b480: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
b490: 65 74 75 72 6e 20 76 61 6c 75 65 3b 0d 0a 20 20  eturn value;..  
b4a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
b4b0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
b4c0: 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d     return null;.
b4d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
b4e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
b4f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b500: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b510: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b520: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b530: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
b540: 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
b550: 6f 62 6a 65 63 74 20 50 61 72 73 65 45 6e 75 6d  object ParseEnum
b560: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
b570: 20 20 20 54 79 70 65 20 65 6e 75 6d 54 79 70 65     Type enumType
b580: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
b590: 20 20 20 73 74 72 69 6e 67 20 74 65 78 74 2c 0d     string text,.
b5a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
b5b0: 20 62 6f 6f 6c 20 6e 6f 43 61 73 65 0d 0a 20 20   bool noCase..  
b5c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d                ).
b5d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
b5e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b5f0: 69 66 20 28 28 65 6e 75 6d 54 79 70 65 20 3d 3d  if ((enumType ==
b600: 20 6e 75 6c 6c 29 20 7c 7c 20 21 65 6e 75 6d 54   null) || !enumT
b610: 79 70 65 2e 49 73 45 6e 75 6d 29 0d 0a 20 20 20  ype.IsEnum)..   
b620: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b630: 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d   return null;...
b640: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
b650: 20 69 66 20 28 21 53 74 72 69 6e 67 2e 49 73 4e   if (!String.IsN
b660: 75 6c 6c 4f 72 45 6d 70 74 79 28 74 65 78 74 29  ullOrEmpty(text)
b670: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
b680: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
b690: 20 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20            try.. 
b6a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b6b0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
b6c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
b6d0: 74 75 72 6e 20 45 6e 75 6d 2e 50 61 72 73 65 28  turn Enum.Parse(
b6e0: 65 6e 75 6d 54 79 70 65 2c 20 74 65 78 74 2c 20  enumType, text, 
b6f0: 6e 6f 43 61 73 65 29 3b 0d 0a 20 20 20 20 20 20  noCase);..      
b700: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
b710: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
b720: 20 20 20 20 20 63 61 74 63 68 0d 0a 20 20 20 20       catch..    
b730: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b740: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
b750: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f             // do
b760: 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20   nothing...     
b770: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
b780: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
b790: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
b7a0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75         return nu
b7b0: 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll;..           
b7c0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
b7d0: 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
b7e0: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
b7f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b800: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b810: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b820: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
b830: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65  .            #re
b840: 67 69 6f 6e 20 50 75 62 6c 69 63 20 53 74 61 74  gion Public Stat
b850: 69 63 20 4d 65 74 68 6f 64 73 0d 0a 20 20 20 20  ic Methods..    
b860: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73          public s
b870: 74 61 74 69 63 20 43 6f 6e 66 69 67 75 72 61 74  tatic Configurat
b880: 69 6f 6e 20 43 72 65 61 74 65 44 65 66 61 75 6c  ion CreateDefaul
b890: 74 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  t()..           
b8a0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
b8b0: 20 20 20 20 73 74 72 69 6e 67 20 64 69 72 65 63      string direc
b8c0: 74 6f 72 79 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20  tory = null;..  
b8d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
b8e0: 72 69 6e 67 20 63 6f 72 65 46 69 6c 65 4e 61 6d  ring coreFileNam
b8f0: 65 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20  e = null;..     
b900: 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
b910: 67 20 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 20 3d  g linqFileName =
b920: 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20   null;..        
b930: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 64          string d
b940: 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 20  esignerFileName 
b950: 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20  = null;....     
b960: 20 20 20 20 20 20 20 20 20 20 20 47 65 74 44 65             GetDe
b970: 66 61 75 6c 74 46 69 6c 65 4e 61 6d 65 73 28 0d  faultFileNames(.
b980: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
b990: 20 20 20 20 20 72 65 66 20 64 69 72 65 63 74 6f       ref directo
b9a0: 72 79 2c 20 72 65 66 20 63 6f 72 65 46 69 6c 65  ry, ref coreFile
b9b0: 4e 61 6d 65 2c 20 72 65 66 20 6c 69 6e 71 46 69  Name, ref linqFi
b9c0: 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20  leName,..       
b9d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66               ref
b9e0: 20 64 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d   designerFileNam
b9f0: 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
ba00: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 65         return ne
ba10: 77 20 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 28  w Configuration(
ba20: 74 68 69 73 41 73 73 65 6d 62 6c 79 2c 20 6e 75  thisAssembly, nu
ba30: 6c 6c 2c 20 64 69 72 65 63 74 6f 72 79 2c 0d 0a  ll, directory,..
ba40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ba50: 20 20 20 20 63 6f 72 65 46 69 6c 65 4e 61 6d 65      coreFileName
ba60: 2c 20 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 2c 20  , linqFileName, 
ba70: 64 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65  designerFileName
ba80: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
ba90: 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e         TraceOps.
baa0: 54 72 61 63 65 46 6f 72 6d 61 74 2c 20 49 6e 73  TraceFormat, Ins
bab0: 74 61 6c 6c 46 6c 61 67 73 2e 44 65 66 61 75 6c  tallFlags.Defaul
bac0: 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t,..            
bad0: 20 20 20 20 20 20 20 20 54 72 61 63 65 50 72 69          TracePri
bae0: 6f 72 69 74 79 2e 44 65 66 61 75 6c 74 2c 20 74  ority.Default, t
baf0: 72 75 65 2c 20 66 61 6c 73 65 2c 20 74 72 75 65  rue, false, true
bb00: 2c 20 66 61 6c 73 65 2c 20 66 61 6c 73 65 2c 0d  , false, false,.
bb10: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
bb20: 20 20 20 20 20 66 61 6c 73 65 2c 20 66 61 6c 73       false, fals
bb30: 65 2c 20 66 61 6c 73 65 2c 20 66 61 6c 73 65 2c  e, false, false,
bb40: 20 66 61 6c 73 65 2c 20 74 72 75 65 2c 20 74 72   false, true, tr
bb50: 75 65 2c 20 66 61 6c 73 65 29 3b 0d 0a 20 20 20  ue, false);..   
bb60: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
bb70: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
bb80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bb90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bba0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bbb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
bbc0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
bbd0: 6c 69 63 20 73 74 61 74 69 63 20 62 6f 6f 6c 20  lic static bool 
bbe0: 46 72 6f 6d 41 72 67 73 28 0d 0a 20 20 20 20 20  FromArgs(..     
bbf0: 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
bc00: 67 5b 5d 20 61 72 67 73 2c 0d 0a 20 20 20 20 20  g[] args,..     
bc10: 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
bc20: 73 74 72 69 63 74 2c 0d 0a 20 20 20 20 20 20 20  strict,..       
bc30: 20 20 20 20 20 20 20 20 20 72 65 66 20 43 6f 6e           ref Con
bc40: 66 69 67 75 72 61 74 69 6f 6e 20 63 6f 6e 66 69  figuration confi
bc50: 67 75 72 61 74 69 6f 6e 2c 0d 0a 20 20 20 20 20  guration,..     
bc60: 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20 73             ref s
bc70: 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20  tring error..   
bc80: 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a               )..
bc90: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
bca0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
bcb0: 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ry..            
bcc0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
bcd0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 61             if (a
bce0: 72 67 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  rgs == null)..  
bcf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bd00: 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75        return tru
bd10: 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
bd20: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 63 6f            if (co
bd30: 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20 6e  nfiguration == n
bd40: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
bd50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
bd60: 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d 20 43 6f  nfiguration = Co
bd70: 6e 66 69 67 75 72 61 74 69 6f 6e 2e 43 72 65 61  nfiguration.Crea
bd80: 74 65 44 65 66 61 75 6c 74 28 29 3b 0d 0a 0d 0a  teDefault();....
bd90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bda0: 20 20 20 20 69 6e 74 20 6c 65 6e 67 74 68 20 3d      int length =
bdb0: 20 61 72 67 73 2e 4c 65 6e 67 74 68 3b 0d 0a 0d   args.Length;...
bdc0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
bdd0: 20 20 20 20 20 66 6f 72 20 28 69 6e 74 20 69 6e       for (int in
bde0: 64 65 78 20 3d 20 30 3b 20 69 6e 64 65 78 20 3c  dex = 0; index <
bdf0: 20 6c 65 6e 67 74 68 3b 20 69 6e 64 65 78 2b 2b   length; index++
be00: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
be10: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
be20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
be30: 20 20 73 74 72 69 6e 67 20 61 72 67 20 3d 20 61    string arg = a
be40: 72 67 73 5b 69 6e 64 65 78 5d 3b 0d 0a 0d 0a 20  rgs[index];.... 
be50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
be60: 20 20 20 20 20 20 20 69 66 20 28 53 74 72 69 6e         if (Strin
be70: 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28  g.IsNullOrEmpty(
be80: 61 72 67 29 29 0d 0a 20 20 20 20 20 20 20 20 20  arg))..         
be90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bea0: 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 0d 0a     continue;....
beb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bec0: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6e          string n
bed0: 65 77 41 72 67 20 3d 20 61 72 67 3b 0d 0a 0d 0a  ewArg = arg;....
bee0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bef0: 20 20 20 20 20 20 20 20 69 66 20 28 43 68 65 63          if (Chec
bf00: 6b 4f 70 74 69 6f 6e 28 72 65 66 20 6e 65 77 41  kOption(ref newA
bf10: 72 67 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  rg))..          
bf20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
bf30: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
bf40: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
bf50: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
bf60: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
bf70: 4e 4f 54 45 3a 20 41 6c 6c 20 74 68 65 20 73 75  NOTE: All the su
bf80: 70 70 6f 72 74 65 64 20 63 6f 6d 6d 61 6e 64 20  pported command 
bf90: 6c 69 6e 65 20 6f 70 74 69 6f 6e 73 20 6d 75 73  line options mus
bfa0: 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  t..             
bfb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
bfc0: 2f 20 20 20 20 20 20 20 68 61 76 65 20 61 20 76  /       have a v
bfd0: 61 6c 75 65 3b 20 74 68 65 72 65 66 6f 72 65 2c  alue; therefore,
bfe0: 20 61 74 74 65 6d 70 74 20 74 6f 20 61 64 76 61   attempt to adva
bff0: 6e 63 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  nce..           
c000: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c010: 20 2f 2f 20 20 20 20 20 20 20 74 6f 20 69 74 20   //       to it 
c020: 6e 6f 77 2e 20 20 49 66 20 77 65 20 66 61 69 6c  now.  If we fail
c030: 2c 20 77 65 20 61 72 65 20 64 6f 6e 65 2e 0d 0a  , we are done...
c040: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c050: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
c060: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c070: 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 64 65              inde
c080: 78 2b 2b 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  x++;....        
c090: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c0a0: 20 20 20 20 69 66 20 28 69 6e 64 65 78 20 3e 3d      if (index >=
c0b0: 20 6c 65 6e 67 74 68 29 0d 0a 20 20 20 20 20 20   length)..      
c0c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c0d0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
c0e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c0f0: 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
c100: 20 54 72 61 63 65 4f 70 73 2e 54 72 61 63 65 28   TraceOps.Trace(
c110: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
c120: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c130: 20 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72        TracePrior
c140: 69 74 79 2e 4c 6f 77 65 73 74 2c 0d 0a 20 20 20  ity.Lowest,..   
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 20 20 20 20 20 20 20                  
c170: 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20   traceCallback, 
c180: 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
c190: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c1a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c1b0: 20 20 20 20 22 4d 69 73 73 69 6e 67 20 76 61 6c      "Missing val
c1c0: 75 65 20 66 6f 72 20 6f 70 74 69 6f 6e 3a 20 7b  ue for option: {
c1d0: 30 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  0}",..          
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 46 6f 72 44 69 73            ForDis
c200: 70 6c 61 79 28 61 72 67 29 29 2c 20 74 72 61 63  play(arg)), trac
c210: 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
c220: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c230: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
c240: 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20  f (strict)..    
c250: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c260: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c270: 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d  return false;...
c280: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
c290: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c2a0: 20 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20 20 20   break;..       
c2b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c2c0: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
c2d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c2e0: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
c2f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c300: 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 47        // NOTE: G
c310: 72 61 62 20 74 68 65 20 74 65 78 74 75 61 6c 20  rab the textual 
c320: 76 61 6c 75 65 20 6f 66 20 74 68 69 73 20 63 6f  value of this co
c330: 6d 6d 61 6e 64 20 6c 69 6e 65 0d 0a 20 20 20 20  mmand line..    
c340: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c350: 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
c360: 20 6f 70 74 69 6f 6e 2e 0d 0a 20 20 20 20 20 20   option...      
c370: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c380: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
c390: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c3a0: 20 20 20 20 20 20 73 74 72 69 6e 67 20 74 65 78        string tex
c3b0: 74 20 3d 20 61 72 67 73 5b 69 6e 64 65 78 5d 3b  t = args[index];
c3c0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
c3d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c3e0: 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
c3f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c400: 2f 2f 20 4e 4f 54 45 3a 20 46 69 67 75 72 65 20  // NOTE: Figure 
c410: 6f 75 74 20 77 68 69 63 68 20 63 6f 6d 6d 61 6e  out which comman
c420: 64 20 6c 69 6e 65 20 6f 70 74 69 6f 6e 20 74 68  d line option th
c430: 69 73 20 69 73 0d 0a 20 20 20 20 20 20 20 20 20  is is..         
c440: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c450: 20 20 20 2f 2f 20 20 20 20 20 20 20 28 62 61 73     //       (bas
c460: 65 64 20 6f 6e 20 61 20 70 61 72 74 69 61 6c 20  ed on a partial 
c470: 6e 61 6d 65 20 6d 61 74 63 68 29 20 61 6e 64 20  name match) and 
c480: 74 68 65 6e 20 74 72 79 0d 0a 20 20 20 20 20 20  then try..      
c490: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c4a0: 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 74        //       t
c4b0: 6f 20 69 6e 74 65 72 70 72 65 74 20 74 68 65 20  o interpret the 
c4c0: 74 65 78 74 75 61 6c 20 76 61 6c 75 65 20 61 73  textual value as
c4d0: 20 74 68 65 20 63 6f 72 72 65 63 74 0d 0a 20 20   the correct..  
c4e0: 20 20 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 2f 2f 20 20 20 20            //    
c500: 20 20 20 74 79 70 65 2e 0d 0a 20 20 20 20 20 20     type...      
c510: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c520: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
c530: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c540: 20 20 20 20 20 20 69 66 20 28 4d 61 74 63 68 4f        if (MatchO
c550: 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 73  ption(newArg, "s
c560: 74 72 69 63 74 22 29 29 0d 0a 20 20 20 20 20 20  trict"))..      
c570: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c580: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
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 62 6f 6f 6c 3f 20 76           bool? v
c5b0: 61 6c 75 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c  alue = ParseBool
c5c0: 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20  ean(text);....  
c5d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c5e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
c5f0: 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29   (value == null)
c600: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
c610: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c620: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
c630: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c640: 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
c650: 20 54 72 61 63 65 4f 70 73 2e 54 72 61 63 65 28   TraceOps.Trace(
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 20 20                  
c680: 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 50            TraceP
c690: 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 0d  riority.Lowest,.
c6a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
c6b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c6c0: 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
c6d0: 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46  llback, String.F
c6e0: 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
c6f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c700: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c710: 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f  "Invalid {0} boo
c720: 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22  lean value: {1}"
c730: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
c740: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c750: 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69             ForDi
c760: 73 70 6c 61 79 28 61 72 67 29 2c 20 46 6f 72 44  splay(arg), ForD
c770: 69 73 70 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a  isplay(text)),..
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 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74          traceCat
c7b0: 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
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 69                 i
c7e0: 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20  f (strict)..    
c7f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c800: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c810: 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
c820: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
c830: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c840: 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75           continu
c850: 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
c860: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c870: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
c880: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c890: 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
c8a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c8b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
c8c0: 4e 4f 54 45 3a 20 41 6c 6c 6f 77 20 74 68 65 20  NOTE: Allow the 
c8d0: 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 20 61 72 67  command line arg
c8e0: 75 6d 65 6e 74 73 20 74 6f 20 6f 76 65 72 72 69  uments to overri
c8f0: 64 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  de..            
c900: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c910: 20 20 20 20 2f 2f 20 20 20 20 20 20 20 74 68 65      //       the
c920: 20 22 73 74 72 69 63 74 6e 65 73 73 22 20 73 65   "strictness" se
c930: 74 74 69 6e 67 20 70 72 6f 76 69 64 65 64 20 62  tting provided b
c940: 79 20 6f 75 72 20 63 61 6c 6c 65 72 2e 0d 0a 20  y our caller... 
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 20 20 20 2f                 /
c970: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
c980: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c990: 20 20 20 73 74 72 69 63 74 20 3d 20 28 62 6f 6f     strict = (boo
c9a0: 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20  l)value;..      
c9b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c9c0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
c9d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c9e0: 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61       else if (Ma
c9f0: 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67  tchOption(newArg
ca00: 2c 20 22 6c 6f 67 46 69 6c 65 4e 61 6d 65 22 29  , "logFileName")
ca10: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
ca20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
ca30: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
ca40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ca50: 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e    configuration.
ca60: 6c 6f 67 46 69 6c 65 4e 61 6d 65 20 3d 20 74 65  logFileName = te
ca70: 78 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  xt;..           
ca80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ca90: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
caa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cab0: 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70  else if (MatchOp
cac0: 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 64 69  tion(newArg, "di
cad0: 72 65 63 74 6f 72 79 22 29 29 0d 0a 20 20 20 20  rectory"))..    
cae0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
caf0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
cb00: 20 20 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 63 6f 6e 66 69             confi
cb20: 67 75 72 61 74 69 6f 6e 2e 64 69 72 65 63 74 6f  guration.directo
cb30: 72 79 20 3d 20 74 65 78 74 3b 0d 0a 0d 0a 20 20  ry = text;....  
cb40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cb50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
cb60: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
cb70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cb80: 20 20 2f 2f 20 4e 4f 54 45 3a 20 2a 53 50 45 43    // NOTE: *SPEC
cb90: 49 41 4c 2a 20 4d 75 73 74 20 72 65 66 72 65 73  IAL* Must refres
cba0: 68 20 74 68 65 20 66 69 6c 65 20 6e 61 6d 65 73  h the file names
cbb0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
cbc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cbd0: 20 20 2f 2f 20 20 20 20 20 20 20 68 65 72 65 20    //       here 
cbe0: 62 65 63 61 75 73 65 20 74 68 65 20 75 6e 64 65  because the unde
cbf0: 72 6c 79 69 6e 67 20 64 69 72 65 63 74 6f 72 79  rlying directory
cc00: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
cc10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cc20: 20 20 2f 2f 20 20 20 20 20 20 20 68 61 73 20 63    //       has c
cc30: 68 61 6e 67 65 64 2e 0d 0a 20 20 20 20 20 20 20  hanged...       
cc40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cc50: 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
cc60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cc70: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72               str
cc80: 69 6e 67 20 63 6f 72 65 46 69 6c 65 4e 61 6d 65  ing coreFileName
cc90: 20 3d 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e   = configuration
cca0: 2e 63 6f 72 65 46 69 6c 65 4e 61 6d 65 3b 0d 0a  .coreFileName;..
ccb0: 0d 0a 20 20 20 20 20 20 20 20 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 69 66 20 28 21 53 74 72 69 6e 67 2e 49 73    if (!String.Is
cce0: 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 63 6f 72 65  NullOrEmpty(core
ccf0: 46 69 6c 65 4e 61 6d 65 29 29 0d 0a 20 20 20 20  FileName))..    
cd00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cd10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cd20: 63 6f 72 65 46 69 6c 65 4e 61 6d 65 20 3d 20 50  coreFileName = P
cd30: 61 74 68 2e 47 65 74 46 69 6c 65 4e 61 6d 65 28  ath.GetFileName(
cd40: 63 6f 72 65 46 69 6c 65 4e 61 6d 65 29 3b 0d 0a  coreFileName);..
cd50: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
cd60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cd70: 20 20 69 66 20 28 53 74 72 69 6e 67 2e 49 73 4e    if (String.IsN
cd80: 75 6c 6c 4f 72 45 6d 70 74 79 28 63 6f 72 65 46  ullOrEmpty(coreF
cd90: 69 6c 65 4e 61 6d 65 29 29 0d 0a 20 20 20 20 20  ileName))..     
cda0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cdb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
cdc0: 6f 72 65 46 69 6c 65 4e 61 6d 65 20 3d 20 49 6e  oreFileName = In
cdd0: 73 74 61 6c 6c 65 72 2e 43 6f 72 65 46 69 6c 65  staller.CoreFile
cde0: 4e 61 6d 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  Name;....       
cdf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ce00: 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75           configu
ce10: 72 61 74 69 6f 6e 2e 63 6f 72 65 46 69 6c 65 4e  ration.coreFileN
ce20: 61 6d 65 20 3d 20 50 61 74 68 2e 43 6f 6d 62 69  ame = Path.Combi
ce30: 6e 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ne(..           
ce40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ce50: 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75           configu
ce60: 72 61 74 69 6f 6e 2e 64 69 72 65 63 74 6f 72 79  ration.directory
ce70: 2c 20 63 6f 72 65 46 69 6c 65 4e 61 6d 65 29 3b  , coreFileName);
ce80: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
ce90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cea0: 20 20 20 20 73 74 72 69 6e 67 20 6c 69 6e 71 46      string linqF
ceb0: 69 6c 65 4e 61 6d 65 20 3d 20 63 6f 6e 66 69 67  ileName = config
cec0: 75 72 61 74 69 6f 6e 2e 6c 69 6e 71 46 69 6c 65  uration.linqFile
ced0: 4e 61 6d 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  Name;....       
cee0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cef0: 20 20 20 20 20 20 20 20 20 69 66 20 28 21 53 74           if (!St
cf00: 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70  ring.IsNullOrEmp
cf10: 74 79 28 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 29  ty(linqFileName)
cf20: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
cf30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cf40: 20 20 20 20 20 20 20 6c 69 6e 71 46 69 6c 65 4e         linqFileN
cf50: 61 6d 65 20 3d 20 50 61 74 68 2e 47 65 74 46 69  ame = Path.GetFi
cf60: 6c 65 4e 61 6d 65 28 6c 69 6e 71 46 69 6c 65 4e  leName(linqFileN
cf70: 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ame);....       
cf80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cf90: 20 20 20 20 20 20 20 20 20 69 66 20 28 53 74 72           if (Str
cfa0: 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74  ing.IsNullOrEmpt
cfb0: 79 28 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 29 29  y(linqFileName))
cfc0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
cfd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cfe0: 20 20 20 20 20 20 6c 69 6e 71 46 69 6c 65 4e 61        linqFileNa
cff0: 6d 65 20 3d 20 49 6e 73 74 61 6c 6c 65 72 2e 4c  me = Installer.L
d000: 69 6e 71 46 69 6c 65 4e 61 6d 65 3b 0d 0a 0d 0a  inqFileName;....
d010: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d020: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d030: 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6c 69  configuration.li
d040: 6e 71 46 69 6c 65 4e 61 6d 65 20 3d 20 50 61 74  nqFileName = Pat
d050: 68 2e 43 6f 6d 62 69 6e 65 28 0d 0a 20 20 20 20  h.Combine(..    
d060: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d070: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d080: 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 64 69  configuration.di
d090: 72 65 63 74 6f 72 79 2c 20 6c 69 6e 71 46 69 6c  rectory, linqFil
d0a0: 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  eName);....     
d0b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d0c0: 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
d0d0: 67 20 64 65 73 69 67 6e 65 72 46 69 6c 65 4e 61  g designerFileNa
d0e0: 6d 65 20 3d 20 63 6f 6e 66 69 67 75 72 61 74 69  me = configurati
d0f0: 6f 6e 2e 64 65 73 69 67 6e 65 72 46 69 6c 65 4e  on.designerFileN
d100: 61 6d 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ame;....        
d110: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d120: 20 20 20 20 20 20 20 20 69 66 20 28 21 53 74 72          if (!Str
d130: 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74  ing.IsNullOrEmpt
d140: 79 28 64 65 73 69 67 6e 65 72 46 69 6c 65 4e 61  y(designerFileNa
d150: 6d 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  me))..          
d160: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d170: 20 20 20 20 20 20 20 20 20 20 64 65 73 69 67 6e            design
d180: 65 72 46 69 6c 65 4e 61 6d 65 20 3d 20 50 61 74  erFileName = Pat
d190: 68 2e 47 65 74 46 69 6c 65 4e 61 6d 65 28 64 65  h.GetFileName(de
d1a0: 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 29 3b  signerFileName);
d1b0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
d1c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d1d0: 20 20 20 20 69 66 20 28 53 74 72 69 6e 67 2e 49      if (String.I
d1e0: 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 64 65 73  sNullOrEmpty(des
d1f0: 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 29 29 0d  ignerFileName)).
d200: 0a 20 20 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 20 20 64 65 73 69 67 6e 65 72 46 69 6c       designerFil
d230: 65 4e 61 6d 65 20 3d 20 49 6e 73 74 61 6c 6c 65  eName = Installe
d240: 72 2e 44 65 73 69 67 6e 65 72 46 69 6c 65 4e 61  r.DesignerFileNa
d250: 6d 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  me;....         
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 63 6f 6e 66 69 67 75 72 61         configura
d280: 74 69 6f 6e 2e 64 65 73 69 67 6e 65 72 46 69 6c  tion.designerFil
d290: 65 4e 61 6d 65 20 3d 20 50 61 74 68 2e 43 6f 6d  eName = Path.Com
d2a0: 62 69 6e 65 28 0d 0a 20 20 20 20 20 20 20 20 20  bine(..         
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 63 6f 6e 66 69             confi
d2d0: 67 75 72 61 74 69 6f 6e 2e 64 69 72 65 63 74 6f  guration.directo
d2e0: 72 79 2c 20 64 65 73 69 67 6e 65 72 46 69 6c 65  ry, designerFile
d2f0: 4e 61 6d 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  Name);..        
d300: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d310: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
d320: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d330: 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63     else if (Matc
d340: 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20  hOption(newArg, 
d350: 22 63 6f 72 65 46 69 6c 65 4e 61 6d 65 22 29 29  "coreFileName"))
d360: 0d 0a 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 20 7b 0d                {.
d380: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
d390: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d3a0: 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 63   configuration.c
d3b0: 6f 72 65 46 69 6c 65 4e 61 6d 65 20 3d 20 74 65  oreFileName = te
d3c0: 78 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  xt;..           
d3d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d3e0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
d3f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d400: 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70  else if (MatchOp
d410: 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 6c 69  tion(newArg, "li
d420: 6e 71 46 69 6c 65 4e 61 6d 65 22 29 29 0d 0a 20  nqFileName")).. 
d430: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d440: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
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 20 20 63 6f                co
d470: 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6c 69 6e 71  nfiguration.linq
d480: 46 69 6c 65 4e 61 6d 65 20 3d 20 74 65 78 74 3b  FileName = text;
d490: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
d4a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
d4b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
d4c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73               els
d4d0: 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f  e if (MatchOptio
d4e0: 6e 28 6e 65 77 41 72 67 2c 20 22 64 65 73 69 67  n(newArg, "desig
d4f0: 6e 65 72 46 69 6c 65 4e 61 6d 65 22 29 29 0d 0a  nerFileName"))..
d500: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d510: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
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 20 20 20 20 20 20 63                 c
d540: 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 64 65 73  onfiguration.des
d550: 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 20 3d 20  ignerFileName = 
d560: 74 65 78 74 3b 0d 0a 20 20 20 20 20 20 20 20 20  text;..         
d570: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d580: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
d590: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d5a0: 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68    else if (Match
d5b0: 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22  Option(newArg, "
d5c0: 74 72 61 63 65 46 6f 72 6d 61 74 22 29 29 0d 0a  traceFormat"))..
d5d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d5e0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
d5f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d600: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
d610: 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 74 72 61  onfiguration.tra
d620: 63 65 46 6f 72 6d 61 74 20 3d 20 74 65 78 74 3b  ceFormat = text;
d630: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
d640: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d650: 20 20 54 72 61 63 65 4f 70 73 2e 54 72 61 63 65    TraceOps.Trace
d660: 46 6f 72 6d 61 74 20 3d 20 63 6f 6e 66 69 67 75  Format = configu
d670: 72 61 74 69 6f 6e 2e 74 72 61 63 65 46 6f 72 6d  ration.traceForm
d680: 61 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at;..           
d690: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d6a0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
d6b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d6c0: 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70  else if (MatchOp
d6d0: 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 74 72  tion(newArg, "tr
d6e0: 61 63 65 50 72 69 6f 72 69 74 79 22 29 29 0d 0a  acePriority"))..
d6f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d700: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
d710: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d720: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f                 o
d730: 62 6a 65 63 74 20 76 61 6c 75 65 20 3d 20 50 61  bject value = Pa
d740: 72 73 65 45 6e 75 6d 28 0d 0a 20 20 20 20 20 20  rseEnum(..      
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 20 20 20 20 20 20 20 74 79                ty
d770: 70 65 6f 66 28 54 72 61 63 65 50 72 69 6f 72 69  peof(TracePriori
d780: 74 79 29 2c 20 74 65 78 74 2c 20 74 72 75 65 29  ty), text, true)
d790: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
d7a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d7b0: 20 20 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d       if (value =
d7c0: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
d7d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d7e0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
d7f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d800: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d810: 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73  error = TraceOps
d820: 2e 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20  .Trace(..       
d830: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d840: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d850: 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c   TracePriority.L
d860: 6f 77 65 73 74 2c 0d 0a 20 20 20 20 20 20 20 20  owest,..        
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 20 20 20 20 20 20 20 20 20                  
d890: 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53  traceCallback, S
d8a0: 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
d8b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d8c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d8d0: 20 20 20 20 20 20 20 22 49 6e 76 61 6c 69 64 20         "Invalid 
d8e0: 74 72 61 63 65 20 70 72 69 6f 72 69 74 79 20 76  trace priority v
d8f0: 61 6c 75 65 3a 20 7b 30 7d 22 2c 0d 0a 20 20 20  alue: {0}",..   
d900: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d910: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d920: 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28       ForDisplay(
d930: 74 65 78 74 29 29 2c 20 74 72 61 63 65 43 61 74  text)), traceCat
d940: 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
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 20 20 20 20 20 20 20 69                 i
d970: 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20  f (strict)..    
d980: 20 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 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
d9b0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
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 63 6f 6e 74 69 6e 75           continu
d9e0: 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
d9f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
da00: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
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 63 6f 6e 66 69 67 75           configu
da30: 72 61 74 69 6f 6e 2e 74 72 61 63 65 50 72 69 6f  ration.tracePrio
da40: 72 69 74 79 20 3d 20 28 54 72 61 63 65 50 72 69  rity = (TracePri
da50: 6f 72 69 74 79 29 76 61 6c 75 65 3b 0d 0a 20 20  ority)value;..  
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 20 54 72                Tr
da80: 61 63 65 4f 70 73 2e 54 72 61 63 65 50 72 69 6f  aceOps.TracePrio
da90: 72 69 74 79 20 3d 20 63 6f 6e 66 69 67 75 72 61  rity = configura
daa0: 74 69 6f 6e 2e 74 72 61 63 65 50 72 69 6f 72 69  tion.tracePriori
dab0: 74 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ty;..           
dac0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dad0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
dae0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
daf0: 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70  else if (MatchOp
db00: 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 69 6e  tion(newArg, "in
db10: 73 74 61 6c 6c 22 29 29 0d 0a 20 20 20 20 20 20  stall"))..      
db20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
db30: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
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 62 6f 6f 6c 3f 20 76           bool? v
db60: 61 6c 75 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c  alue = ParseBool
db70: 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20  ean(text);....  
db80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
db90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
dba0: 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29   (value == null)
dbb0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
dbc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dbd0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
dbe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dbf0: 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
dc00: 20 54 72 61 63 65 4f 70 73 2e 54 72 61 63 65 28   TraceOps.Trace(
dc10: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
dc20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dc30: 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 50            TraceP
dc40: 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 0d  riority.Lowest,.
dc50: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
dc60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dc70: 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
dc80: 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46  llback, String.F
dc90: 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
dca0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dcb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dcc0: 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f  "Invalid {0} boo
dcd0: 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22  lean value: {1}"
dce0: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
dcf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dd00: 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69             ForDi
dd10: 73 70 6c 61 79 28 61 72 67 29 2c 20 46 6f 72 44  splay(arg), ForD
dd20: 69 73 70 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a  isplay(text)),..
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 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74          traceCat
dd60: 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
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 69                 i
dd90: 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20  f (strict)..    
dda0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ddb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ddc0: 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
ddd0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
dde0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ddf0: 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75           continu
de00: 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
de10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
de20: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
de30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
de40: 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75           configu
de50: 72 61 74 69 6f 6e 2e 69 6e 73 74 61 6c 6c 20 3d  ration.install =
de60: 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20   (bool)value;.. 
de70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
de80: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
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 65 6c 73 65 20 69            else i
deb0: 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e  f (MatchOption(n
dec0: 65 77 41 72 67 2c 20 22 69 6e 73 74 61 6c 6c 46  ewArg, "installF
ded0: 6c 61 67 73 22 29 29 0d 0a 20 20 20 20 20 20 20  lags"))..       
dee0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
def0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
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 6f 62 6a 65 63 74 20 76          object v
df20: 61 6c 75 65 20 3d 20 50 61 72 73 65 45 6e 75 6d  alue = ParseEnum
df30: 28 0d 0a 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 20 20 20 20 20 20 74 79 70 65 6f 66 28 49 6e         typeof(In
df60: 73 74 61 6c 6c 46 6c 61 67 73 29 2c 20 74 65 78  stallFlags), tex
df70: 74 2c 20 74 72 75 65 29 3b 0d 0a 0d 0a 20 20 20  t, true);....   
df80: 20 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 69 66 20               if 
dfa0: 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d  (value == null).
dfb0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
dfc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dfd0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
dfe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dff0: 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
e000: 54 72 61 63 65 4f 70 73 2e 54 72 61 63 65 28 0d  TraceOps.Trace(.
e010: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
e020: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e030: 20 20 20 20 20 20 20 20 20 54 72 61 63 65 50 72           TracePr
e040: 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 0d 0a  iority.Lowest,..
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: 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c          traceCal
e080: 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f  lback, String.Fo
e090: 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
e0a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e0b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
e0c0: 49 6e 76 61 6c 69 64 20 69 6e 73 74 61 6c 6c 20  Invalid install 
e0d0: 66 6c 61 67 73 20 76 61 6c 75 65 3a 20 7b 30 7d  flags value: {0}
e0e0: 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
e0f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e100: 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44              ForD
e110: 69 73 70 6c 61 79 28 74 65 78 74 29 29 2c 20 74  isplay(text)), t
e120: 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
e130: 0d 0a 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: 20 20 20 20 20 20 69 66 20 28 73 74 72 69 63 74        if (strict
e160: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
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 72 65 74 75 72             retur
e190: 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20  n false;....    
e1a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e1b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e1c0: 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20  continue;..     
e1d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e1e0: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
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: 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 69 6e  configuration.in
e220: 73 74 61 6c 6c 46 6c 61 67 73 20 3d 20 28 49 6e  stallFlags = (In
e230: 73 74 61 6c 6c 46 6c 61 67 73 29 76 61 6c 75 65  stallFlags)value
e240: 3b 0d 0a 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 7d                 }
e260: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
e270: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c                el
e280: 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69  se if (MatchOpti
e290: 6f 6e 28 6e 65 77 41 72 67 2c 20 22 77 68 61 74  on(newArg, "what
e2a0: 49 66 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20  If"))..         
e2b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e2c0: 20 20 20 7b 0d 0a 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 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75        bool? valu
e2f0: 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e  e = ParseBoolean
e300: 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20  (text);....     
e310: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e320: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76             if (v
e330: 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  alue == null).. 
e340: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e350: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
e360: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
e370: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e380: 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72        error = Tr
e390: 61 63 65 4f 70 73 2e 54 72 61 63 65 28 0d 0a 20  aceOps.Trace(.. 
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 20 20 20 20 20 20 20 20 20                  
e3c0: 20 20 20 20 20 20 20 54 72 61 63 65 50 72 69 6f         TracePrio
e3d0: 72 69 74 79 2e 4c 6f 77 65 73 74 2c 0d 0a 20 20  rity.Lowest,..  
e3e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e3f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e400: 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
e410: 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d  ack, String.Form
e420: 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
e430: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e440: 20 20 20 20 20 20 20 20 20 20 20 20 20 22 49 6e               "In
e450: 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61  valid {0} boolea
e460: 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a  n value: {1}",..
e470: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e480: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e490: 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c          ForDispl
e4a0: 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69 73 70  ay(arg), ForDisp
e4b0: 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20 20 20  lay(text)),..   
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 20 20                  
e4e0: 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
e4f0: 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
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 69 66 20 28              if (
e520: 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20  strict)..       
e530: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e540: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e550: 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
e560: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
e570: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e580: 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d        continue;.
e590: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
e5a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e5b0: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
e5c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e5d0: 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74        configurat
e5e0: 69 6f 6e 2e 77 68 61 74 49 66 20 3d 20 28 62 6f  ion.whatIf = (bo
e5f0: 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20  ol)value;..     
e600: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e610: 20 20 20 20 20 20 20 7d 0d 0a 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 65 6c 73 65 20 69 66 20 28 4d        else if (M
e640: 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72  atchOption(newAr
e650: 67 2c 20 22 76 65 72 62 6f 73 65 22 29 29 0d 0a  g, "verbose"))..
e660: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e670: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
e680: 20 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 62                 b
e6a0: 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61 72  ool? value = Par
e6b0: 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b  seBoolean(text);
e6c0: 0d 0a 0d 0a 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 20 20                  
e6e0: 20 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d      if (value ==
e6f0: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
e700: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e710: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
e720: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e730: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
e740: 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e  rror = TraceOps.
e750: 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20  Trace(..        
e760: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e770: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e780: 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f  TracePriority.Lo
e790: 77 65 73 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  west,..         
e7a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e7b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
e7c0: 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74  raceCallback, St
e7d0: 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
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 20 20 20 20 20 20 20 20 20                  
e800: 20 20 20 20 20 20 22 49 6e 76 61 6c 69 64 20 7b        "Invalid {
e810: 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65  0} boolean value
e820: 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20  : {1}",..       
e830: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e840: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e850: 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29   ForDisplay(arg)
e860: 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78  , ForDisplay(tex
e870: 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  t)),..          
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 20 20 20 20 20 20 20 74 72                tr
e8a0: 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
e8b0: 0a 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 69 66 20 28 73 74 72 69 63 74 29       if (strict)
e8e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
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 72 65 74 75 72 6e            return
e910: 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20   false;....     
e920: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e930: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
e940: 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20  ontinue;..      
e950: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e960: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
e970: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e980: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
e990: 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 76 65 72  onfiguration.ver
e9a0: 62 6f 73 65 20 3d 20 28 62 6f 6f 6c 29 76 61 6c  bose = (bool)val
e9b0: 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
e9c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e9d0: 20 7d 0d 0a 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: 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70  else if (MatchOp
ea00: 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 63 6f  tion(newArg, "co
ea10: 6e 66 69 72 6d 22 29 29 0d 0a 20 20 20 20 20 20  nfirm"))..      
ea20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ea30: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
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 62 6f 6f 6c 3f 20 76           bool? v
ea60: 61 6c 75 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c  alue = ParseBool
ea70: 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20  ean(text);....  
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 20 20 20 20 20 20 20 69 66                if
eaa0: 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29   (value == null)
eab0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
eac0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ead0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
eae0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
eaf0: 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
eb00: 20 54 72 61 63 65 4f 70 73 2e 54 72 61 63 65 28   TraceOps.Trace(
eb10: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
eb20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
eb30: 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 50            TraceP
eb40: 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 0d  riority.Lowest,.
eb50: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
eb60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
eb70: 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
eb80: 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46  llback, String.F
eb90: 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
eba0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ebb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ebc0: 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f  "Invalid {0} boo
ebd0: 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22  lean value: {1}"
ebe0: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
ebf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ec00: 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69             ForDi
ec10: 73 70 6c 61 79 28 61 72 67 29 2c 20 46 6f 72 44  splay(arg), ForD
ec20: 69 73 70 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a  isplay(text)),..
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 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74          traceCat
ec60: 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
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 69                 i
ec90: 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20  f (strict)..    
eca0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ecb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ecc0: 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
ecd0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
ece0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ecf0: 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75           continu
ed00: 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
ed10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ed20: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
ed30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ed40: 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75           configu
ed50: 72 61 74 69 6f 6e 2e 63 6f 6e 66 69 72 6d 20 3d  ration.confirm =
ed60: 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20   (bool)value;.. 
ed70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ed80: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
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 65 6c 73 65 20 69            else i
edb0: 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e  f (MatchOption(n
edc0: 65 77 41 72 67 2c 20 22 6e 6f 44 65 73 6b 74 6f  ewArg, "noDeskto
edd0: 70 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  p"))..          
ede0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
edf0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
ee00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ee10: 20 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65       bool? value
ee20: 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28   = ParseBoolean(
ee30: 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  text);....      
ee40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ee50: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76 61            if (va
ee60: 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  lue == null)..  
ee70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ee80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
ee90: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
eea0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
eeb0: 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72 61       error = Tra
eec0: 63 65 4f 70 73 2e 54 72 61 63 65 28 0d 0a 20 20  ceOps.Trace(..  
eed0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
eee0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
eef0: 20 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72        TracePrior
ef00: 69 74 79 2e 4c 6f 77 65 73 74 2c 0d 0a 20 20 20  ity.Lowest,..   
ef10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ef20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ef30: 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61       traceCallba
ef40: 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ck, String.Forma
ef50: 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
ef60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ef70: 20 20 20 20 20 20 20 20 20 20 20 20 22 49 6e 76              "Inv
ef80: 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e  alid {0} boolean
ef90: 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20   value: {1}",.. 
efa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
efb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
efc0: 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61         ForDispla
efd0: 79 28 61 72 67 29 2c 20 46 6f 72 44 69 73 70 6c  y(arg), ForDispl
efe0: 61 79 28 74 65 78 74 29 29 2c 0d 0a 20 20 20 20  ay(text)),..    
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 20 20 20                  
f010: 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72      traceCategor
f020: 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
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 69 66 20 28 73             if (s
f050: 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20  trict)..        
f060: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f070: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f080: 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d  return false;...
f090: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
f0a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f0b0: 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a       continue;..
f0c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f0d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f0e0: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
f0f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f100: 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69       configurati
f110: 6f 6e 2e 6e 6f 44 65 73 6b 74 6f 70 20 3d 20 28  on.noDesktop = (
f120: 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20  bool)value;..   
f130: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f140: 20 20 20 20 20 20 20 20 20 7d 0d 0a 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 65 6c 73 65 20 69 66 20          else if 
f170: 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77  (MatchOption(new
f180: 41 72 67 2c 20 22 6e 6f 43 6f 6d 70 61 63 74 22  Arg, "noCompact"
f190: 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
f1a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f1b0: 7b 0d 0a 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 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d     bool? value =
f1e0: 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65   ParseBoolean(te
f1f0: 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  xt);....        
f200: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f210: 20 20 20 20 20 20 20 20 69 66 20 28 76 61 6c 75          if (valu
f220: 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  e == null)..    
f230: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f240: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
f250: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f260: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f270: 20 20 20 65 72 72 6f 72 20 3d 20 54 72 61 63 65     error = Trace
f280: 4f 70 73 2e 54 72 61 63 65 28 0d 0a 20 20 20 20  Ops.Trace(..    
f290: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f2a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f2b0: 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69 74      TracePriorit
f2c0: 79 2e 4c 6f 77 65 73 74 2c 0d 0a 20 20 20 20 20  y.Lowest,..     
f2d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f2e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f2f0: 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b     traceCallback
f300: 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  , String.Format(
f310: 0d 0a 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 20 20 20 20 20                  
f330: 20 20 20 20 20 20 20 20 20 20 22 49 6e 76 61 6c            "Inval
f340: 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76  id {0} boolean v
f350: 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20  alue: {1}",..   
f360: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f370: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f380: 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28       ForDisplay(
f390: 61 72 67 29 2c 20 46 6f 72 44 69 73 70 6c 61 79  arg), ForDisplay
f3a0: 28 74 65 78 74 29 29 2c 0d 0a 20 20 20 20 20 20  (text)),..      
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 20 20 20 20 20                  
f3d0: 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
f3e0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
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 69 66 20 28 73 74 72           if (str
f410: 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ict)..          
f420: 20 20 20 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 72 65                re
f440: 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20  turn false;.... 
f450: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f460: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f470: 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20     continue;..  
f480: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f490: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
f4a0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
f4b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f4c0: 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e     configuration
f4d0: 2e 6e 6f 43 6f 6d 70 61 63 74 20 3d 20 28 62 6f  .noCompact = (bo
f4e0: 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20  ol)value;..     
f4f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f500: 20 20 20 20 20 20 20 7d 0d 0a 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 65 6c 73 65 20 69 66 20 28 4d        else if (M
f530: 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72  atchOption(newAr
f540: 67 2c 20 22 6e 6f 4e 65 74 46 78 32 30 22 29 29  g, "noNetFx20"))
f550: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
f560: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
f570: 0a 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 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50   bool? value = P
f5a0: 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74  arseBoolean(text
f5b0: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
f5c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f5d0: 20 20 20 20 20 20 69 66 20 28 76 61 6c 75 65 20        if (value 
f5e0: 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
f5f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f600: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
f610: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f620: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f630: 20 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70   error = TraceOp
f640: 73 2e 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20  s.Trace(..      
f650: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f660: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f670: 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e    TracePriority.
f680: 4c 6f 77 65 73 74 2c 0d 0a 20 20 20 20 20 20 20  Lowest,..       
f690: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f6a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f6b0: 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20   traceCallback, 
f6c0: 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
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 20 20 20 20 20 20 20                  
f6f0: 20 20 20 20 20 20 20 20 22 49 6e 76 61 6c 69 64          "Invalid
f700: 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c   {0} boolean val
f710: 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20  ue: {1}",..     
f720: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f730: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f740: 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72     ForDisplay(ar
f750: 67 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74  g), ForDisplay(t
f760: 65 78 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  ext)),..        
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 20 20 20 20 20 20 20                  
f790: 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
f7a0: 0a 0d 0a 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 69 66 20 28 73 74 72 69 63         if (stric
f7d0: 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t)..            
f7e0: 20 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 72 65 74 75              retu
f800: 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20  rn false;....   
f810: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f820: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f830: 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20   continue;..    
f840: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f850: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
f860: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
f870: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f880: 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e   configuration.n
f890: 6f 4e 65 74 46 78 32 30 20 3d 20 28 62 6f 6f 6c  oNetFx20 = (bool
f8a0: 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20  )value;..       
f8b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f8c0: 20 20 20 20 20 7d 0d 0a 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 65 6c 73 65 20 69 66 20 28 4d 61 74      else if (Mat
f8f0: 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c  chOption(newArg,
f900: 20 22 6e 6f 4e 65 74 46 78 34 30 22 29 29 0d 0a   "noNetFx40"))..
f910: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f920: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
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 62                 b
f950: 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61 72  ool? value = Par
f960: 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b  seBoolean(text);
f970: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
f980: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f990: 20 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d      if (value ==
f9a0: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
f9b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f9c0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
f9d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f9e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
f9f0: 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e  rror = TraceOps.
fa00: 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20  Trace(..        
fa10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fa20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fa30: 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f  TracePriority.Lo
fa40: 77 65 73 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  west,..         
fa50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fa60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
fa70: 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74  raceCallback, St
fa80: 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
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 20 20 20 20 20 20 20 20 20                  
fab0: 20 20 20 20 20 20 22 49 6e 76 61 6c 69 64 20 7b        "Invalid {
fac0: 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65  0} boolean value
fad0: 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20  : {1}",..       
fae0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
faf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fb00: 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29   ForDisplay(arg)
fb10: 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78  , ForDisplay(tex
fb20: 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  t)),..          
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 20 20 20 20 20 20 20 74 72                tr
fb50: 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
fb60: 0a 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 69 66 20 28 73 74 72 69 63 74 29       if (strict)
fb90: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
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 72 65 74 75 72 6e            return
fbc0: 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20   false;....     
fbd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fbe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
fbf0: 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20  ontinue;..      
fc00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fc10: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
fc20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fc30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
fc40: 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 4e  onfiguration.noN
fc50: 65 74 46 78 34 30 20 3d 20 28 62 6f 6f 6c 29 76  etFx40 = (bool)v
fc60: 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alue;..         
fc70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fc80: 20 20 20 7d 0d 0a 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 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68    else if (Match
fcb0: 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22  Option(newArg, "
fcc0: 6e 6f 56 73 32 30 30 38 22 29 29 0d 0a 20 20 20  noVs2008"))..   
fcd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fce0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
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 62 6f 6f 6c              bool
fd10: 3f 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65 42  ? value = ParseB
fd20: 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d  oolean(text);...
fd30: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
fd40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fd50: 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75   if (value == nu
fd60: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
fd70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fd80: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
fd90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fda0: 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
fdb0: 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 54 72 61  r = TraceOps.Tra
fdc0: 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ce(..           
fdd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fde0: 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
fdf0: 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73  cePriority.Lowes
fe00: 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t,..            
fe10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fe20: 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
fe30: 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e  eCallback, Strin
fe40: 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
fe50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fe60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fe70: 20 20 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20     "Invalid {0} 
fe80: 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b  boolean value: {
fe90: 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  1}",..          
fea0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
feb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f                Fo
fec0: 72 44 69 73 70 6c 61 79 28 61 72 67 29 2c 20 46  rDisplay(arg), F
fed0: 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74 29 29  orDisplay(text))
fee0: 2c 0d 0a 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 20 20 20 20 20 20 20 74 72 61 63 65             trace
ff10: 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
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 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20    if (strict).. 
ff50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
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 72 65 74 75 72 6e 20 66 61         return fa
ff80: 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  lse;....        
ff90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ffa0: 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74              cont
ffb0: 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  inue;..         
ffc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ffd0: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
ffe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fff0: 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66              conf
10000 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 56 73 32 30  iguration.noVs20
10010 30 38 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65  08 = (bool)value
10020 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
10030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
10040 0d 0a 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 65 6c                el
10060 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69  se if (MatchOpti
10070 6f 6e 28 6e 65 77 41 72 67 2c 20 22 6e 6f 56 73  on(newArg, "noVs
10080 32 30 31 30 22 29 29 0d 0a 20 20 20 20 20 20 20  2010"))..       
10090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
100a0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
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 62 6f 6f 6c 3f 20 76 61          bool? va
100d0 6c 75 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65  lue = ParseBoole
100e0 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20  an(text);....   
100f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10100 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
10110 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d  (value == null).
10120 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
10130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10140 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
10150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10160 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
10170 54 72 61 63 65 4f 70 73 2e 54 72 61 63 65 28 0d  TraceOps.Trace(.
10180 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
10190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
101a0 20 20 20 20 20 20 20 20 20 54 72 61 63 65 50 72           TracePr
101b0 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 0d 0a  iority.Lowest,..
101c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
101d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
101e0 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c          traceCal
101f0 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f  lback, String.Fo
10200 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
10210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
10230 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c  Invalid {0} bool
10240 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c  ean value: {1}",
10250 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
10260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10270 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73            ForDis
10280 70 6c 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69  play(arg), ForDi
10290 73 70 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20  splay(text)),.. 
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 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
102d0 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
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 69 66                if
10300 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20   (strict)..     
10310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10330 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
10340 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
10350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10360 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65          continue
10370 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
10380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10390 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
103a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
103b0 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72          configur
103c0 61 74 69 6f 6e 2e 6e 6f 56 73 32 30 31 30 20 3d  ation.noVs2010 =
103d0 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20   (bool)value;.. 
103e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
103f0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
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 65 6c 73 65 20 69            else i
10420 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e  f (MatchOption(n
10430 65 77 41 72 67 2c 20 22 6e 6f 54 72 61 63 65 22  ewArg, "noTrace"
10440 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
10450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10460 7b 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 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d     bool? value =
10490 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65   ParseBoolean(te
104a0 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  xt);....        
104b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
104c0 20 20 20 20 20 20 20 20 69 66 20 28 76 61 6c 75          if (valu
104d0 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  e == null)..    
104e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
104f0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
10500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10520 20 20 20 65 72 72 6f 72 20 3d 20 54 72 61 63 65     error = Trace
10530 4f 70 73 2e 54 72 61 63 65 28 0d 0a 20 20 20 20  Ops.Trace(..    
10540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10560 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69 74      TracePriorit
10570 79 2e 4c 6f 77 65 73 74 2c 0d 0a 20 20 20 20 20  y.Lowest,..     
10580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
105a0 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b     traceCallback
105b0 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  , String.Format(
105c0 0d 0a 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 20 20 20 20 20                  
105e0 20 20 20 20 20 20 20 20 20 20 22 49 6e 76 61 6c            "Inval
105f0 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76  id {0} boolean v
10600 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20  alue: {1}",..   
10610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10630 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28       ForDisplay(
10640 61 72 67 29 2c 20 46 6f 72 44 69 73 70 6c 61 79  arg), ForDisplay
10650 28 74 65 78 74 29 29 2c 0d 0a 20 20 20 20 20 20  (text)),..      
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 20 20 20 20 20                  
10680 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
10690 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
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 69 66 20 28 73 74 72           if (str
106c0 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ict)..          
106d0 20 20 20 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 72 65                re
106f0 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20  turn false;.... 
10700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10720 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20     continue;..  
10730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
10750 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
10760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10770 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e     configuration
10780 2e 6e 6f 54 72 61 63 65 20 3d 20 28 62 6f 6f 6c  .noTrace = (bool
10790 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20  )value;..       
107a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
107b0 20 20 20 20 20 7d 0d 0a 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 65 6c 73 65 20 69 66 20 28 4d 61 74      else if (Mat
107e0 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c  chOption(newArg,
107f0 20 22 6e 6f 43 6f 6e 73 6f 6c 65 22 29 29 0d 0a   "noConsole"))..
10800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10810 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
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 62                 b
10840 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61 72  ool? value = Par
10850 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b  seBoolean(text);
10860 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
10870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10880 20 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d      if (value ==
10890 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
108a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
108b0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
108c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
108d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
108e0 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e  rror = TraceOps.
108f0 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20  Trace(..        
10900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10920 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f  TracePriority.Lo
10930 77 65 73 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  west,..         
10940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
10960 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74  raceCallback, St
10970 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
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 20 20 20 20 20 20 20 20 20                  
109a0 20 20 20 20 20 20 22 49 6e 76 61 6c 69 64 20 7b        "Invalid {
109b0 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65  0} boolean value
109c0 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20  : {1}",..       
109d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
109e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
109f0 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29   ForDisplay(arg)
10a00 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78  , ForDisplay(tex
10a10 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  t)),..          
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 20 20 20 20 20 20 20 74 72                tr
10a40 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
10a50 0a 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 69 66 20 28 73 74 72 69 63 74 29       if (strict)
10a80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
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 72 65 74 75 72 6e            return
10ab0 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20   false;....     
10ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
10ae0 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20  ontinue;..      
10af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10b00 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
10b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
10b30 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 43  onfiguration.noC
10b40 6f 6e 73 6f 6c 65 20 3d 20 28 62 6f 6f 6c 29 76  onsole = (bool)v
10b50 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alue;..         
10b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10b70 20 20 20 7d 0d 0a 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 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68    else if (Match
10ba0 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22  Option(newArg, "
10bb0 6e 6f 4c 6f 67 22 29 29 0d 0a 20 20 20 20 20 20  noLog"))..      
10bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10bd0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
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 62 6f 6f 6c 3f 20 76           bool? v
10c00 61 6c 75 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c  alue = ParseBool
10c10 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20  ean(text);....  
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 20 20 20 20 20 20 20 69 66                if
10c40 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29   (value == null)
10c50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
10c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10c70 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
10c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10c90 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
10ca0 20 54 72 61 63 65 4f 70 73 2e 54 72 61 63 65 28   TraceOps.Trace(
10cb0 0d 0a 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 20 20 20 20 20                  
10cd0 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 50            TraceP
10ce0 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 0d  riority.Lowest,.
10cf0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
10d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10d10 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
10d20 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46  llback, String.F
10d30 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
10d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10d60 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f  "Invalid {0} boo
10d70 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22  lean value: {1}"
10d80 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
10d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10da0 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69             ForDi
10db0 73 70 6c 61 79 28 61 72 67 29 2c 20 46 6f 72 44  splay(arg), ForD
10dc0 69 73 70 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a  isplay(text)),..
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 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74          traceCat
10e00 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
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 69                 i
10e30 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20  f (strict)..    
10e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10e60 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
10e70 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
10e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10e90 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75           continu
10ea0 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
10eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10ec0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
10ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10ee0 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75           configu
10ef0 72 61 74 69 6f 6e 2e 6e 6f 4c 6f 67 20 3d 20 28  ration.noLog = (
10f00 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20  bool)value;..   
10f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10f20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
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 65 6c 73 65 0d 0a 20 20          else..  
10f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10f60 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 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 20 20 20 20 20 20 65 72 72               err
10f90 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 54 72  or = TraceOps.Tr
10fa0 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ace(..          
10fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10fc0 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 50            TraceP
10fd0 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 0d  riority.Lowest,.
10fe0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
10ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11000 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61       traceCallba
11010 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ck, String.Forma
11020 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
11030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11040 20 20 20 20 20 20 20 20 22 55 6e 73 75 70 70 6f          "Unsuppo
11050 72 74 65 64 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e  rted command lin
11060 65 20 6f 70 74 69 6f 6e 3a 20 7b 30 7d 22 2c 0d  e option: {0}",.
11070 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
11080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11090 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28       ForDisplay(
110a0 61 72 67 29 29 2c 20 74 72 61 63 65 43 61 74 65  arg)), traceCate
110b0 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
110c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
110d0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73 74            if (st
110e0 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20  rict)..         
110f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11100 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
11110 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
11120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11130 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
11140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11150 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
11160 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65              else
11170 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
11180 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
11190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
111a0 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
111b0 20 54 72 61 63 65 4f 70 73 2e 54 72 61 63 65 28   TraceOps.Trace(
111c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
111d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
111e0 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e    TracePriority.
111f0 4c 6f 77 65 73 74 2c 0d 0a 20 20 20 20 20 20 20  Lowest,..       
11200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11210 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
11220 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46  llback, String.F
11230 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
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 22 55 6e 73 75 70 70 6f          "Unsuppo
11260 72 74 65 64 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e  rted command lin
11270 65 20 61 72 67 75 6d 65 6e 74 3a 20 7b 30 7d 22  e argument: {0}"
11280 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
11290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
112a0 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72     ForDisplay(ar
112b0 67 29 29 2c 20 74 72 61 63 65 43 61 74 65 67 6f  g)), traceCatego
112c0 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
112d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
112e0 20 20 20 20 69 66 20 28 73 74 72 69 63 74 29 0d      if (strict).
112f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
11300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11310 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
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 7d 0d 0a 20 20 20 20 20          }..     
11340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
11350 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
11360 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74          return t
11370 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  rue;..          
11380 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
11390 20 20 20 20 20 20 20 20 20 63 61 74 63 68 20 28           catch (
113a0 45 78 63 65 70 74 69 6f 6e 20 65 29 0d 0a 20 20  Exception e)..  
113b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
113c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
113d0 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 54 72       TraceOps.Tr
113e0 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ace(..          
113f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
11400 61 63 65 50 72 69 6f 72 69 74 79 2e 48 69 67 68  acePriority.High
11410 65 73 74 2c 20 74 72 61 63 65 43 61 6c 6c 62 61  est, traceCallba
11420 63 6b 2c 20 65 2c 0d 0a 20 20 20 20 20 20 20 20  ck, e,..        
11430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11440 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
11450 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
11460 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22         error = "
11470 46 61 69 6c 65 64 20 74 6f 20 6d 6f 64 69 66 79  Failed to modify
11480 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 22   configuration."
11490 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
114a0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
114b0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
114c0 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
114d0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
114e0 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
114f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11500 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11510 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11520 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
11530 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74         public st
11540 61 74 69 63 20 62 6f 6f 6c 20 50 72 6f 63 65 73  atic bool Proces
11550 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s(..            
11560 20 20 20 20 73 74 72 69 6e 67 5b 5d 20 61 72 67      string[] arg
11570 73 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s,..            
11580 20 20 20 20 43 6f 6e 66 69 67 75 72 61 74 69 6f      Configuratio
11590 6e 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2c  n configuration,
115a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
115b0 20 20 62 6f 6f 6c 20 73 74 72 69 63 74 2c 0d 0a    bool strict,..
115c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
115d0 72 65 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72  ref string error
115e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
115f0 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20    )..           
11600 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
11610 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20      try..       
11620 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
11630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11640 69 66 20 28 63 6f 6e 66 69 67 75 72 61 74 69 6f  if (configuratio
11650 6e 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  n == null)..    
11660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11670 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
11680 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
11690 20 3d 20 22 49 6e 76 61 6c 69 64 20 63 6f 6e 66   = "Invalid conf
116a0 69 67 75 72 61 74 69 6f 6e 2e 22 3b 0d 0a 20 20  iguration.";..  
116b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
116c0 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
116d0 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se;..           
116e0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
116f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11700 20 20 41 73 73 65 6d 62 6c 79 20 61 73 73 65 6d    Assembly assem
11710 62 6c 79 20 3d 20 63 6f 6e 66 69 67 75 72 61 74  bly = configurat
11720 69 6f 6e 2e 61 73 73 65 6d 62 6c 79 3b 0d 0a 0d  ion.assembly;...
11730 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
11740 20 20 20 20 20 69 66 20 28 61 73 73 65 6d 62 6c       if (assembl
11750 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  y == null)..    
11760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11770 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
11780 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
11790 20 3d 20 22 49 6e 76 61 6c 69 64 20 61 73 73 65   = "Invalid asse
117a0 6d 62 6c 79 2e 22 3b 0d 0a 20 20 20 20 20 20 20  mbly.";..       
117b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
117c0 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
117d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
117e0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
117f0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
11800 28 21 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e  (!configuration.
11810 6e 6f 54 72 61 63 65 29 0d 0a 20 20 20 20 20 20  noTrace)..      
11820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
11830 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
11840 20 20 20 20 20 20 20 20 20 69 66 20 28 21 63 6f           if (!co
11850 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 4c 6f  nfiguration.noLo
11860 67 20 26 26 0d 0a 20 20 20 20 20 20 20 20 20 20  g &&..          
11870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11880 20 20 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f    String.IsNullO
11890 72 45 6d 70 74 79 28 63 6f 6e 66 69 67 75 72 61  rEmpty(configura
118a0 74 69 6f 6e 2e 6c 6f 67 46 69 6c 65 4e 61 6d 65  tion.logFileName
118b0 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
118c0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
118d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
118e0 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69             confi
118f0 67 75 72 61 74 69 6f 6e 2e 6c 6f 67 46 69 6c 65  guration.logFile
11900 4e 61 6d 65 20 3d 20 47 65 74 4c 6f 67 46 69 6c  Name = GetLogFil
11910 65 4e 61 6d 65 28 29 3b 0d 0a 20 20 20 20 20 20  eName();..      
11920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11930 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
11940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
11950 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11960 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11970 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11980 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 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 20 69 66 20 28 21 63 6f 6e 66 69 67 75 72 61    if (!configura
119b0 74 69 6f 6e 2e 6e 6f 43 6f 6e 73 6f 6c 65 29 0d  tion.noConsole).
119c0 0a 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 7b 0d 0a 20 20 20 20           {..    
119e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
119f0 20 20 20 20 20 20 20 20 54 72 61 63 65 2e 4c 69          Trace.Li
11a00 73 74 65 6e 65 72 73 2e 41 64 64 28 6e 65 77 20  steners.Add(new 
11a10 43 6f 6e 73 6f 6c 65 54 72 61 63 65 4c 69 73 74  ConsoleTraceList
11a20 65 6e 65 72 28 29 29 3b 0d 0a 20 20 20 20 20 20  ener());..      
11a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11a40 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
11a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
11a60 66 20 28 21 63 6f 6e 66 69 67 75 72 61 74 69 6f  f (!configuratio
11a70 6e 2e 6e 6f 4c 6f 67 20 26 26 0d 0a 20 20 20 20  n.noLog &&..    
11a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11a90 20 20 20 20 20 20 20 20 21 53 74 72 69 6e 67 2e          !String.
11aa0 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 63 6f  IsNullOrEmpty(co
11ab0 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6c 6f 67 46  nfiguration.logF
11ac0 69 6c 65 4e 61 6d 65 29 29 0d 0a 20 20 20 20 20  ileName))..     
11ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11ae0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
11af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11b00 20 20 54 72 61 63 65 2e 4c 69 73 74 65 6e 65 72    Trace.Listener
11b10 73 2e 41 64 64 28 6e 65 77 20 54 65 78 74 57 72  s.Add(new TextWr
11b20 69 74 65 72 54 72 61 63 65 4c 69 73 74 65 6e 65  iterTraceListene
11b30 72 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  r(..            
11b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11b50 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f      configuratio
11b60 6e 2e 6c 6f 67 46 69 6c 65 4e 61 6d 65 29 29 3b  n.logFileName));
11b70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
11b80 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
11b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11ba0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
11bb0 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
11bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11bd0 20 20 2f 2f 20 4e 4f 54 45 3a 20 44 75 6d 70 20    // NOTE: Dump 
11be0 74 68 65 20 63 6f 6e 66 69 67 75 72 61 74 69 6f  the configuratio
11bf0 6e 20 6e 6f 77 20 69 6e 20 63 61 73 65 20 77 65  n now in case we
11c00 20 6e 65 65 64 20 74 6f 0d 0a 20 20 20 20 20 20   need to..      
11c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
11c20 20 20 20 20 20 20 20 74 72 6f 75 62 6c 65 73 68         troublesh
11c30 6f 6f 74 20 61 6e 79 20 69 73 73 75 65 73 2e 0d  oot any issues..
11c40 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
11c50 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
11c60 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
11c70 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 74  (configuration.t
11c80 72 61 63 65 50 72 69 6f 72 69 74 79 20 3c 3d 20  racePriority <= 
11c90 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4d 65  TracePriority.Me
11ca0 64 69 75 6d 29 0d 0a 20 20 20 20 20 20 20 20 20  dium)..         
11cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
11cc0 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 44 75 6d  onfiguration.Dum
11cd0 70 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  p();....        
11ce0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
11cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11d00 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 53 68 6f      // NOTE: Sho
11d10 77 20 77 68 65 72 65 20 77 65 20 61 72 65 20 72  w where we are r
11d20 75 6e 6e 69 6e 67 20 66 72 6f 6d 20 61 6e 64 20  unning from and 
11d30 68 6f 77 20 77 65 20 77 65 72 65 0d 0a 20 20 20  how we were..   
11d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11d50 20 2f 2f 20 20 20 20 20 20 20 69 6e 76 6f 6b 65   //       invoke
11d60 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d...            
11d70 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
11d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11d90 73 74 72 69 6e 67 20 6c 6f 63 61 74 69 6f 6e 20  string location 
11da0 3d 20 61 73 73 65 6d 62 6c 79 2e 4c 6f 63 61 74  = assembly.Locat
11db0 69 6f 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ion;....        
11dc0 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
11dd0 65 4f 70 73 2e 54 72 61 63 65 28 0d 0a 20 20 20  eOps.Trace(..   
11de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11df0 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69       TracePriori
11e00 74 79 2e 4d 65 64 69 75 6d 2c 20 74 72 61 63 65  ty.Medium, trace
11e10 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67  Callback, String
11e20 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
11e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11e40 20 20 22 4f 72 69 67 69 6e 61 6c 20 63 6f 6d 6d    "Original comm
11e50 61 6e 64 20 6c 69 6e 65 20 69 73 3a 20 7b 30 7d  and line is: {0}
11e60 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
11e70 20 20 20 20 20 20 20 20 20 20 20 20 45 6e 76 69              Envi
11e80 72 6f 6e 6d 65 6e 74 2e 43 6f 6d 6d 61 6e 64 4c  ronment.CommandL
11e90 69 6e 65 29 2c 20 74 72 61 63 65 43 61 74 65 67  ine), traceCateg
11ea0 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
11eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
11ec0 28 21 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e  (!configuration.
11ed0 77 68 61 74 49 66 29 0d 0a 20 20 20 20 20 20 20  whatIf)..       
11ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
11ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11f00 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
11f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11f20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 49 66 20      // NOTE: If 
11f30 74 68 65 20 64 65 62 75 67 67 65 72 20 69 73 20  the debugger is 
11f40 61 74 74 61 63 68 65 64 20 61 6e 64 20 57 68 61  attached and Wha
11f50 74 2d 49 66 20 6d 6f 64 65 0d 0a 20 20 20 20 20  t-If mode..     
11f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11f70 20 20 20 2f 2f 20 20 20 20 20 20 20 69 73 20 5b     //       is [
11f80 6e 6f 77 5d 20 64 69 73 61 62 6c 65 64 2c 20 69  now] disabled, i
11f90 73 73 75 65 20 61 20 77 61 72 6e 69 6e 67 2e 0d  ssue a warning..
11fa0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
11fb0 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
11fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11fd0 20 20 20 20 20 69 66 20 28 44 65 62 75 67 67 65       if (Debugge
11fe0 72 2e 49 73 41 74 74 61 63 68 65 64 29 0d 0a 20  r.IsAttached).. 
11ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12000 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
12010 4f 70 73 2e 54 72 61 63 65 28 0d 0a 20 20 20 20  Ops.Trace(..    
12020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12030 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
12040 65 50 72 69 6f 72 69 74 79 2e 4d 65 64 69 75 6d  ePriority.Medium
12050 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c  , traceCallback,
12060 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
12070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12080 20 20 22 46 6f 72 63 65 64 20 74 6f 20 64 69 73    "Forced to dis
12090 61 62 6c 65 20 5c 22 77 68 61 74 2d 69 66 5c 22  able \"what-if\"
120a0 20 6d 6f 64 65 20 77 69 74 68 20 22 20 2b 0d 0a   mode with " +..
120b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
120c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
120d0 22 64 65 62 75 67 67 65 72 20 61 74 74 61 63 68  "debugger attach
120e0 65 64 2e 22 2c 20 74 72 61 63 65 43 61 74 65 67  ed.", traceCateg
120f0 6f 72 79 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ory);..         
12100 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
12110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12120 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20    else..        
12130 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
12140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12150 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e         TraceOps.
12160 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20  Trace(..        
12170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12180 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69 74      TracePriorit
12190 79 2e 48 69 67 68 65 72 2c 20 74 72 61 63 65 43  y.Higher, traceC
121a0 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20  allback,..      
121b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
121c0 20 20 20 20 20 20 22 4e 6f 20 61 63 74 75 61 6c        "No actual
121d0 20 63 68 61 6e 67 65 73 20 77 69 6c 6c 20 62 65   changes will be
121e0 20 6d 61 64 65 20 74 6f 20 74 68 69 73 20 22 20   made to this " 
121f0 2b 0d 0a 20 20 20 20 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 22                 "
12210 73 79 73 74 65 6d 20 62 65 63 61 75 73 65 20 5c  system because \
12220 22 77 68 61 74 2d 69 66 5c 22 20 6d 6f 64 65 20  "what-if\" mode 
12230 69 73 20 65 6e 61 62 6c 65 64 2e 22 2c 0d 0a 20  is enabled.",.. 
12240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12250 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
12260 43 61 74 65 67 6f 72 79 29 3b 0d 0a 20 20 20 20  Category);..    
12270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12280 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
12290 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
122a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
122b0 20 2f 2f 20 4e 4f 54 45 3a 20 49 66 20 74 68 65   // NOTE: If the
122c0 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 20 68 61   command line ha
122d0 73 20 6e 6f 74 20 62 65 65 6e 20 6d 61 6e 75 61  s not been manua
122e0 6c 6c 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20  lly..           
122f0 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
12300 20 20 63 6f 6e 66 69 72 6d 65 64 20 28 69 2e 65    confirmed (i.e
12310 2e 20 76 69 61 20 74 68 65 20 65 78 70 6c 69 63  . via the explic
12320 69 74 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 0d  it command line.
12330 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
12340 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6f 70       //       op
12350 74 69 6f 6e 29 2c 20 74 68 65 6e 20 73 74 6f 70  tion), then stop
12360 20 70 72 6f 63 65 73 73 69 6e 67 20 6e 6f 77 2e   processing now.
12370 20 20 57 65 20 65 6e 66 6f 72 63 65 0d 0a 20 20    We enforce..  
12380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12390 20 20 2f 2f 20 20 20 20 20 20 20 74 68 69 73 20    //       this 
123a0 72 75 6c 65 20 73 6f 20 74 68 61 74 20 73 69 6d  rule so that sim
123b0 70 6c 79 20 64 6f 75 62 6c 65 2d 63 6c 69 63 6b  ply double-click
123c0 69 6e 67 20 74 68 65 0d 0a 20 20 20 20 20 20 20  ing the..       
123d0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
123e0 20 20 20 20 20 20 65 78 65 63 75 74 61 62 6c 65        executable
123f0 20 77 69 6c 6c 20 6e 6f 74 20 72 65 73 75 6c 74   will not result
12400 20 69 6e 20 61 6e 79 20 63 68 61 6e 67 65 73 20   in any changes 
12410 62 65 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 20  being..         
12420 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
12430 20 20 20 20 6d 61 64 65 20 74 6f 20 74 68 65 20      made to the 
12440 73 79 73 74 65 6d 2e 0d 0a 20 20 20 20 20 20 20  system...       
12450 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
12460 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
12470 20 20 20 20 20 69 66 20 28 21 63 6f 6e 66 69 67       if (!config
12480 75 72 61 74 69 6f 6e 2e 63 6f 6e 66 69 72 6d 29  uration.confirm)
12490 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
124a0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
124b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
124c0 20 65 72 72 6f 72 20 3d 20 22 43 61 6e 6e 6f 74   error = "Cannot
124d0 20 63 6f 6e 74 69 6e 75 65 2c 20 74 68 65 20 5c   continue, the \
124e0 22 63 6f 6e 66 69 72 6d 5c 22 20 6f 70 74 69 6f  "confirm\" optio
124f0 6e 20 69 73 20 22 20 2b 0d 0a 20 20 20 20 20 20  n is " +..      
12500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12510 20 20 20 20 20 20 22 6e 6f 74 20 65 6e 61 62 6c        "not enabl
12520 65 64 2e 22 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ed.";....       
12530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12540 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
12550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12560 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
12570 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
12580 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20  urn true;..     
12590 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
125a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 61                ca
125b0 74 63 68 20 28 45 78 63 65 70 74 69 6f 6e 20 65  tch (Exception e
125c0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
125d0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
125e0 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f            TraceO
125f0 70 73 2e 54 72 61 63 65 28 0d 0a 20 20 20 20 20  ps.Trace(..     
12600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12610 20 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79     TracePriority
12620 2e 48 69 67 68 65 73 74 2c 20 74 72 61 63 65 43  .Highest, traceC
12630 61 6c 6c 62 61 63 6b 2c 20 65 2c 0d 0a 20 20 20  allback, e,..   
12640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12650 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
12660 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
12670 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
12680 72 20 3d 20 22 46 61 69 6c 65 64 20 74 6f 20 70  r = "Failed to p
12690 72 6f 63 65 73 73 20 63 6f 6e 66 69 67 75 72 61  rocess configura
126a0 74 69 6f 6e 2e 22 3b 0d 0a 20 20 20 20 20 20 20  tion.";..       
126b0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
126c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
126d0 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
126e0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
126f0 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
12700 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  on....          
12710 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
12720 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12730 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12740 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12750 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
12760 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62       #region Pub
12770 6c 69 63 20 4d 65 74 68 6f 64 73 0d 0a 20 20 20  lic Methods..   
12780 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
12790 62 6f 6f 6c 20 48 61 73 46 6c 61 67 73 28 0d 0a  bool HasFlags(..
127a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
127b0 49 6e 73 74 61 6c 6c 46 6c 61 67 73 20 68 61 73  InstallFlags has
127c0 46 6c 61 67 73 2c 0d 0a 20 20 20 20 20 20 20 20  Flags,..        
127d0 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 61 6c 6c          bool all
127e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
127f0 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20    )..           
12800 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
12810 20 20 20 20 69 66 20 28 61 6c 6c 29 0d 0a 20 20      if (all)..  
12820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12830 20 20 72 65 74 75 72 6e 20 28 28 69 6e 73 74 61    return ((insta
12840 6c 6c 46 6c 61 67 73 20 26 20 68 61 73 46 6c 61  llFlags & hasFla
12850 67 73 29 20 3d 3d 20 68 61 73 46 6c 61 67 73 29  gs) == hasFlags)
12860 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
12870 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20     else..       
12880 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
12890 75 72 6e 20 28 28 69 6e 73 74 61 6c 6c 46 6c 61  urn ((installFla
128a0 67 73 20 26 20 68 61 73 46 6c 61 67 73 29 20 21  gs & hasFlags) !
128b0 3d 20 49 6e 73 74 61 6c 6c 46 6c 61 67 73 2e 4e  = InstallFlags.N
128c0 6f 6e 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  one);..         
128d0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
128e0 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
128f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12900 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12910 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12920 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
12930 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 76 6f         public vo
12940 69 64 20 44 75 6d 70 28 29 0d 0a 20 20 20 20 20  id Dump()..     
12950 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
12960 20 20 20 20 20 20 20 20 20 20 69 66 20 28 74 72            if (tr
12970 61 63 65 43 61 6c 6c 62 61 63 6b 20 21 3d 20 6e  aceCallback != n
12980 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
12990 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
129a0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
129b0 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e  ceCallback(Strin
129c0 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64  g.Format(NameAnd
129d0 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20  ValueFormat,..  
129e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
129f0 20 20 20 20 20 20 22 41 73 73 65 6d 62 6c 79 22        "Assembly"
12a00 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 61 73 73  , ForDisplay(ass
12a10 65 6d 62 6c 79 29 29 2c 0d 0a 20 20 20 20 20 20  embly)),..      
12a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12a30 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
12a40 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
12a50 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
12a60 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f  llback(String.Fo
12a70 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75  rmat(NameAndValu
12a80 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20  eFormat,..      
12a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12aa0 20 20 22 4c 6f 67 46 69 6c 65 4e 61 6d 65 22 2c    "LogFileName",
12ab0 20 46 6f 72 44 69 73 70 6c 61 79 28 6c 6f 67 46   ForDisplay(logF
12ac0 69 6c 65 4e 61 6d 65 29 29 2c 0d 0a 20 20 20 20  ileName)),..    
12ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12ae0 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72      traceCategor
12af0 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
12b00 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
12b10 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e  Callback(String.
12b20 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61  Format(NameAndVa
12b30 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20  lueFormat,..    
12b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12b50 20 20 20 20 22 44 69 72 65 63 74 6f 72 79 22 2c      "Directory",
12b60 20 46 6f 72 44 69 73 70 6c 61 79 28 64 69 72 65   ForDisplay(dire
12b70 63 74 6f 72 79 29 29 2c 0d 0a 20 20 20 20 20 20  ctory)),..      
12b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12b90 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
12ba0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
12bb0 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
12bc0 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f  llback(String.Fo
12bd0 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75  rmat(NameAndValu
12be0 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20  eFormat,..      
12bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12c00 20 20 22 43 6f 72 65 46 69 6c 65 4e 61 6d 65 22    "CoreFileName"
12c10 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 63 6f 72  , ForDisplay(cor
12c20 65 46 69 6c 65 4e 61 6d 65 29 29 2c 0d 0a 20 20  eFileName)),..  
12c30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12c40 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
12c50 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
12c60 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
12c70 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e  ceCallback(Strin
12c80 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64  g.Format(NameAnd
12c90 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20  ValueFormat,..  
12ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12cb0 20 20 20 20 20 20 22 4c 69 6e 71 46 69 6c 65 4e        "LinqFileN
12cc0 61 6d 65 22 2c 20 46 6f 72 44 69 73 70 6c 61 79  ame", ForDisplay
12cd0 28 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 29 29 2c  (linqFileName)),
12ce0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
12cf0 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
12d00 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
12d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12d20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53   traceCallback(S
12d30 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d  tring.Format(Nam
12d40 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c  eAndValueFormat,
12d50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
12d60 20 20 20 20 20 20 20 20 20 20 22 44 65 73 69 67            "Desig
12d70 6e 65 72 46 69 6c 65 4e 61 6d 65 22 2c 20 46 6f  nerFileName", Fo
12d80 72 44 69 73 70 6c 61 79 28 64 65 73 69 67 6e 65  rDisplay(designe
12d90 72 46 69 6c 65 4e 61 6d 65 29 29 2c 0d 0a 20 20  rFileName)),..  
12da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12db0 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
12dc0 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
12dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
12de0 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e  ceCallback(Strin
12df0 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64  g.Format(NameAnd
12e00 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20  ValueFormat,..  
12e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12e20 20 20 20 20 20 20 22 54 72 61 63 65 46 6f 72 6d        "TraceForm
12e30 61 74 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  at", ForDisplay(
12e40 74 72 61 63 65 46 6f 72 6d 61 74 29 29 2c 0d 0a  traceFormat)),..
12e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12e60 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74          traceCat
12e70 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
12e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
12e90 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72  raceCallback(Str
12ea0 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41  ing.Format(NameA
12eb0 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a  ndValueFormat,..
12ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12ed0 20 20 20 20 20 20 20 20 22 49 6e 73 74 61 6c 6c          "Install
12ee0 46 6c 61 67 73 22 2c 20 46 6f 72 44 69 73 70 6c  Flags", ForDispl
12ef0 61 79 28 69 6e 73 74 61 6c 6c 46 6c 61 67 73 29  ay(installFlags)
12f00 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
12f10 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
12f20 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
12f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12f40 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b     traceCallback
12f50 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e  (String.Format(N
12f60 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61  ameAndValueForma
12f70 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t,..            
12f80 20 20 20 20 20 20 20 20 20 20 20 20 22 54 72 61              "Tra
12f90 63 65 50 72 69 6f 72 69 74 79 22 2c 20 46 6f 72  cePriority", For
12fa0 44 69 73 70 6c 61 79 28 74 72 61 63 65 50 72 69  Display(tracePri
12fb0 6f 72 69 74 79 29 29 2c 0d 0a 20 20 20 20 20 20  ority)),..      
12fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12fd0 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
12fe0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
12ff0 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
13000 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f  llback(String.Fo
13010 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75  rmat(NameAndValu
13020 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20  eFormat,..      
13030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13040 20 20 22 49 6e 73 74 61 6c 6c 22 2c 20 46 6f 72    "Install", For
13050 44 69 73 70 6c 61 79 28 69 6e 73 74 61 6c 6c 29  Display(install)
13060 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
13070 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
13080 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
13090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
130a0 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b     traceCallback
130b0 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e  (String.Format(N
130c0 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61  ameAndValueForma
130d0 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t,..            
130e0 20 20 20 20 20 20 20 20 20 20 20 20 22 4e 6f 44              "NoD
130f0 65 73 6b 74 6f 70 22 2c 20 46 6f 72 44 69 73 70  esktop", ForDisp
13100 6c 61 79 28 6e 6f 44 65 73 6b 74 6f 70 29 29 2c  lay(noDesktop)),
13110 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
13120 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
13130 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
13140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13150 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53   traceCallback(S
13160 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d  tring.Format(Nam
13170 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c  eAndValueFormat,
13180 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
13190 20 20 20 20 20 20 20 20 20 20 22 4e 6f 43 6f 6d            "NoCom
131a0 70 61 63 74 22 2c 20 46 6f 72 44 69 73 70 6c 61  pact", ForDispla
131b0 79 28 6e 6f 43 6f 6d 70 61 63 74 29 29 2c 0d 0a  y(noCompact)),..
131c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
131d0 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74          traceCat
131e0 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
131f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
13200 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72  raceCallback(Str
13210 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41  ing.Format(NameA
13220 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a  ndValueFormat,..
13230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13240 20 20 20 20 20 20 20 20 22 4e 6f 4e 65 74 46 78          "NoNetFx
13250 32 30 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  20", ForDisplay(
13260 6e 6f 4e 65 74 46 78 32 30 29 29 2c 0d 0a 20 20  noNetFx20)),..  
13270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13280 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
13290 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
132a0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
132b0 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e  ceCallback(Strin
132c0 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64  g.Format(NameAnd
132d0 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20  ValueFormat,..  
132e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
132f0 20 20 20 20 20 20 22 4e 6f 4e 65 74 46 78 34 30        "NoNetFx40
13300 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 6e 6f  ", ForDisplay(no
13310 4e 65 74 46 78 34 30 29 29 2c 0d 0a 20 20 20 20  NetFx40)),..    
13320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13330 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72      traceCategor
13340 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
13350 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
13360 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e  Callback(String.
13370 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61  Format(NameAndVa
13380 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20  lueFormat,..    
13390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
133a0 20 20 20 20 22 4e 6f 56 73 32 30 30 38 22 2c 20      "NoVs2008", 
133b0 46 6f 72 44 69 73 70 6c 61 79 28 6e 6f 56 73 32  ForDisplay(noVs2
133c0 30 30 38 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  008)),..        
133d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
133e0 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
133f0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
13400 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c         traceCall
13410 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d  back(String.Form
13420 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46  at(NameAndValueF
13430 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20  ormat,..        
13440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13450 22 4e 6f 56 73 32 30 31 30 22 2c 20 46 6f 72 44  "NoVs2010", ForD
13460 69 73 70 6c 61 79 28 6e 6f 56 73 32 30 31 30 29  isplay(noVs2010)
13470 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
13480 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
13490 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
134a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
134b0 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b     traceCallback
134c0 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e  (String.Format(N
134d0 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61  ameAndValueForma
134e0 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t,..            
134f0 20 20 20 20 20 20 20 20 20 20 20 20 22 4e 6f 54              "NoT
13500 72 61 63 65 22 2c 20 46 6f 72 44 69 73 70 6c 61  race", ForDispla
13510 79 28 6e 6f 54 72 61 63 65 29 29 2c 0d 0a 20 20  y(noTrace)),..  
13520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13530 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
13540 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
13550 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
13560 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e  ceCallback(Strin
13570 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64  g.Format(NameAnd
13580 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20  ValueFormat,..  
13590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
135a0 20 20 20 20 20 20 22 4e 6f 43 6f 6e 73 6f 6c 65        "NoConsole
135b0 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 6e 6f  ", ForDisplay(no
135c0 43 6f 6e 73 6f 6c 65 29 29 2c 0d 0a 20 20 20 20  Console)),..    
135d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
135e0 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72      traceCategor
135f0 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
13600 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
13610 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e  Callback(String.
13620 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61  Format(NameAndVa
13630 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20  lueFormat,..    
13640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13650 20 20 20 20 22 4e 6f 4c 6f 67 22 2c 20 46 6f 72      "NoLog", For
13660 44 69 73 70 6c 61 79 28 6e 6f 4c 6f 67 29 29 2c  Display(noLog)),
13670 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
13680 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
13690 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
136a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
136b0 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53   traceCallback(S
136c0 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d  tring.Format(Nam
136d0 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c  eAndValueFormat,
136e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
136f0 20 20 20 20 20 20 20 20 20 20 22 57 68 61 74 49            "WhatI
13700 66 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 77  f", ForDisplay(w
13710 68 61 74 49 66 29 29 2c 0d 0a 20 20 20 20 20 20  hatIf)),..      
13720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13730 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
13740 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
13750 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
13760 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f  llback(String.Fo
13770 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75  rmat(NameAndValu
13780 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20  eFormat,..      
13790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
137a0 20 20 22 56 65 72 62 6f 73 65 22 2c 20 46 6f 72    "Verbose", For
137b0 44 69 73 70 6c 61 79 28 76 65 72 62 6f 73 65 29  Display(verbose)
137c0 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
137d0 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
137e0 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
137f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13800 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b     traceCallback
13810 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e  (String.Format(N
13820 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61  ameAndValueForma
13830 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t,..            
13840 20 20 20 20 20 20 20 20 20 20 20 20 22 43 6f 6e              "Con
13850 66 69 72 6d 22 2c 20 46 6f 72 44 69 73 70 6c 61  firm", ForDispla
13860 79 28 63 6f 6e 66 69 72 6d 29 29 2c 0d 0a 20 20  y(confirm)),..  
13870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13880 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
13890 6f 72 79 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ory);..         
138a0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
138b0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
138c0 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
138d0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
138e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
138f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13900 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13910 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13920 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
13930 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c 69 63    #region Public
13940 20 50 72 6f 70 65 72 74 69 65 73 0d 0a 20 20 20   Properties..   
13950 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
13960 20 41 73 73 65 6d 62 6c 79 20 61 73 73 65 6d 62   Assembly assemb
13970 6c 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ly;..           
13980 20 70 75 62 6c 69 63 20 41 73 73 65 6d 62 6c 79   public Assembly
13990 20 41 73 73 65 6d 62 6c 79 0d 0a 20 20 20 20 20   Assembly..     
139a0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
139b0 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20            get { 
139c0 72 65 74 75 72 6e 20 61 73 73 65 6d 62 6c 79 3b  return assembly;
139d0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
139e0 20 20 20 20 73 65 74 20 7b 20 61 73 73 65 6d 62      set { assemb
139f0 6c 79 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20  ly = value; }.. 
13a00 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
13a10 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
13a20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13a30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13a40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13a50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
13a60 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
13a70 72 69 76 61 74 65 20 73 74 72 69 6e 67 20 6c 6f  rivate string lo
13a80 67 46 69 6c 65 4e 61 6d 65 3b 0d 0a 20 20 20 20  gFileName;..    
13a90 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73          public s
13aa0 74 72 69 6e 67 20 4c 6f 67 46 69 6c 65 4e 61 6d  tring LogFileNam
13ab0 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  e..            {
13ac0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
13ad0 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 6c    get { return l
13ae0 6f 67 46 69 6c 65 4e 61 6d 65 3b 20 7d 0d 0a 20  ogFileName; }.. 
13af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
13b00 65 74 20 7b 20 6c 6f 67 46 69 6c 65 4e 61 6d 65  et { logFileName
13b10 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20   = value; }..   
13b20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
13b30 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
13b40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13b50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13b60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13b70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
13b80 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
13b90 76 61 74 65 20 73 74 72 69 6e 67 20 64 69 72 65  vate string dire
13ba0 63 74 6f 72 79 3b 0d 0a 20 20 20 20 20 20 20 20  ctory;..        
13bb0 20 20 20 20 70 75 62 6c 69 63 20 73 74 72 69 6e      public strin
13bc0 67 20 44 69 72 65 63 74 6f 72 79 0d 0a 20 20 20  g Directory..   
13bd0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
13be0 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20              get 
13bf0 7b 20 72 65 74 75 72 6e 20 64 69 72 65 63 74 6f  { return directo
13c00 72 79 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  ry; }..         
13c10 20 20 20 20 20 20 20 73 65 74 20 7b 20 64 69 72         set { dir
13c20 65 63 74 6f 72 79 20 3d 20 76 61 6c 75 65 3b 20  ectory = value; 
13c30 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
13c40 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
13c50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13c60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13c70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13c80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13c90 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
13ca0 20 20 20 70 72 69 76 61 74 65 20 73 74 72 69 6e     private strin
13cb0 67 20 63 6f 72 65 46 69 6c 65 4e 61 6d 65 3b 0d  g coreFileName;.
13cc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
13cd0 6c 69 63 20 73 74 72 69 6e 67 20 43 6f 72 65 46  lic string CoreF
13ce0 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20  ileName..       
13cf0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
13d00 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65          get { re
13d10 74 75 72 6e 20 63 6f 72 65 46 69 6c 65 4e 61 6d  turn coreFileNam
13d20 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  e; }..          
13d30 20 20 20 20 20 20 73 65 74 20 7b 20 63 6f 72 65        set { core
13d40 46 69 6c 65 4e 61 6d 65 20 3d 20 76 61 6c 75 65  FileName = value
13d50 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
13d60 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
13d70 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
13d80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13d90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13da0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13db0 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
13dc0 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 72       private str
13dd0 69 6e 67 20 6c 69 6e 71 46 69 6c 65 4e 61 6d 65  ing linqFileName
13de0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ;..            p
13df0 75 62 6c 69 63 20 73 74 72 69 6e 67 20 4c 69 6e  ublic string Lin
13e00 71 46 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20  qFileName..     
13e10 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
13e20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20            get { 
13e30 72 65 74 75 72 6e 20 6c 69 6e 71 46 69 6c 65 4e  return linqFileN
13e40 61 6d 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  ame; }..        
13e50 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 6c 69          set { li
13e60 6e 71 46 69 6c 65 4e 61 6d 65 20 3d 20 76 61 6c  nqFileName = val
13e70 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  ue; }..         
13e80 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
13e90 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
13ea0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13eb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13ec0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13ed0 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
13ee0 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
13ef0 74 72 69 6e 67 20 64 65 73 69 67 6e 65 72 46 69  tring designerFi
13f00 6c 65 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20  leName;..       
13f10 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 72 69       public stri
13f20 6e 67 20 44 65 73 69 67 6e 65 72 46 69 6c 65 4e  ng DesignerFileN
13f30 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ame..           
13f40 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
13f50 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e      get { return
13f60 20 64 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d   designerFileNam
13f70 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  e; }..          
13f80 20 20 20 20 20 20 73 65 74 20 7b 20 64 65 73 69        set { desi
13f90 67 6e 65 72 46 69 6c 65 4e 61 6d 65 20 3d 20 76  gnerFileName = v
13fa0 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20  alue; }..       
13fb0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
13fc0 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
13fd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13fe0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13ff0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14000 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
14010 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
14020 20 73 74 72 69 6e 67 20 74 72 61 63 65 46 6f 72   string traceFor
14030 6d 61 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  mat;..          
14040 20 20 70 75 62 6c 69 63 20 73 74 72 69 6e 67 20    public string 
14050 54 72 61 63 65 46 6f 72 6d 61 74 0d 0a 20 20 20  TraceFormat..   
14060 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
14070 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20              get 
14080 7b 20 72 65 74 75 72 6e 20 74 72 61 63 65 46 6f  { return traceFo
14090 72 6d 61 74 3b 20 7d 0d 0a 20 20 20 20 20 20 20  rmat; }..       
140a0 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 74           set { t
140b0 72 61 63 65 46 6f 72 6d 61 74 20 3d 20 76 61 6c  raceFormat = val
140c0 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  ue; }..         
140d0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
140e0 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
140f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14100 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14110 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14120 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
14130 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 49         private I
14140 6e 73 74 61 6c 6c 46 6c 61 67 73 20 69 6e 73 74  nstallFlags inst
14150 61 6c 6c 46 6c 61 67 73 3b 0d 0a 20 20 20 20 20  allFlags;..     
14160 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 49 6e         public In
14170 73 74 61 6c 6c 46 6c 61 67 73 20 49 6e 73 74 61  stallFlags Insta
14180 6c 6c 46 6c 61 67 73 0d 0a 20 20 20 20 20 20 20  llFlags..       
14190 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
141a0 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65          get { re
141b0 74 75 72 6e 20 69 6e 73 74 61 6c 6c 46 6c 61 67  turn installFlag
141c0 73 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  s; }..          
141d0 20 20 20 20 20 20 73 65 74 20 7b 20 69 6e 73 74        set { inst
141e0 61 6c 6c 46 6c 61 67 73 20 3d 20 76 61 6c 75 65  allFlags = value
141f0 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
14200 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
14210 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
14220 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14230 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14240 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14250 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
14260 20 20 20 20 20 70 72 69 76 61 74 65 20 54 72 61       private Tra
14270 63 65 50 72 69 6f 72 69 74 79 20 74 72 61 63 65  cePriority trace
14280 50 72 69 6f 72 69 74 79 3b 0d 0a 20 20 20 20 20  Priority;..     
14290 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 54 72         public Tr
142a0 61 63 65 50 72 69 6f 72 69 74 79 20 54 72 61 63  acePriority Trac
142b0 65 50 72 69 6f 72 69 74 79 0d 0a 20 20 20 20 20  ePriority..     
142c0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
142d0 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20            get { 
142e0 72 65 74 75 72 6e 20 74 72 61 63 65 50 72 69 6f  return tracePrio
142f0 72 69 74 79 3b 20 7d 0d 0a 20 20 20 20 20 20 20  rity; }..       
14300 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 74           set { t
14310 72 61 63 65 50 72 69 6f 72 69 74 79 20 3d 20 76  racePriority = v
14320 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20  alue; }..       
14330 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
14340 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
14350 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14360 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14370 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14380 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
14390 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
143a0 20 62 6f 6f 6c 20 69 6e 73 74 61 6c 6c 3b 0d 0a   bool install;..
143b0 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
143c0 69 63 20 62 6f 6f 6c 20 49 6e 73 74 61 6c 6c 0d  ic bool Install.
143d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
143e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
143f0 67 65 74 20 7b 20 72 65 74 75 72 6e 20 69 6e 73  get { return ins
14400 74 61 6c 6c 3b 20 7d 0d 0a 20 20 20 20 20 20 20  tall; }..       
14410 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 69           set { i
14420 6e 73 74 61 6c 6c 20 3d 20 76 61 6c 75 65 3b 20  nstall = value; 
14430 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
14440 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
14450 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14460 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14470 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14480 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14490 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
144a0 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20     private bool 
144b0 6e 6f 44 65 73 6b 74 6f 70 3b 0d 0a 20 20 20 20  noDesktop;..    
144c0 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 62          public b
144d0 6f 6f 6c 20 4e 6f 44 65 73 6b 74 6f 70 0d 0a 20  ool NoDesktop.. 
144e0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
144f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65                ge
14500 74 20 7b 20 72 65 74 75 72 6e 20 6e 6f 44 65 73  t { return noDes
14510 6b 74 6f 70 3b 20 7d 0d 0a 20 20 20 20 20 20 20  ktop; }..       
14520 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 6e           set { n
14530 6f 44 65 73 6b 74 6f 70 20 3d 20 76 61 6c 75 65  oDesktop = value
14540 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
14550 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
14560 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14590 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
145a0 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
145b0 20 20 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f       private boo
145c0 6c 20 6e 6f 43 6f 6d 70 61 63 74 3b 0d 0a 20 20  l noCompact;..  
145d0 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
145e0 20 62 6f 6f 6c 20 4e 6f 43 6f 6d 70 61 63 74 0d   bool NoCompact.
145f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
14600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14610 67 65 74 20 7b 20 72 65 74 75 72 6e 20 6e 6f 43  get { return noC
14620 6f 6d 70 61 63 74 3b 20 7d 0d 0a 20 20 20 20 20  ompact; }..     
14630 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b             set {
14640 20 6e 6f 43 6f 6d 70 61 63 74 20 3d 20 76 61 6c   noCompact = val
14650 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  ue; }..         
14660 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
14670 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
146a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
146b0 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
146c0 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 62         private b
146d0 6f 6f 6c 20 6e 6f 4e 65 74 46 78 32 30 3b 0d 0a  ool noNetFx20;..
146e0 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
146f0 69 63 20 62 6f 6f 6c 20 4e 6f 4e 65 74 46 78 32  ic bool NoNetFx2
14700 30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  0..            {
14710 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
14720 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 6e    get { return n
14730 6f 4e 65 74 46 78 32 30 3b 20 7d 0d 0a 20 20 20  oNetFx20; }..   
14740 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74               set
14750 20 7b 20 6e 6f 4e 65 74 46 78 32 30 20 3d 20 76   { noNetFx20 = v
14760 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20  alue; }..       
14770 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
14780 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f  ////////////////
147c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
147d0 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
147e0 20 62 6f 6f 6c 20 6e 6f 4e 65 74 46 78 34 30 3b   bool noNetFx40;
147f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
14800 62 6c 69 63 20 62 6f 6f 6c 20 4e 6f 4e 65 74 46  blic bool NoNetF
14810 78 34 30 0d 0a 20 20 20 20 20 20 20 20 20 20 20  x40..           
14820 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
14830 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e      get { return
14840 20 6e 6f 4e 65 74 46 78 34 30 3b 20 7d 0d 0a 20   noNetFx40; }.. 
14850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
14860 65 74 20 7b 20 6e 6f 4e 65 74 46 78 34 30 20 3d  et { noNetFx40 =
14870 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20   value; }..     
14880 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
14890 20 20 20 20 20 20 20 20 2f 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 0d 0a 0d 0a 20  ///////////.... 
148e0 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
148f0 74 65 20 62 6f 6f 6c 20 6e 6f 56 73 32 30 30 38  te bool noVs2008
14900 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ;..            p
14910 75 62 6c 69 63 20 62 6f 6f 6c 20 4e 6f 56 73 32  ublic bool NoVs2
14920 30 30 38 0d 0a 20 20 20 20 20 20 20 20 20 20 20  008..           
14930 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
14940 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e      get { return
14950 20 6e 6f 56 73 32 30 30 38 3b 20 7d 0d 0a 20 20   noVs2008; }..  
14960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65                se
14970 74 20 7b 20 6e 6f 56 73 32 30 30 38 20 3d 20 76  t { noVs2008 = v
14980 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20  alue; }..       
14990 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
149a0 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
149b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
149c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20  /////////....   
149f0 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
14a00 20 62 6f 6f 6c 20 6e 6f 56 73 32 30 31 30 3b 0d   bool noVs2010;.
14a10 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
14a20 6c 69 63 20 62 6f 6f 6c 20 4e 6f 56 73 32 30 31  lic bool NoVs201
14a30 30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  0..            {
14a40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
14a50 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 6e    get { return n
14a60 6f 56 73 32 30 31 30 3b 20 7d 0d 0a 20 20 20 20  oVs2010; }..    
14a70 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
14a80 7b 20 6e 6f 56 73 32 30 31 30 20 3d 20 76 61 6c  { noVs2010 = val
14a90 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  ue; }..         
14aa0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
14ab0 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
14ac0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14ad0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14ae0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14af0 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
14b00 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 62         private b
14b10 6f 6f 6c 20 6e 6f 54 72 61 63 65 3b 0d 0a 20 20  ool noTrace;..  
14b20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
14b30 20 62 6f 6f 6c 20 4e 6f 54 72 61 63 65 0d 0a 20   bool NoTrace.. 
14b40 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
14b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65                ge
14b60 74 20 7b 20 72 65 74 75 72 6e 20 6e 6f 54 72 61  t { return noTra
14b70 63 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  ce; }..         
14b80 20 20 20 20 20 20 20 73 65 74 20 7b 20 6e 6f 54         set { noT
14b90 72 61 63 65 20 3d 20 76 61 6c 75 65 3b 20 7d 0d  race = value; }.
14ba0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
14bb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
14bc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14bd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14be0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14bf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14c00 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
14c10 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 6e 6f   private bool no
14c20 43 6f 6e 73 6f 6c 65 3b 0d 0a 20 20 20 20 20 20  Console;..      
14c30 20 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f        public boo
14c40 6c 20 4e 6f 43 6f 6e 73 6f 6c 65 0d 0a 20 20 20  l NoConsole..   
14c50 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
14c60 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20              get 
14c70 7b 20 72 65 74 75 72 6e 20 6e 6f 43 6f 6e 73 6f  { return noConso
14c80 6c 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  le; }..         
14c90 20 20 20 20 20 20 20 73 65 74 20 7b 20 6e 6f 43         set { noC
14ca0 6f 6e 73 6f 6c 65 20 3d 20 76 61 6c 75 65 3b 20  onsole = value; 
14cb0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
14cc0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
14cd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14ce0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14cf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14d00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14d10 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
14d20 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20     private bool 
14d30 6e 6f 4c 6f 67 3b 0d 0a 20 20 20 20 20 20 20 20  noLog;..        
14d40 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20      public bool 
14d50 4e 6f 4c 6f 67 0d 0a 20 20 20 20 20 20 20 20 20  NoLog..         
14d60 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
14d70 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75        get { retu
14d80 72 6e 20 6e 6f 4c 6f 67 3b 20 7d 0d 0a 20 20 20  rn noLog; }..   
14d90 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74               set
14da0 20 7b 20 6e 6f 4c 6f 67 20 3d 20 76 61 6c 75 65   { noLog = value
14db0 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
14dc0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
14dd0 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
14de0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14df0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14e00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14e10 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
14e20 20 20 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f       private boo
14e30 6c 20 77 68 61 74 49 66 3b 0d 0a 20 20 20 20 20  l whatIf;..     
14e40 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f         public bo
14e50 6f 6c 20 57 68 61 74 49 66 0d 0a 20 20 20 20 20  ol WhatIf..     
14e60 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
14e70 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20            get { 
14e80 72 65 74 75 72 6e 20 77 68 61 74 49 66 3b 20 7d  return whatIf; }
14e90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
14ea0 20 20 73 65 74 20 7b 20 77 68 61 74 49 66 20 3d    set { whatIf =
14eb0 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20   value; }..     
14ec0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
14ed0 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
14ee0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14ef0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14f00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14f10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
14f20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
14f30 74 65 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 3b  te bool verbose;
14f40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
14f50 62 6c 69 63 20 62 6f 6f 6c 20 56 65 72 62 6f 73  blic bool Verbos
14f60 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  e..            {
14f70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
14f80 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 76    get { return v
14f90 65 72 62 6f 73 65 3b 20 7d 0d 0a 20 20 20 20 20  erbose; }..     
14fa0 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b             set {
14fb0 20 76 65 72 62 6f 73 65 20 3d 20 76 61 6c 75 65   verbose = value
14fc0 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
14fd0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
14fe0 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
14ff0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15000 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15010 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15020 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
15030 20 20 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f       private boo
15040 6c 20 63 6f 6e 66 69 72 6d 3b 0d 0a 20 20 20 20  l confirm;..    
15050 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 62          public b
15060 6f 6f 6c 20 43 6f 6e 66 69 72 6d 0d 0a 20 20 20  ool Confirm..   
15070 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
15080 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20              get 
15090 7b 20 72 65 74 75 72 6e 20 63 6f 6e 66 69 72 6d  { return confirm
150a0 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
150b0 20 20 20 20 20 73 65 74 20 7b 20 63 6f 6e 66 69       set { confi
150c0 72 6d 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20  rm = value; }.. 
150d0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
150e0 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65            #endre
150f0 67 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 7d 0d  gion..        }.
15100 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67  .        #endreg
15110 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 23 65 6e  ion..        #en
15120 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
15130 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
15140 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15150 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15160 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15170 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
15180 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 72        #region Pr
15190 69 76 61 74 65 20 43 6f 6e 73 74 61 6e 74 20 44  ivate Constant D
151a0 61 74 61 0d 0a 20 20 20 20 20 20 20 20 70 72 69  ata..        pri
151b0 76 61 74 65 20 63 6f 6e 73 74 20 73 74 72 69 6e  vate const strin
151c0 67 20 43 6f 72 65 46 69 6c 65 4e 61 6d 65 20 3d  g CoreFileName =
151d0 20 22 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51   "System.Data.SQ
151e0 4c 69 74 65 2e 64 6c 6c 22 3b 0d 0a 20 20 20 20  Lite.dll";..    
151f0 20 20 20 20 70 72 69 76 61 74 65 20 63 6f 6e 73      private cons
15200 74 20 73 74 72 69 6e 67 20 4c 69 6e 71 46 69 6c  t string LinqFil
15210 65 4e 61 6d 65 20 3d 20 22 53 79 73 74 65 6d 2e  eName = "System.
15220 44 61 74 61 2e 53 51 4c 69 74 65 2e 4c 69 6e 71  Data.SQLite.Linq
15230 2e 64 6c 6c 22 3b 0d 0a 20 20 20 20 20 20 20 20  .dll";..        
15240 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20 73 74  private const st
15250 72 69 6e 67 20 44 65 73 69 67 6e 65 72 46 69 6c  ring DesignerFil
15260 65 4e 61 6d 65 20 3d 20 22 53 51 4c 69 74 65 2e  eName = "SQLite.
15270 44 65 73 69 67 6e 65 72 2e 64 6c 6c 22 3b 0d 0a  Designer.dll";..
15280 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
15290 63 6f 6e 73 74 20 73 74 72 69 6e 67 20 50 72 6f  const string Pro
152a0 76 69 64 65 72 4e 61 6d 65 20 3d 20 22 53 51 4c  viderName = "SQL
152b0 69 74 65 20 44 61 74 61 20 50 72 6f 76 69 64 65  ite Data Provide
152c0 72 22 3b 0d 0a 20 20 20 20 20 20 20 20 70 72 69  r";..        pri
152d0 76 61 74 65 20 63 6f 6e 73 74 20 73 74 72 69 6e  vate const strin
152e0 67 20 50 72 6f 6a 65 63 74 4e 61 6d 65 20 3d 20  g ProjectName = 
152f0 22 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c  "System.Data.SQL
15300 69 74 65 22 3b 0d 0a 20 20 20 20 20 20 20 20 70  ite";..        p
15310 72 69 76 61 74 65 20 63 6f 6e 73 74 20 73 74 72  rivate const str
15320 69 6e 67 20 4c 65 67 61 63 79 50 72 6f 6a 65 63  ing LegacyProjec
15330 74 4e 61 6d 65 20 3d 20 22 53 51 4c 69 74 65 22  tName = "SQLite"
15340 3b 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  ;..        priva
15350 74 65 20 63 6f 6e 73 74 20 73 74 72 69 6e 67 20  te const string 
15360 49 6e 76 61 72 69 61 6e 74 4e 61 6d 65 20 3d 20  InvariantName = 
15370 22 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c  "System.Data.SQL
15380 69 74 65 22 3b 0d 0a 20 20 20 20 20 20 20 20 70  ite";..        p
15390 72 69 76 61 74 65 20 63 6f 6e 73 74 20 73 74 72  rivate const str
153a0 69 6e 67 20 46 61 63 74 6f 72 79 54 79 70 65 4e  ing FactoryTypeN
153b0 61 6d 65 20 3d 20 22 53 79 73 74 65 6d 2e 44 61  ame = "System.Da
153c0 74 61 2e 53 51 4c 69 74 65 2e 53 51 4c 69 74 65  ta.SQLite.SQLite
153d0 46 61 63 74 6f 72 79 22 3b 0d 0a 20 20 20 20 20  Factory";..     
153e0 20 20 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74     private const
153f0 20 73 74 72 69 6e 67 20 44 65 73 63 72 69 70 74   string Descript
15400 69 6f 6e 20 3d 20 22 2e 4e 45 54 20 46 72 61 6d  ion = ".NET Fram
15410 65 77 6f 72 6b 20 44 61 74 61 20 50 72 6f 76 69  ework Data Provi
15420 64 65 72 20 66 6f 72 20 53 51 4c 69 74 65 22 3b  der for SQLite";
15430 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
15440 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15450 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15460 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15470 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15480 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70  ///....        p
15490 72 69 76 61 74 65 20 63 6f 6e 73 74 20 73 74 72  rivate const str
154a0 69 6e 67 20 4e 61 6d 65 41 6e 64 56 61 6c 75 65  ing NameAndValue
154b0 46 6f 72 6d 61 74 20 3d 20 22 7b 30 7d 3a 20 7b  Format = "{0}: {
154c0 31 7d 22 3b 0d 0a 20 20 20 20 20 20 20 20 70 72  1}";..        pr
154d0 69 76 61 74 65 20 63 6f 6e 73 74 20 73 74 72 69  ivate const stri
154e0 6e 67 20 4c 6f 67 46 69 6c 65 53 75 66 66 69 78  ng LogFileSuffix
154f0 20 3d 20 22 2e 6c 6f 67 22 3b 0d 0a 0d 0a 20 20   = ".log";....  
15500 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
15510 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15520 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15530 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15540 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
15550 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
15560 20 73 74 61 74 69 63 20 72 65 61 64 6f 6e 6c 79   static readonly
15570 20 73 74 72 69 6e 67 20 56 73 49 64 46 6f 72 6d   string VsIdForm
15580 61 74 20 3d 20 22 42 22 3b 0d 0a 0d 0a 20 20 20  at = "B";....   
15590 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
155a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
155b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
155c0 2f 2f 2f 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 0d 0a 0d 0a  ////////////....
155e0 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
155f0 73 74 61 74 69 63 20 72 65 61 64 6f 6e 6c 79 20  static readonly 
15600 73 74 72 69 6e 67 20 46 72 61 6d 65 77 6f 72 6b  string Framework
15610 4b 65 79 4e 61 6d 65 20 3d 0d 0a 20 20 20 20 20  KeyName =..     
15620 20 20 20 20 20 20 20 22 53 6f 66 74 77 61 72 65         "Software
15630 5c 5c 4d 69 63 72 6f 73 6f 66 74 5c 5c 2e 4e 45  \\Microsoft\\.NE
15640 54 46 72 61 6d 65 77 6f 72 6b 22 3b 0d 0a 0d 0a  TFramework";....
15650 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
15660 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15670 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15680 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15690 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
156a0 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  ...        priva
156b0 74 65 20 73 74 61 74 69 63 20 72 65 61 64 6f 6e  te static readon
156c0 6c 79 20 73 74 72 69 6e 67 20 46 72 61 6d 65 77  ly string Framew
156d0 6f 72 6b 53 64 6b 4b 65 79 4e 61 6d 65 20 3d 0d  orkSdkKeyName =.
156e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 53 6f  .            "So
156f0 66 74 77 61 72 65 5c 5c 4d 69 63 72 6f 73 6f 66  ftware\\Microsof
15700 74 5c 5c 4d 69 63 72 6f 73 6f 66 74 20 53 44 4b  t\\Microsoft SDK
15710 73 5c 5c 2e 4e 45 54 46 72 61 6d 65 77 6f 72 6b  s\\.NETFramework
15720 22 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ";....        //
15730 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15740 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15750 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15760 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15770 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
15780 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
15790 72 65 61 64 6f 6e 6c 79 20 73 74 72 69 6e 67 20  readonly string 
157a0 57 69 6e 64 6f 77 73 53 64 6b 4b 65 79 4e 61 6d  WindowsSdkKeyNam
157b0 65 20 3d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e =..           
157c0 20 22 53 6f 66 74 77 61 72 65 5c 5c 4d 69 63 72   "Software\\Micr
157d0 6f 73 6f 66 74 5c 5c 4d 69 63 72 6f 73 6f 66 74  osoft\\Microsoft
157e0 20 53 44 4b 73 5c 5c 57 69 6e 64 6f 77 73 22 3b   SDKs\\Windows";
157f0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f  ////////////////
15820 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15830 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15840 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70  ///....        p
15850 72 69 76 61 74 65 20 73 74 61 74 69 63 20 72 65  rivate static re
15860 61 64 6f 6e 6c 79 20 73 74 72 69 6e 67 20 58 50  adonly string XP
15870 61 74 68 46 6f 72 41 64 64 45 6c 65 6d 65 6e 74  athForAddElement
15880 20 3d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   =..            
15890 22 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2f 73  "configuration/s
158a0 79 73 74 65 6d 2e 64 61 74 61 2f 44 62 50 72 6f  ystem.data/DbPro
158b0 76 69 64 65 72 46 61 63 74 6f 72 69 65 73 2f 61  viderFactories/a
158c0 64 64 5b 40 69 6e 76 61 72 69 61 6e 74 3d 5c 22  dd[@invariant=\"
158d0 7b 30 7d 5c 22 5d 22 3b 0d 0a 0d 0a 20 20 20 20  {0}\"]";....    
158e0 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74      private stat
158f0 69 63 20 72 65 61 64 6f 6e 6c 79 20 73 74 72 69  ic readonly stri
15900 6e 67 20 58 50 61 74 68 46 6f 72 52 65 6d 6f 76  ng XPathForRemov
15910 65 45 6c 65 6d 65 6e 74 20 3d 0d 0a 20 20 20 20  eElement =..    
15920 20 20 20 20 20 20 20 20 22 63 6f 6e 66 69 67 75          "configu
15930 72 61 74 69 6f 6e 2f 73 79 73 74 65 6d 2e 64 61  ration/system.da
15940 74 61 2f 44 62 50 72 6f 76 69 64 65 72 46 61 63  ta/DbProviderFac
15950 74 6f 72 69 65 73 2f 72 65 6d 6f 76 65 5b 40 69  tories/remove[@i
15960 6e 76 61 72 69 61 6e 74 3d 5c 22 7b 30 7d 5c 22  nvariant=\"{0}\"
15970 5d 22 3b 0d 0a 20 20 20 20 20 20 20 20 23 65 6e  ]";..        #en
15980 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
15990 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
159a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
159b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
159c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
159d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
159e0 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 72        #region Pr
159f0 69 76 61 74 65 20 44 61 74 61 0d 0a 20 20 20 20  ivate Data..    
15a00 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74      private stat
15a10 69 63 20 41 73 73 65 6d 62 6c 79 20 74 68 69 73  ic Assembly this
15a20 41 73 73 65 6d 62 6c 79 20 3d 20 41 73 73 65 6d  Assembly = Assem
15a30 62 6c 79 2e 47 65 74 45 78 65 63 75 74 69 6e 67  bly.GetExecuting
15a40 41 73 73 65 6d 62 6c 79 28 29 3b 0d 0a 0d 0a 20  Assembly();.... 
15a50 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
15a60 74 61 74 69 63 20 73 74 72 69 6e 67 20 74 72 61  tatic string tra
15a70 63 65 43 61 74 65 67 6f 72 79 20 3d 20 50 61 74  ceCategory = Pat
15a80 68 2e 47 65 74 46 69 6c 65 4e 61 6d 65 28 0d 0a  h.GetFileName(..
15a90 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73              this
15aa0 41 73 73 65 6d 62 6c 79 2e 4c 6f 63 61 74 69 6f  Assembly.Locatio
15ab0 6e 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70  n);....        p
15ac0 72 69 76 61 74 65 20 73 74 61 74 69 63 20 54 72  rivate static Tr
15ad0 61 63 65 43 61 6c 6c 62 61 63 6b 20 74 72 61 63  aceCallback trac
15ae0 65 43 61 6c 6c 62 61 63 6b 20 3d 20 41 70 70 54  eCallback = AppT
15af0 72 61 63 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  race;....       
15b00 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
15b10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15b20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15b30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15b40 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
15b50 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74      private stat
15b60 69 63 20 52 65 67 69 73 74 72 79 4b 65 79 20 66  ic RegistryKey f
15b70 72 61 6d 65 77 6f 72 6b 52 6f 6f 74 4b 65 79 3b  rameworkRootKey;
15b80 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
15b90 65 20 73 74 61 74 69 63 20 53 74 72 69 6e 67 4c  e static StringL
15ba0 69 73 74 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d  ist frameworkNam
15bb0 65 4c 69 73 74 3b 0d 0a 20 20 20 20 20 20 20 20  eList;..        
15bc0 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 56  private static V
15bd0 65 72 73 69 6f 6e 4d 61 70 20 66 72 61 6d 65 77  ersionMap framew
15be0 6f 72 6b 56 65 72 73 69 6f 6e 4d 61 70 3b 0d 0a  orkVersionMap;..
15bf0 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
15c00 73 74 61 74 69 63 20 53 74 72 69 6e 67 4c 69 73  static StringLis
15c10 74 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 4c 69  t platformNameLi
15c20 73 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  st;....        /
15c30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15c40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15c50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15c60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15c70 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
15c80 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
15c90 20 52 65 67 69 73 74 72 79 4b 65 79 20 76 73 52   RegistryKey vsR
15ca0 6f 6f 74 4b 65 79 3b 0d 0a 20 20 20 20 20 20 20  ootKey;..       
15cb0 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
15cc0 56 65 72 73 69 6f 6e 4c 69 73 74 20 76 73 56 65  VersionList vsVe
15cd0 72 73 69 6f 6e 4c 69 73 74 3b 0d 0a 20 20 20 20  rsionList;..    
15ce0 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74      private stat
15cf0 69 63 20 47 75 69 64 3f 20 76 73 50 61 63 6b 61  ic Guid? vsPacka
15d00 67 65 49 64 3b 0d 0a 20 20 20 20 20 20 20 20 70  geId;..        p
15d10 72 69 76 61 74 65 20 73 74 61 74 69 63 20 47 75  rivate static Gu
15d20 69 64 3f 20 76 73 53 65 72 76 69 63 65 49 64 3b  id? vsServiceId;
15d30 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
15d40 65 20 73 74 61 74 69 63 20 47 75 69 64 3f 20 76  e static Guid? v
15d50 73 44 61 74 61 53 6f 75 72 63 65 73 49 64 3b 0d  sDataSourcesId;.
15d60 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
15d70 20 73 74 61 74 69 63 20 47 75 69 64 3f 20 76 73   static Guid? vs
15d80 44 61 74 61 50 72 6f 76 69 64 65 72 49 64 3b 0d  DataProviderId;.
15d90 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
15da0 20 73 74 61 74 69 63 20 47 75 69 64 3f 20 76 73   static Guid? vs
15db0 41 64 6f 4e 65 74 54 65 63 68 6e 6f 6c 6f 67 79  AdoNetTechnology
15dc0 49 64 3b 0d 0a 20 20 20 20 20 20 20 20 23 65 6e  Id;..        #en
15dd0 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
15de0 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
15df0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15e00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15e10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15e20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
15e30 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 54 72        #region Tr
15e40 61 63 65 20 48 61 6e 64 6c 69 6e 67 0d 0a 20 20  ace Handling..  
15e50 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
15e60 61 74 69 63 20 73 74 72 69 6e 67 20 47 65 74 4c  atic string GetL
15e70 6f 67 46 69 6c 65 4e 61 6d 65 28 29 0d 0a 20 20  ogFileName()..  
15e80 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
15e90 20 20 20 20 20 73 74 72 69 6e 67 20 72 65 73 75       string resu
15ea0 6c 74 20 3d 20 50 61 74 68 2e 47 65 74 54 65 6d  lt = Path.GetTem
15eb0 70 46 69 6c 65 4e 61 6d 65 28 29 3b 20 2f 2a 20  pFileName(); /* 
15ec0 74 68 72 6f 77 20 2a 2f 0d 0a 0d 0a 20 20 20 20  throw */....    
15ed0 20 20 20 20 20 20 20 20 46 69 6c 65 2e 4d 6f 76          File.Mov
15ee0 65 28 72 65 73 75 6c 74 2c 20 72 65 73 75 6c 74  e(result, result
15ef0 20 2b 20 4c 6f 67 46 69 6c 65 53 75 66 66 69 78   + LogFileSuffix
15f00 29 3b 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a  ); /* throw */..
15f10 20 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75              resu
15f20 6c 74 20 2b 3d 20 4c 6f 67 46 69 6c 65 53 75 66  lt += LogFileSuf
15f30 66 69 78 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  fix;....        
15f40 20 20 20 20 72 65 74 75 72 6e 20 72 65 73 75 6c      return resul
15f50 74 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d  t;..        }...
15f60 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
15f70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15f80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15f90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15fa0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15fb0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  ....        priv
15fc0 61 74 65 20 73 74 61 74 69 63 20 76 6f 69 64 20  ate static void 
15fd0 41 70 70 54 72 61 63 65 28 0d 0a 20 20 20 20 20  AppTrace(..     
15fe0 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6d 65         string me
15ff0 73 73 61 67 65 2c 0d 0a 20 20 20 20 20 20 20 20  ssage,..        
16000 20 20 20 20 73 74 72 69 6e 67 20 63 61 74 65 67      string categ
16010 6f 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ory..           
16020 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20   )..        {.. 
16030 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
16040 4f 70 73 2e 54 72 61 63 65 43 6f 72 65 28 53 74  Ops.TraceCore(St
16050 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
16060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
16070 61 63 65 4f 70 73 2e 54 72 61 63 65 46 6f 72 6d  aceOps.TraceForm
16080 61 74 2c 20 54 72 61 63 65 4f 70 73 2e 4e 65 78  at, TraceOps.Nex
16090 74 49 64 28 29 2c 0d 0a 20 20 20 20 20 20 20 20  tId(),..        
160a0 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73          TraceOps
160b0 2e 54 69 6d 65 53 74 61 6d 70 28 44 61 74 65 54  .TimeStamp(DateT
160c0 69 6d 65 2e 55 74 63 4e 6f 77 29 2c 20 6d 65 73  ime.UtcNow), mes
160d0 73 61 67 65 29 2c 20 63 61 74 65 67 6f 72 79 29  sage), category)
160e0 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  ;..        }..  
160f0 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
16100 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
16110 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16120 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16130 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23  ///....        #
16160 72 65 67 69 6f 6e 20 47 65 6e 65 72 69 63 20 53  region Generic S
16170 74 72 69 6e 67 20 48 61 6e 64 6c 69 6e 67 0d 0a  tring Handling..
16180 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
16190 73 74 61 74 69 63 20 73 74 72 69 6e 67 20 46 6f  static string Fo
161a0 72 44 69 73 70 6c 61 79 28 0d 0a 20 20 20 20 20  rDisplay(..     
161b0 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 76 61         object va
161c0 6c 75 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  lue..           
161d0 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20   )..        {.. 
161e0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76             if (v
161f0 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  alue == null).. 
16200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
16210 65 74 75 72 6e 20 22 3c 6e 75 6c 6c 3e 22 3b 0d  eturn "<null>";.
16220 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  ...            s
16230 74 72 69 6e 67 20 72 65 73 75 6c 74 3b 0d 0a 20  tring result;.. 
16240 20 20 20 20 20 20 20 20 20 20 20 54 79 70 65 20             Type 
16250 74 79 70 65 20 3d 20 76 61 6c 75 65 2e 47 65 74  type = value.Get
16260 54 79 70 65 28 29 3b 0d 0a 0d 0a 20 20 20 20 20  Type();....     
16270 20 20 20 20 20 20 20 69 66 20 28 74 79 70 65 20         if (type 
16280 3d 3d 20 74 79 70 65 6f 66 28 58 6d 6c 45 6c 65  == typeof(XmlEle
16290 6d 65 6e 74 29 29 0d 0a 20 20 20 20 20 20 20 20  ment))..        
162a0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
162b0 20 20 20 20 20 20 20 58 6d 6c 45 6c 65 6d 65 6e         XmlElemen
162c0 74 20 65 6c 65 6d 65 6e 74 20 3d 20 28 58 6d 6c  t element = (Xml
162d0 45 6c 65 6d 65 6e 74 29 76 61 6c 75 65 3b 0d 0a  Element)value;..
162e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
162f0 20 20 72 65 73 75 6c 74 20 3d 20 65 6c 65 6d 65    result = eleme
16300 6e 74 2e 4f 75 74 65 72 58 6d 6c 3b 0d 0a 20 20  nt.OuterXml;..  
16310 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
16320 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66           else if
16330 20 28 74 79 70 65 20 3d 3d 20 74 79 70 65 6f 66   (type == typeof
16340 28 56 65 72 73 69 6f 6e 29 29 0d 0a 20 20 20 20  (Version))..    
16350 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
16360 20 20 20 20 20 20 20 20 20 20 20 56 65 72 73 69             Versi
16370 6f 6e 20 76 65 72 73 69 6f 6e 20 3d 20 28 56 65  on version = (Ve
16380 72 73 69 6f 6e 29 76 61 6c 75 65 3b 0d 0a 0d 0a  rsion)value;....
16390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
163a0 72 65 73 75 6c 74 20 3d 20 53 74 72 69 6e 67 2e  result = String.
163b0 46 6f 72 6d 61 74 28 22 76 7b 30 7d 22 2c 20 76  Format("v{0}", v
163c0 65 72 73 69 6f 6e 29 3b 0d 0a 20 20 20 20 20 20  ersion);..      
163d0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
163e0 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20       else..     
163f0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
16400 20 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74            result
16410 20 3d 20 76 61 6c 75 65 2e 54 6f 53 74 72 69 6e   = value.ToStrin
16420 67 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  g();....        
16430 20 20 20 20 20 20 20 20 69 66 20 28 72 65 73 75          if (resu
16440 6c 74 2e 4c 65 6e 67 74 68 20 3d 3d 20 30 29 0d  lt.Length == 0).
16450 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
16460 20 20 20 20 20 72 65 74 75 72 6e 20 22 3c 65 6d       return "<em
16470 70 74 79 3e 22 3b 0d 0a 0d 0a 20 20 20 20 20 20  pty>";....      
16480 20 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74            result
16490 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74   = String.Format
164a0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
164b0 20 20 20 20 20 20 20 74 79 70 65 2e 49 73 53 75         type.IsSu
164c0 62 63 6c 61 73 73 4f 66 28 74 79 70 65 6f 66 28  bclassOf(typeof(
164d0 56 61 6c 75 65 54 79 70 65 29 29 20 3f 20 22 7b  ValueType)) ? "{
164e0 30 7d 22 20 3a 20 22 5c 22 7b 30 7d 5c 22 22 2c  0}" : "\"{0}\"",
164f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
16500 20 20 20 20 20 20 72 65 73 75 6c 74 29 3b 0d 0a        result);..
16510 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
16520 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
16530 75 72 6e 20 72 65 73 75 6c 74 3b 0d 0a 20 20 20  urn result;..   
16540 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
16550 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
16560 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
16570 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16580 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16590 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
165a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
165b0 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e  .        #region
165c0 20 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b 20   .NET Framework 
165d0 48 61 6e 64 6c 69 6e 67 0d 0a 20 20 20 20 20 20  Handling..      
165e0 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
165f0 20 73 74 72 69 6e 67 20 47 65 74 46 72 61 6d 65   string GetFrame
16600 77 6f 72 6b 44 69 72 65 63 74 6f 72 79 28 0d 0a  workDirectory(..
16610 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69              Regi
16620 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c  stryKey rootKey,
16630 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 56 65  ..            Ve
16640 72 73 69 6f 6e 20 66 72 61 6d 65 77 6f 72 6b 56  rsion frameworkV
16650 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20  ersion,..       
16660 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66       bool whatIf
16670 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
16680 6f 6f 6c 20 76 65 72 62 6f 73 65 0d 0a 20 20 20  ool verbose..   
16690 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
166a0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
166b0 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65     using (MockRe
166c0 67 69 73 74 72 79 4b 65 79 20 6b 65 79 20 3d 20  gistryKey key = 
166d0 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 4f  RegistryHelper.O
166e0 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20  penSubKey(..    
166f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16700 72 6f 6f 74 4b 65 79 2c 20 46 72 61 6d 65 77 6f  rootKey, Framewo
16710 72 6b 4b 65 79 4e 61 6d 65 2c 20 66 61 6c 73 65  rkKeyName, false
16720 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73  , whatIf, verbos
16730 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e))..           
16740 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
16750 20 20 20 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e      if (key == n
16760 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
16770 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
16780 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20   null;....      
16790 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74            object
167a0 20 76 61 6c 75 65 20 3d 20 52 65 67 69 73 74 72   value = Registr
167b0 79 48 65 6c 70 65 72 2e 47 65 74 56 61 6c 75 65  yHelper.GetValue
167c0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
167d0 20 20 20 20 20 20 20 6b 65 79 2c 20 22 49 6e 73         key, "Ins
167e0 74 61 6c 6c 52 6f 6f 74 22 2c 20 6e 75 6c 6c 2c  tallRoot", null,
167f0 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65   whatIf, verbose
16800 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
16810 20 20 20 20 20 20 69 66 20 28 21 28 76 61 6c 75        if (!(valu
16820 65 20 69 73 20 73 74 72 69 6e 67 29 29 0d 0a 20  e is string)).. 
16830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16840 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d     return null;.
16850 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
16860 20 20 20 72 65 74 75 72 6e 20 50 61 74 68 2e 43     return Path.C
16870 6f 6d 62 69 6e 65 28 0d 0a 20 20 20 20 20 20 20  ombine(..       
16880 20 20 20 20 20 20 20 20 20 20 20 20 20 28 73 74               (st
16890 72 69 6e 67 29 76 61 6c 75 65 2c 20 53 74 72 69  ring)value, Stri
168a0 6e 67 2e 46 6f 72 6d 61 74 28 22 76 7b 30 7d 22  ng.Format("v{0}"
168b0 2c 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69  , frameworkVersi
168c0 6f 6e 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  on));..         
168d0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d     }..        }.
168e0 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
168f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16900 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16910 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16920 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16930 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72  //....        pr
16940 69 76 61 74 65 20 73 74 61 74 69 63 20 73 74 72  ivate static str
16950 69 6e 67 20 47 65 74 53 64 6b 42 69 6e 61 72 79  ing GetSdkBinary
16960 46 69 6c 65 4e 61 6d 65 28 0d 0a 20 20 20 20 20  FileName(..     
16970 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79 4b         RegistryK
16980 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20  ey rootKey,..   
16990 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
169a0 66 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20  fileName,..     
169b0 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74         bool what
169c0 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  If,..           
169d0 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 0d 0a 20   bool verbose.. 
169e0 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
169f0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
16a00 20 20 20 20 20 53 74 72 69 6e 67 44 69 63 74 69       StringDicti
16a10 6f 6e 61 72 79 20 72 65 73 75 6c 74 73 20 3d 20  onary results = 
16a20 6e 65 77 20 53 74 72 69 6e 67 44 69 63 74 69 6f  new StringDictio
16a30 6e 61 72 79 28 29 3b 0d 0a 0d 0a 20 20 20 20 20  nary();....     
16a40 20 20 20 20 20 20 20 73 74 72 69 6e 67 5b 5d 20         string[] 
16a50 6b 65 79 4e 61 6d 65 73 20 3d 20 7b 0d 0a 20 20  keyNames = {..  
16a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46 72                Fr
16a70 61 6d 65 77 6f 72 6b 4b 65 79 4e 61 6d 65 2c 0d  ameworkKeyName,.
16a80 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
16a90 20 46 72 61 6d 65 77 6f 72 6b 53 64 6b 4b 65 79   FrameworkSdkKey
16aa0 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  Name,..         
16ab0 20 20 20 20 20 20 20 57 69 6e 64 6f 77 73 53 64         WindowsSd
16ac0 6b 4b 65 79 4e 61 6d 65 0d 0a 20 20 20 20 20 20  kKeyName..      
16ad0 20 20 20 20 20 20 7d 3b 0d 0a 0d 0a 20 20 20 20        };....    
16ae0 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 5b 5d          string[]
16af0 20 76 61 6c 75 65 4e 61 6d 65 73 20 3d 20 7b 0d   valueNames = {.
16b00 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
16b10 20 22 73 64 6b 49 6e 73 74 61 6c 6c 52 6f 6f 74   "sdkInstallRoot
16b20 76 32 2e 30 22 2c 0d 0a 20 20 20 20 20 20 20 20  v2.0",..        
16b30 20 20 20 20 20 20 20 20 22 49 6e 73 74 61 6c 6c          "Install
16b40 61 74 69 6f 6e 46 6f 6c 64 65 72 22 2c 0d 0a 20  ationFolder",.. 
16b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
16b60 49 6e 73 74 61 6c 6c 61 74 69 6f 6e 46 6f 6c 64  InstallationFold
16b70 65 72 22 0d 0a 20 20 20 20 20 20 20 20 20 20 20  er"..           
16b80 20 7d 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20   };....         
16b90 20 20 20 62 6f 6f 6c 5b 5d 20 75 73 65 53 75 62     bool[] useSub
16ba0 4b 65 79 73 20 3d 20 7b 0d 0a 20 20 20 20 20 20  Keys = {..      
16bb0 20 20 20 20 20 20 20 20 20 20 66 61 6c 73 65 2c            false,
16bc0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
16bd0 20 20 74 72 75 65 2c 0d 0a 20 20 20 20 20 20 20    true,..       
16be0 20 20 20 20 20 20 20 20 20 74 72 75 65 0d 0a 20           true.. 
16bf0 20 20 20 20 20 20 20 20 20 20 20 7d 3b 0d 0a 0d             };...
16c00 0a 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72  .            for
16c10 20 28 69 6e 74 20 69 6e 64 65 78 20 3d 20 30 3b   (int index = 0;
16c20 20 69 6e 64 65 78 20 3c 20 6b 65 79 4e 61 6d 65   index < keyName
16c30 73 2e 4c 65 6e 67 74 68 3b 20 69 6e 64 65 78 2b  s.Length; index+
16c40 2b 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  +)..            
16c50 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
16c60 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65     using (MockRe
16c70 67 69 73 74 72 79 4b 65 79 20 6b 65 79 20 3d 20  gistryKey key = 
16c80 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 4f  RegistryHelper.O
16c90 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20  penSubKey(..    
16ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16cb0 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 6b 65 79      rootKey, key
16cc0 4e 61 6d 65 73 5b 69 6e 64 65 78 5d 2c 20 66 61  Names[index], fa
16cd0 6c 73 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72  lse, whatIf, ver
16ce0 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20  bose))..        
16cf0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
16d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
16d10 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d  f (key == null).
16d20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
16d30 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75           continu
16d40 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
16d50 20 20 20 20 20 20 20 20 20 20 69 66 20 28 75 73            if (us
16d60 65 53 75 62 4b 65 79 73 5b 69 6e 64 65 78 5d 29  eSubKeys[index])
16d70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
16d80 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
16d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16da0 20 66 6f 72 65 61 63 68 20 28 73 74 72 69 6e 67   foreach (string
16db0 20 73 75 62 4b 65 79 4e 61 6d 65 20 69 6e 20 52   subKeyName in R
16dc0 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 47 65  egistryHelper.Ge
16dd0 74 53 75 62 4b 65 79 4e 61 6d 65 73 28 0d 0a 20  tSubKeyNames(.. 
16de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b                 k
16e00 65 79 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62  ey, whatIf, verb
16e10 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ose))..         
16e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
16e30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
16e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 75 73                us
16e50 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72  ing (MockRegistr
16e60 79 4b 65 79 20 73 75 62 4b 65 79 20 3d 20 52 65  yKey subKey = Re
16e70 67 69 73 74 72 79 48 65 6c 70 65 72 2e 4f 70 65  gistryHelper.Ope
16e80 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20  nSubKey(..      
16e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65                ke
16eb0 79 2c 20 73 75 62 4b 65 79 4e 61 6d 65 2c 20 66  y, subKeyName, f
16ec0 61 6c 73 65 2c 20 77 68 61 74 49 66 2c 20 76 65  alse, whatIf, ve
16ed0 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20  rbose))..       
16ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16ef0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
16f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16f10 20 20 20 20 20 20 20 20 69 66 20 28 73 75 62 4b          if (subK
16f20 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ey == null)..   
16f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16f50 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 0d 0a 20 20   continue;....  
16f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f 62                ob
16f80 6a 65 63 74 20 76 61 6c 75 65 20 3d 20 52 65 67  ject value = Reg
16f90 69 73 74 72 79 48 65 6c 70 65 72 2e 47 65 74 56  istryHelper.GetV
16fa0 61 6c 75 65 28 0d 0a 20 20 20 20 20 20 20 20 20  alue(..         
16fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16fc0 20 20 20 20 20 20 20 20 20 20 20 73 75 62 4b 65             subKe
16fd0 79 2c 20 76 61 6c 75 65 4e 61 6d 65 73 5b 69 6e  y, valueNames[in
16fe0 64 65 78 5d 2c 20 6e 75 6c 6c 2c 20 77 68 61 74  dex], null, what
16ff0 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  If,..           
17000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17010 20 20 20 20 20 20 20 20 20 76 65 72 62 6f 73 65           verbose
17020 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
17030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17040 20 20 20 20 20 20 69 66 20 28 21 28 76 61 6c 75        if (!(valu
17050 65 20 69 73 20 73 74 72 69 6e 67 29 29 0d 0a 20  e is string)).. 
17060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17080 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 0d 0a     continue;....
17090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
170a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
170b0 73 74 72 69 6e 67 20 70 61 74 68 20 3d 20 28 73  string path = (s
170c0 74 72 69 6e 67 29 76 61 6c 75 65 3b 0d 0a 0d 0a  tring)value;....
170d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
170e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
170f0 69 66 20 28 21 44 69 72 65 63 74 6f 72 79 2e 45  if (!Directory.E
17100 78 69 73 74 73 28 70 61 74 68 29 29 0d 0a 20 20  xists(path))..  
17110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17130 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 0d 0a 20    continue;.... 
17140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70                 p
17160 61 74 68 20 3d 20 50 61 74 68 2e 43 6f 6d 62 69  ath = Path.Combi
17170 6e 65 28 70 61 74 68 2c 20 22 62 69 6e 22 29 3b  ne(path, "bin");
17180 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
17190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
171a0 20 20 20 20 69 66 20 28 21 44 69 72 65 63 74 6f      if (!Directo
171b0 72 79 2e 45 78 69 73 74 73 28 70 61 74 68 29 29  ry.Exists(path))
171c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
171d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
171e0 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d        continue;.
171f0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
17200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17210 20 20 20 69 66 20 28 53 74 72 69 6e 67 2e 49 73     if (String.Is
17220 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 66 69 6c 65  NullOrEmpty(file
17230 4e 61 6d 65 29 29 0d 0a 20 20 20 20 20 20 20 20  Name))..        
17240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17250 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
17260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
17280 65 73 75 6c 74 73 2e 41 64 64 28 73 75 62 4b 65  esults.Add(subKe
17290 79 2e 4e 61 6d 65 2c 20 70 61 74 68 29 3b 0d 0a  y.Name, path);..
172a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
172b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
172c0 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20      continue;.. 
172d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
172e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
172f0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
17300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17310 20 20 20 20 70 61 74 68 20 3d 20 50 61 74 68 2e      path = Path.
17320 43 6f 6d 62 69 6e 65 28 70 61 74 68 2c 20 66 69  Combine(path, fi
17330 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20  leName);....    
17340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17350 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
17360 46 69 6c 65 2e 45 78 69 73 74 73 28 70 61 74 68  File.Exists(path
17370 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
17380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17390 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 73 2e          results.
173a0 41 64 64 28 73 75 62 4b 65 79 2e 4e 61 6d 65 2c  Add(subKey.Name,
173b0 20 70 61 74 68 29 3b 0d 0a 20 20 20 20 20 20 20   path);..       
173c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
173d0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
173e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
173f0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
17400 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
17410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c                el
17420 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  se..            
17430 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
17440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17450 20 20 20 6f 62 6a 65 63 74 20 76 61 6c 75 65 20     object value 
17460 3d 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72  = RegistryHelper
17470 2e 47 65 74 56 61 6c 75 65 28 0d 0a 20 20 20 20  .GetValue(..    
17480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17490 20 20 20 20 20 20 20 20 6b 65 79 2c 20 76 61 6c          key, val
174a0 75 65 4e 61 6d 65 73 5b 69 6e 64 65 78 5d 2c 20  ueNames[index], 
174b0 6e 75 6c 6c 2c 20 77 68 61 74 49 66 2c 20 76 65  null, whatIf, ve
174c0 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  rbose);....     
174d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
174e0 20 20 20 69 66 20 28 21 28 76 61 6c 75 65 20 69     if (!(value i
174f0 73 20 73 74 72 69 6e 67 29 29 0d 0a 20 20 20 20  s string))..    
17500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17510 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65          continue
17520 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
17530 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72               str
17540 69 6e 67 20 70 61 74 68 20 3d 20 28 73 74 72 69  ing path = (stri
17550 6e 67 29 76 61 6c 75 65 3b 0d 0a 0d 0a 20 20 20  ng)value;....   
17560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17570 20 20 20 20 20 69 66 20 28 21 44 69 72 65 63 74       if (!Direct
17580 6f 72 79 2e 45 78 69 73 74 73 28 70 61 74 68 29  ory.Exists(path)
17590 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
175a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
175b0 6f 6e 74 69 6e 75 65 3b 0d 0a 0d 0a 20 20 20 20  ontinue;....    
175c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
175d0 20 20 20 20 70 61 74 68 20 3d 20 50 61 74 68 2e      path = Path.
175e0 43 6f 6d 62 69 6e 65 28 70 61 74 68 2c 20 22 62  Combine(path, "b
175f0 69 6e 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  in");....       
17600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17610 20 69 66 20 28 21 44 69 72 65 63 74 6f 72 79 2e   if (!Directory.
17620 45 78 69 73 74 73 28 70 61 74 68 29 29 0d 0a 20  Exists(path)).. 
17630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17640 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69             conti
17650 6e 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  nue;....        
17660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17670 69 66 20 28 53 74 72 69 6e 67 2e 49 73 4e 75 6c  if (String.IsNul
17680 6c 4f 72 45 6d 70 74 79 28 66 69 6c 65 4e 61 6d  lOrEmpty(fileNam
17690 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e))..           
176a0 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
176b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
176c0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75              resu
176d0 6c 74 73 2e 41 64 64 28 6b 65 79 2e 4e 61 6d 65  lts.Add(key.Name
176e0 2c 20 70 61 74 68 29 3b 0d 0a 20 20 20 20 20 20  , path);..      
176f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17700 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d        continue;.
17710 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
17720 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
17730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17740 20 20 20 20 20 20 70 61 74 68 20 3d 20 50 61 74        path = Pat
17750 68 2e 43 6f 6d 62 69 6e 65 28 70 61 74 68 2c 20  h.Combine(path, 
17760 66 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20  fileName);....  
17770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17780 20 20 20 20 20 20 69 66 20 28 46 69 6c 65 2e 45        if (File.E
17790 78 69 73 74 73 28 70 61 74 68 29 29 0d 0a 20 20  xists(path))..  
177a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
177b0 20 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74            result
177c0 73 2e 41 64 64 28 6b 65 79 2e 4e 61 6d 65 2c 20  s.Add(key.Name, 
177d0 70 61 74 68 29 3b 0d 0a 20 20 20 20 20 20 20 20  path);..        
177e0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
177f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
17800 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
17810 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
17820 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  /..            /
17830 2f 20 4e 4f 54 45 3a 20 49 66 20 77 65 20 66 6f  / NOTE: If we fo
17840 75 6e 64 20 73 6f 6d 65 20 72 65 73 75 6c 74 73  und some results
17850 2c 20 72 65 74 75 72 6e 20 74 68 65 20 6c 61 73  , return the las
17860 74 20 28 6c 61 74 65 73 74 29 20 6f 6e 65 2e 0d  t (latest) one..
17870 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d  .            //.
17880 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
17890 28 72 65 73 75 6c 74 73 2e 43 6f 75 6e 74 20 3e  (results.Count >
178a0 20 30 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20   0)..           
178b0 20 20 20 20 20 72 65 74 75 72 6e 20 72 65 73 75       return resu
178c0 6c 74 73 5b 6e 65 77 20 53 74 72 69 6e 67 4c 69  lts[new StringLi
178d0 73 74 28 72 65 73 75 6c 74 73 2e 4b 65 79 73 29  st(results.Keys)
178e0 5b 72 65 73 75 6c 74 73 2e 43 6f 75 6e 74 20 2d  [results.Count -
178f0 20 31 5d 5d 3b 0d 0a 0d 0a 20 20 20 20 20 20 20   1]];....       
17900 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c       return null
17910 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  ;..        }..  
17920 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
17930 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
17940 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17950 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17960 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17970 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17980 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23  ///....        #
17990 72 65 67 69 6f 6e 20 50 65 72 2d 46 72 61 6d 65  region Per-Frame
179a0 77 6f 72 6b 2f 50 6c 61 74 66 6f 72 6d 20 48 61  work/Platform Ha
179b0 6e 64 6c 69 6e 67 0d 0a 20 20 20 20 20 20 20 20  ndling..        
179c0 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 76  private static v
179d0 6f 69 64 20 49 6e 69 74 69 61 6c 69 7a 65 41 6c  oid InitializeAl
179e0 6c 46 72 61 6d 65 77 6f 72 6b 73 28 0d 0a 20 20  lFrameworks(..  
179f0 20 20 20 20 20 20 20 20 20 20 43 6f 6e 66 69 67            Config
17a00 75 72 61 74 69 6f 6e 20 63 6f 6e 66 69 67 75 72  uration configur
17a10 61 74 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 20  ation..         
17a20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d     )..        {.
17a30 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
17a40 28 66 72 61 6d 65 77 6f 72 6b 52 6f 6f 74 4b 65  (frameworkRootKe
17a50 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  y == null)..    
17a60 20 20 20 20 20 20 20 20 20 20 20 20 66 72 61 6d              fram
17a70 65 77 6f 72 6b 52 6f 6f 74 4b 65 79 20 3d 20 52  eworkRootKey = R
17a80 65 67 69 73 74 72 79 2e 4c 6f 63 61 6c 4d 61 63  egistry.LocalMac
17a90 68 69 6e 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  hine;....       
17aa0 20 20 20 20 20 69 66 20 28 66 72 61 6d 65 77 6f       if (framewo
17ab0 72 6b 4e 61 6d 65 4c 69 73 74 20 3d 3d 20 6e 75  rkNameList == nu
17ac0 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
17ad0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
17ae0 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d      frameworkNam
17af0 65 4c 69 73 74 20 3d 20 6e 65 77 20 53 74 72 69  eList = new Stri
17b00 6e 67 4c 69 73 74 28 29 3b 0d 0a 0d 0a 20 20 20  ngList();....   
17b10 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
17b20 28 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20  ((configuration 
17b30 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 21 63 6f 6e  == null) || !con
17b40 66 69 67 75 72 61 74 69 6f 6e 2e 4e 6f 44 65 73  figuration.NoDes
17b50 6b 74 6f 70 29 0d 0a 20 20 20 20 20 20 20 20 20  ktop)..         
17b60 20 20 20 20 20 20 20 20 20 20 20 66 72 61 6d 65             frame
17b70 77 6f 72 6b 4e 61 6d 65 4c 69 73 74 2e 41 64 64  workNameList.Add
17b80 28 22 2e 4e 45 54 46 72 61 6d 65 77 6f 72 6b 22  (".NETFramework"
17b90 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
17ba0 20 20 20 20 20 20 69 66 20 28 28 63 6f 6e 66 69        if ((confi
17bb0 67 75 72 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c  guration == null
17bc0 29 20 7c 7c 20 21 63 6f 6e 66 69 67 75 72 61 74  ) || !configurat
17bd0 69 6f 6e 2e 4e 6f 43 6f 6d 70 61 63 74 29 0d 0a  ion.NoCompact)..
17be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17bf0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
17c00 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b         framework
17c10 4e 61 6d 65 4c 69 73 74 2e 41 64 64 28 22 2e 4e  NameList.Add(".N
17c20 45 54 43 6f 6d 70 61 63 74 46 72 61 6d 65 77 6f  ETCompactFramewo
17c30 72 6b 22 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  rk");..         
17c40 20 20 20 20 20 20 20 20 20 20 20 66 72 61 6d 65             frame
17c50 77 6f 72 6b 4e 61 6d 65 4c 69 73 74 2e 41 64 64  workNameList.Add
17c60 28 22 2e 4e 45 54 43 6f 6d 70 61 63 74 46 72 61  (".NETCompactFra
17c70 6d 65 77 6f 72 6b 22 29 3b 0d 0a 20 20 20 20 20  mework");..     
17c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66                 f
17c90 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 4c 69 73 74  rameworkNameList
17ca0 2e 41 64 64 28 22 2e 4e 45 54 43 6f 6d 70 61 63  .Add(".NETCompac
17cb0 74 46 72 61 6d 65 77 6f 72 6b 22 29 3b 0d 0a 20  tFramework");.. 
17cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
17cd0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
17ce0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
17cf0 66 20 28 66 72 61 6d 65 77 6f 72 6b 56 65 72 73  f (frameworkVers
17d00 69 6f 6e 4d 61 70 20 3d 3d 20 6e 75 6c 6c 29 0d  ionMap == null).
17d10 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
17d20 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f   frameworkVersio
17d30 6e 4d 61 70 20 3d 20 6e 65 77 20 56 65 72 73 69  nMap = new Versi
17d40 6f 6e 4d 61 70 28 29 3b 0d 0a 0d 0a 20 20 20 20  onMap();....    
17d50 20 20 20 20 20 20 20 20 69 66 20 28 28 63 6f 6e          if ((con
17d60 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20 6e 75  figuration == nu
17d70 6c 6c 29 20 7c 7c 20 21 63 6f 6e 66 69 67 75 72  ll) || !configur
17d80 61 74 69 6f 6e 2e 4e 6f 44 65 73 6b 74 6f 70 29  ation.NoDesktop)
17d90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
17da0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
17db0 20 56 65 72 73 69 6f 6e 4c 69 73 74 20 64 65 73   VersionList des
17dc0 6b 74 6f 70 56 65 72 73 69 6f 6e 4c 69 73 74 20  ktopVersionList 
17dd0 3d 20 6e 65 77 20 56 65 72 73 69 6f 6e 4c 69 73  = new VersionLis
17de0 74 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  t();....        
17df0 20 20 20 20 20 20 20 20 69 66 20 28 28 63 6f 6e          if ((con
17e00 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20 6e 75  figuration == nu
17e10 6c 6c 29 20 7c 7c 20 21 63 6f 6e 66 69 67 75 72  ll) || !configur
17e20 61 74 69 6f 6e 2e 4e 6f 4e 65 74 46 78 32 30 29  ation.NoNetFx20)
17e30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
17e40 20 20 20 20 20 20 64 65 73 6b 74 6f 70 56 65 72        desktopVer
17e50 73 69 6f 6e 4c 69 73 74 2e 41 64 64 28 6e 65 77  sionList.Add(new
17e60 20 56 65 72 73 69 6f 6e 28 32 2c 20 30 2c 20 35   Version(2, 0, 5
17e70 30 37 32 37 29 29 3b 0d 0a 0d 0a 20 20 20 20 20  0727));....     
17e80 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 28             if ((
17e90 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d  configuration ==
17ea0 20 6e 75 6c 6c 29 20 7c 7c 20 21 63 6f 6e 66 69   null) || !confi
17eb0 67 75 72 61 74 69 6f 6e 2e 4e 6f 4e 65 74 46 78  guration.NoNetFx
17ec0 34 30 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  40)..           
17ed0 20 20 20 20 20 20 20 20 20 64 65 73 6b 74 6f 70           desktop
17ee0 56 65 72 73 69 6f 6e 4c 69 73 74 2e 41 64 64 28  VersionList.Add(
17ef0 6e 65 77 20 56 65 72 73 69 6f 6e 28 34 2c 20 30  new Version(4, 0
17f00 2c 20 33 30 33 31 39 29 29 3b 0d 0a 0d 0a 20 20  , 30319));....  
17f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 72                fr
17f20 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 4d 61  ameworkVersionMa
17f30 70 2e 41 64 64 28 22 2e 4e 45 54 46 72 61 6d 65  p.Add(".NETFrame
17f40 77 6f 72 6b 22 2c 20 64 65 73 6b 74 6f 70 56 65  work", desktopVe
17f50 72 73 69 6f 6e 4c 69 73 74 29 3b 0d 0a 20 20 20  rsionList);..   
17f60 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
17f70 20 20 20 20 20 20 20 20 20 20 69 66 20 28 28 63            if ((c
17f80 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20  onfiguration == 
17f90 6e 75 6c 6c 29 20 7c 7c 20 21 63 6f 6e 66 69 67  null) || !config
17fa0 75 72 61 74 69 6f 6e 2e 4e 6f 43 6f 6d 70 61 63  uration.NoCompac
17fb0 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t)..            
17fc0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
17fd0 20 20 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73     frameworkVers
17fe0 69 6f 6e 4d 61 70 2e 41 64 64 28 22 2e 4e 45 54  ionMap.Add(".NET
17ff0 43 6f 6d 70 61 63 74 46 72 61 6d 65 77 6f 72 6b  CompactFramework
18000 22 2c 20 6e 65 77 20 56 65 72 73 69 6f 6e 4c 69  ", new VersionLi
18010 73 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  st(..           
18020 20 20 20 20 20 20 20 20 20 6e 65 77 20 56 65 72           new Ver
18030 73 69 6f 6e 5b 5d 20 7b 0d 0a 20 20 20 20 20 20  sion[] {..      
18040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 65                ne
18050 77 20 56 65 72 73 69 6f 6e 28 32 2c 20 30 2c 20  w Version(2, 0, 
18060 30 2c 20 30 29 2c 20 6e 65 77 20 56 65 72 73 69  0, 0), new Versi
18070 6f 6e 28 33 2c 20 35 2c 20 30 2c 20 30 29 0d 0a  on(3, 5, 0, 0)..
18080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18090 7d 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  }));..          
180a0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
180b0 20 20 20 69 66 20 28 70 6c 61 74 66 6f 72 6d 4e     if (platformN
180c0 61 6d 65 4c 69 73 74 20 3d 3d 20 6e 75 6c 6c 29  ameList == null)
180d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
180e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
180f0 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 4c 69 73   platformNameLis
18100 74 20 3d 20 6e 65 77 20 53 74 72 69 6e 67 4c 69  t = new StringLi
18110 73 74 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  st();....       
18120 20 20 20 20 20 20 20 20 20 69 66 20 28 28 63 6f           if ((co
18130 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20 6e  nfiguration == n
18140 75 6c 6c 29 20 7c 7c 20 21 63 6f 6e 66 69 67 75  ull) || !configu
18150 72 61 74 69 6f 6e 2e 4e 6f 44 65 73 6b 74 6f 70  ration.NoDesktop
18160 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
18170 20 20 20 20 20 20 20 70 6c 61 74 66 6f 72 6d 4e         platformN
18180 61 6d 65 4c 69 73 74 2e 41 64 64 28 6e 75 6c 6c  ameList.Add(null
18190 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
181a0 20 20 20 20 20 20 69 66 20 28 28 63 6f 6e 66 69        if ((confi
181b0 67 75 72 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c  guration == null
181c0 29 20 7c 7c 20 21 63 6f 6e 66 69 67 75 72 61 74  ) || !configurat
181d0 69 6f 6e 2e 4e 6f 43 6f 6d 70 61 63 74 29 0d 0a  ion.NoCompact)..
181e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
181f0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
18200 20 20 20 20 20 20 20 70 6c 61 74 66 6f 72 6d 4e         platformN
18210 61 6d 65 4c 69 73 74 2e 41 64 64 28 22 50 6f 63  ameList.Add("Poc
18220 6b 65 74 50 43 22 29 3b 0d 0a 20 20 20 20 20 20  ketPC");..      
18230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 6c                pl
18240 61 74 66 6f 72 6d 4e 61 6d 65 4c 69 73 74 2e 41  atformNameList.A
18250 64 64 28 22 53 6d 61 72 74 70 68 6f 6e 65 22 29  dd("Smartphone")
18260 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
18270 20 20 20 20 20 20 20 70 6c 61 74 66 6f 72 6d 4e         platformN
18280 61 6d 65 4c 69 73 74 2e 41 64 64 28 22 57 69 6e  ameList.Add("Win
18290 64 6f 77 73 43 45 22 29 3b 0d 0a 20 20 20 20 20  dowsCE");..     
182a0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
182b0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
182c0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
182d0 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
182e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
182f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18300 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18310 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
18320 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61       private sta
18330 74 69 63 20 62 6f 6f 6c 20 48 61 76 65 46 72 61  tic bool HaveFra
18340 6d 65 77 6f 72 6b 28 0d 0a 20 20 20 20 20 20 20  mework(..       
18350 20 20 20 20 20 52 65 67 69 73 74 72 79 4b 65 79       RegistryKey
18360 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 20 20   rootKey,..     
18370 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 66 72         string fr
18380 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 0d 0a 20 20  ameworkName,..  
18390 20 20 20 20 20 20 20 20 20 20 56 65 72 73 69 6f            Versio
183a0 6e 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69  n frameworkVersi
183b0 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on,..           
183c0 20 73 74 72 69 6e 67 20 70 6c 61 74 66 6f 72 6d   string platform
183d0 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  Name,..         
183e0 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d     bool whatIf,.
183f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
18400 6c 20 76 65 72 62 6f 73 65 0d 0a 20 20 20 20 20  l verbose..     
18410 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
18420 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
18430 20 73 74 72 69 6e 67 20 66 6f 72 6d 61 74 20 3d   string format =
18440 20 21 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f   !String.IsNullO
18450 72 45 6d 70 74 79 28 70 6c 61 74 66 6f 72 6d 4e  rEmpty(platformN
18460 61 6d 65 29 20 3f 0d 0a 20 20 20 20 20 20 20 20  ame) ?..        
18470 20 20 20 20 20 20 20 20 22 53 6f 66 74 77 61 72          "Softwar
18480 65 5c 5c 4d 69 63 72 6f 73 6f 66 74 5c 5c 7b 30  e\\Microsoft\\{0
18490 7d 5c 5c 76 7b 31 7d 5c 5c 7b 32 7d 22 20 3a 0d  }\\v{1}\\{2}" :.
184a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
184b0 20 22 53 6f 66 74 77 61 72 65 5c 5c 4d 69 63 72   "Software\\Micr
184c0 6f 73 6f 66 74 5c 5c 7b 30 7d 5c 5c 76 7b 31 7d  osoft\\{0}\\v{1}
184d0 22 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  ";....          
184e0 20 20 73 74 72 69 6e 67 20 6b 65 79 4e 61 6d 65    string keyName
184f0 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74   = String.Format
18500 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
18510 20 20 20 66 6f 72 6d 61 74 2c 20 66 72 61 6d 65     format, frame
18520 77 6f 72 6b 4e 61 6d 65 2c 20 66 72 61 6d 65 77  workName, framew
18530 6f 72 6b 56 65 72 73 69 6f 6e 2c 20 70 6c 61 74  orkVersion, plat
18540 66 6f 72 6d 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20  formName);....  
18550 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20            using 
18560 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79  (MockRegistryKey
18570 20 6b 65 79 20 3d 20 52 65 67 69 73 74 72 79 48   key = RegistryH
18580 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62 4b 65 79  elper.OpenSubKey
18590 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
185a0 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20         rootKey, 
185b0 6b 65 79 4e 61 6d 65 2c 20 66 61 6c 73 65 2c 20  keyName, false, 
185c0 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29  whatIf, verbose)
185d0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
185e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
185f0 20 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c    if (key == nul
18600 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
18610 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
18620 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  alse;....       
18630 20 20 20 20 20 20 20 20 20 69 66 20 28 70 6c 61           if (pla
18640 74 66 6f 72 6d 4e 61 6d 65 20 21 3d 20 6e 75 6c  tformName != nul
18650 6c 29 20 2f 2f 20 4e 4f 54 45 3a 20 53 6b 69 70  l) // NOTE: Skip
18660 20 6e 6f 6e 2d 64 65 73 6b 74 6f 70 20 66 72 61   non-desktop fra
18670 6d 65 77 6f 72 6b 73 2e 0d 0a 20 20 20 20 20 20  meworks...      
18680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
18690 74 75 72 6e 20 74 72 75 65 3b 0d 0a 0d 0a 20 20  turn true;....  
186a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
186b0 72 69 6e 67 20 64 69 72 65 63 74 6f 72 79 20 3d  ring directory =
186c0 20 47 65 74 46 72 61 6d 65 77 6f 72 6b 44 69 72   GetFrameworkDir
186d0 65 63 74 6f 72 79 28 0d 0a 20 20 20 20 20 20 20  ectory(..       
186e0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f               roo
186f0 74 4b 65 79 2c 20 66 72 61 6d 65 77 6f 72 6b 56  tKey, frameworkV
18700 65 72 73 69 6f 6e 2c 20 77 68 61 74 49 66 2c 20  ersion, whatIf, 
18710 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20  verbose);....   
18720 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
18730 28 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72  (String.IsNullOr
18740 45 6d 70 74 79 28 64 69 72 65 63 74 6f 72 79 29  Empty(directory)
18750 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
18760 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
18770 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  lse;....        
18780 20 20 20 20 20 20 20 20 69 66 20 28 21 44 69 72          if (!Dir
18790 65 63 74 6f 72 79 2e 45 78 69 73 74 73 28 64 69  ectory.Exists(di
187a0 72 65 63 74 6f 72 79 29 29 0d 0a 20 20 20 20 20  rectory))..     
187b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
187c0 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a  eturn false;....
187d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
187e0 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20  return true;..  
187f0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
18800 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
18810 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
18820 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18830 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18840 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18850 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
18860 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61       private sta
18870 74 69 63 20 62 6f 6f 6c 20 46 6f 72 45 61 63 68  tic bool ForEach
18880 46 72 61 6d 65 77 6f 72 6b 43 6f 6e 66 69 67 28  FrameworkConfig(
18890 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 46 72  ..            Fr
188a0 61 6d 65 77 6f 72 6b 43 6f 6e 66 69 67 43 61 6c  ameworkConfigCal
188b0 6c 62 61 63 6b 20 63 61 6c 6c 62 61 63 6b 2c 0d  lback callback,.
188c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72  .            str
188d0 69 6e 67 20 69 6e 76 61 72 69 61 6e 74 2c 0d 0a  ing invariant,..
188e0 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
188f0 6e 67 20 6e 61 6d 65 2c 0d 0a 20 20 20 20 20 20  ng name,..      
18900 20 20 20 20 20 20 73 74 72 69 6e 67 20 64 65 73        string des
18910 63 72 69 70 74 69 6f 6e 2c 0d 0a 20 20 20 20 20  cription,..     
18920 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 74 79         string ty
18930 70 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20  peName,..       
18940 20 20 20 20 20 41 73 73 65 6d 62 6c 79 4e 61 6d       AssemblyNam
18950 65 20 61 73 73 65 6d 62 6c 79 4e 61 6d 65 2c 0d  e assemblyName,.
18960 0a 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a  .            obj
18970 65 63 74 20 63 6c 69 65 6e 74 44 61 74 61 2c 0d  ect clientData,.
18980 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
18990 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20  l whatIf,..     
189a0 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62         bool verb
189b0 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ose,..          
189c0 20 20 72 65 66 20 62 6f 6f 6c 20 73 61 76 65 64    ref bool saved
189d0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ,..            r
189e0 65 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72 0d  ef string error.
189f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a  .            )..
18a00 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
18a10 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79 4b         RegistryK
18a20 65 79 20 72 6f 6f 74 4b 65 79 20 3d 20 66 72 61  ey rootKey = fra
18a30 6d 65 77 6f 72 6b 52 6f 6f 74 4b 65 79 3b 0d 0a  meworkRootKey;..
18a40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
18a50 20 28 72 6f 6f 74 4b 65 79 20 3d 3d 20 6e 75 6c   (rootKey == nul
18a60 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
18a70 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
18a80 20 20 20 65 72 72 6f 72 20 3d 20 22 69 6e 76 61     error = "inva
18a90 6c 69 64 20 72 6f 6f 74 20 6b 65 79 22 3b 0d 0a  lid root key";..
18aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18ab0 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20  return false;.. 
18ac0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
18ad0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
18ae0 21 4f 62 6a 65 63 74 2e 52 65 66 65 72 65 6e 63  !Object.Referenc
18af0 65 45 71 75 61 6c 73 28 72 6f 6f 74 4b 65 79 2c  eEquals(rootKey,
18b00 20 52 65 67 69 73 74 72 79 2e 43 75 72 72 65 6e   Registry.Curren
18b10 74 55 73 65 72 29 20 26 26 0d 0a 20 20 20 20 20  tUser) &&..     
18b20 20 20 20 20 20 20 20 20 20 20 20 21 4f 62 6a 65             !Obje
18b30 63 74 2e 52 65 66 65 72 65 6e 63 65 45 71 75 61  ct.ReferenceEqua
18b40 6c 73 28 72 6f 6f 74 4b 65 79 2c 20 52 65 67 69  ls(rootKey, Regi
18b50 73 74 72 79 2e 4c 6f 63 61 6c 4d 61 63 68 69 6e  stry.LocalMachin
18b60 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e))..           
18b70 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
18b80 20 20 20 20 65 72 72 6f 72 20 3d 20 22 72 6f 6f      error = "roo
18b90 74 20 6b 65 79 20 6d 75 73 74 20 62 65 20 70 65  t key must be pe
18ba0 72 2d 75 73 65 72 20 6f 72 20 70 65 72 2d 6d 61  r-user or per-ma
18bb0 63 68 69 6e 65 22 3b 0d 0a 20 20 20 20 20 20 20  chine";..       
18bc0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
18bd0 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
18be0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
18bf0 20 20 20 20 20 69 66 20 28 66 72 61 6d 65 77 6f       if (framewo
18c00 72 6b 4e 61 6d 65 4c 69 73 74 20 3d 3d 20 6e 75  rkNameList == nu
18c10 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
18c20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
18c30 20 20 20 20 65 72 72 6f 72 20 3d 20 22 6e 6f 20      error = "no 
18c40 66 72 61 6d 65 77 6f 72 6b 20 6e 61 6d 65 73 20  framework names 
18c50 66 6f 75 6e 64 22 3b 0d 0a 20 20 20 20 20 20 20  found";..       
18c60 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
18c70 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
18c80 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
18c90 20 20 20 20 20 69 66 20 28 66 72 61 6d 65 77 6f       if (framewo
18ca0 72 6b 56 65 72 73 69 6f 6e 4d 61 70 20 3d 3d 20  rkVersionMap == 
18cb0 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
18cc0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
18cd0 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 6e        error = "n
18ce0 6f 20 66 72 61 6d 65 77 6f 72 6b 20 76 65 72 73  o framework vers
18cf0 69 6f 6e 73 20 66 6f 75 6e 64 22 3b 0d 0a 20 20  ions found";..  
18d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
18d10 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
18d20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
18d30 20 20 20 20 20 20 20 20 20 20 69 66 20 28 70 6c            if (pl
18d40 61 74 66 6f 72 6d 4e 61 6d 65 4c 69 73 74 20 3d  atformNameList =
18d50 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
18d60 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
18d70 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
18d80 22 6e 6f 20 70 6c 61 74 66 6f 72 6d 20 6e 61 6d  "no platform nam
18d90 65 73 20 66 6f 75 6e 64 22 3b 0d 0a 20 20 20 20  es found";..    
18da0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
18db0 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
18dc0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
18dd0 20 20 20 20 20 20 20 20 69 66 20 28 66 72 61 6d          if (fram
18de0 65 77 6f 72 6b 4e 61 6d 65 4c 69 73 74 2e 43 6f  eworkNameList.Co
18df0 75 6e 74 20 21 3d 20 70 6c 61 74 66 6f 72 6d 4e  unt != platformN
18e00 61 6d 65 4c 69 73 74 2e 43 6f 75 6e 74 29 0d 0a  ameList.Count)..
18e10 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
18e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
18e30 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f  rror = String.Fo
18e40 72 6d 61 74 28 22 66 72 61 6d 65 77 6f 72 6b 20  rmat("framework 
18e50 6e 61 6d 65 20 63 6f 75 6e 74 20 7b 30 7d 20 64  name count {0} d
18e60 6f 65 73 20 6e 6f 74 20 22 20 2b 0d 0a 20 20 20  oes not " +..   
18e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18e80 20 22 6d 61 74 63 68 20 70 6c 61 74 66 6f 72 6d   "match platform
18e90 20 6e 61 6d 65 20 63 6f 75 6e 74 20 7b 31 7d 22   name count {1}"
18ea0 2c 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 4c  , frameworkNameL
18eb0 69 73 74 2e 43 6f 75 6e 74 2c 0d 0a 20 20 20 20  ist.Count,..    
18ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18ed0 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 4c 69 73 74  platformNameList
18ee0 2e 43 6f 75 6e 74 29 3b 0d 0a 0d 0a 20 20 20 20  .Count);....    
18ef0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
18f00 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
18f10 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
18f20 20 20 20 20 20 20 20 20 66 6f 72 20 28 69 6e 74          for (int
18f30 20 69 6e 64 65 78 20 3d 20 30 3b 20 69 6e 64 65   index = 0; inde
18f40 78 20 3c 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d  x < frameworkNam
18f50 65 4c 69 73 74 2e 43 6f 75 6e 74 3b 20 69 6e 64  eList.Count; ind
18f60 65 78 2b 2b 29 0d 0a 20 20 20 20 20 20 20 20 20  ex++)..         
18f70 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
18f80 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
18f90 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54            // NOT
18fa0 45 3a 20 47 72 61 62 20 74 68 65 20 6e 61 6d 65  E: Grab the name
18fb0 20 6f 66 20 74 68 65 20 66 72 61 6d 65 77 6f 72   of the framewor
18fc0 6b 20 28 65 2e 67 2e 20 22 2e 4e 45 54 46 72 61  k (e.g. ".NETFra
18fd0 6d 65 77 6f 72 6b 22 29 0d 0a 20 20 20 20 20 20  mework")..      
18fe0 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
18ff0 20 20 20 61 6e 64 20 74 68 65 20 6e 61 6d 65 20     and the name 
19000 6f 66 20 74 68 65 20 70 6c 61 74 66 6f 72 6d 20  of the platform 
19010 28 65 2e 67 2e 20 22 57 69 6e 64 6f 77 73 43 45  (e.g. "WindowsCE
19020 22 29 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ")...           
19030 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
19040 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
19050 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 20 3d 20  frameworkName = 
19060 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 4c 69 73  frameworkNameLis
19070 74 5b 69 6e 64 65 78 5d 3b 0d 0a 20 20 20 20 20  t[index];..     
19080 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
19090 67 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 20 3d  g platformName =
190a0 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 4c 69 73   platformNameLis
190b0 74 5b 69 6e 64 65 78 5d 3b 0d 0a 0d 0a 20 20 20  t[index];....   
190c0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
190d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
190e0 20 2f 2f 20 4e 4f 54 45 3a 20 53 6b 69 70 20 61   // NOTE: Skip a
190f0 6c 6c 20 6e 6f 6e 2d 64 65 73 6b 74 6f 70 20 66  ll non-desktop f
19100 72 61 6d 65 77 6f 72 6b 73 20 28 69 2e 65 2e 20  rameworks (i.e. 
19110 69 66 20 74 68 65 20 70 6c 61 74 66 6f 72 6d 0d  if the platform.
19120 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
19130 20 2f 2f 20 20 20 20 20 20 20 6e 61 6d 65 20 69   //       name i
19140 73 20 6e 6f 74 20 6e 75 6c 6c 29 2e 0d 0a 20 20  s not null)...  
19150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
19160 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
19170 20 20 69 66 20 28 70 6c 61 74 66 6f 72 6d 4e 61    if (platformNa
19180 6d 65 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  me != null)..   
19190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
191a0 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 0d 0a 20 20   continue;....  
191b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
191c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
191d0 20 20 2f 2f 20 4e 4f 54 45 3a 20 47 72 61 62 20    // NOTE: Grab 
191e0 74 68 65 20 73 75 70 70 6f 72 74 65 64 20 76 65  the supported ve
191f0 72 73 69 6f 6e 73 20 6f 66 20 74 68 69 73 20 70  rsions of this p
19200 61 72 74 69 63 75 6c 61 72 0d 0a 20 20 20 20 20  articular..     
19210 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
19220 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 2e 0d 0a      framework...
19230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19240 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
19250 20 20 20 20 56 65 72 73 69 6f 6e 4c 69 73 74 20      VersionList 
19260 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e  frameworkVersion
19270 4c 69 73 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  List;....       
19280 20 20 20 20 20 20 20 20 20 69 66 20 28 21 66 72           if (!fr
19290 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 4d 61  ameworkVersionMa
192a0 70 2e 54 72 79 47 65 74 56 61 6c 75 65 28 0d 0a  p.TryGetValue(..
192b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
192c0 20 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72          framewor
192d0 6b 4e 61 6d 65 2c 20 6f 75 74 20 66 72 61 6d 65  kName, out frame
192e0 77 6f 72 6b 56 65 72 73 69 6f 6e 4c 69 73 74 29  workVersionList)
192f0 20 7c 7c 0d 0a 20 20 20 20 20 20 20 20 20 20 20   ||..           
19300 20 20 20 20 20 20 20 20 20 28 66 72 61 6d 65 77           (framew
19310 6f 72 6b 56 65 72 73 69 6f 6e 4c 69 73 74 20 3d  orkVersionList =
19320 3d 20 6e 75 6c 6c 29 29 0d 0a 20 20 20 20 20 20  = null))..      
19330 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
19340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19350 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20   continue;..    
19360 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
19370 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
19380 20 66 6f 72 65 61 63 68 20 28 56 65 72 73 69 6f   foreach (Versio
19390 6e 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69  n frameworkVersi
193a0 6f 6e 20 69 6e 20 66 72 61 6d 65 77 6f 72 6b 56  on in frameworkV
193b0 65 72 73 69 6f 6e 4c 69 73 74 29 0d 0a 20 20 20  ersionList)..   
193c0 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
193d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
193e0 20 20 20 20 54 72 61 63 65 4f 70 73 2e 54 72 61      TraceOps.Tra
193f0 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ce(..           
19400 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
19410 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 72  cePriority.Lower
19420 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c  , traceCallback,
19430 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
19440 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
19450 20 20 20 20 20 20 20 20 20 22 66 72 61 6d 65 77           "framew
19460 6f 72 6b 4e 61 6d 65 20 3d 20 7b 30 7d 2c 20 66  orkName = {0}, f
19470 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 20  rameworkVersion 
19480 3d 20 7b 31 7d 2c 20 22 20 2b 0d 0a 20 20 20 20  = {1}, " +..    
19490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
194a0 20 20 20 20 22 70 6c 61 74 66 6f 72 6d 4e 61 6d      "platformNam
194b0 65 20 3d 20 7b 32 7d 22 2c 20 46 6f 72 44 69 73  e = {2}", ForDis
194c0 70 6c 61 79 28 66 72 61 6d 65 77 6f 72 6b 4e 61  play(frameworkNa
194d0 6d 65 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  me),..          
194e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f                Fo
194f0 72 44 69 73 70 6c 61 79 28 66 72 61 6d 65 77 6f  rDisplay(framewo
19500 72 6b 56 65 72 73 69 6f 6e 29 2c 0d 0a 20 20 20  rkVersion),..   
19510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19520 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28       ForDisplay(
19530 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 29 29 2c 20  platformName)), 
19540 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
19550 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
19560 20 20 20 20 20 20 20 69 66 20 28 21 48 61 76 65         if (!Have
19570 46 72 61 6d 65 77 6f 72 6b 28 0d 0a 20 20 20 20  Framework(..    
19580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19590 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c          rootKey,
195a0 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 20   frameworkName, 
195b0 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e  frameworkVersion
195c0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
195d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70                 p
195e0 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c 20 77 68 61  latformName, wha
195f0 74 49 66 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a  tIf, verbose))..
19600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19610 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
19620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
19630 72 61 63 65 4f 70 73 2e 54 72 61 63 65 28 0d 0a  raceOps.Trace(..
19640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19650 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
19660 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 2c 20 74  ePriority.Low, t
19670 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20  raceCallback,.. 
19680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19690 20 20 20 20 20 20 20 20 20 20 20 22 2e 4e 45 54             ".NET
196a0 20 46 72 61 6d 65 77 6f 72 6b 20 6e 6f 74 20 66   Framework not f
196b0 6f 75 6e 64 2c 20 73 6b 69 70 70 69 6e 67 2e 2e  ound, skipping..
196c0 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  .",..           
196d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
196e0 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
196f0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
19700 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74              cont
19710 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  inue;..         
19720 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
19730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19740 20 20 20 20 69 66 20 28 63 61 6c 6c 62 61 63 6b      if (callback
19750 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
19760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19770 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 0d 0a     continue;....
19780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19790 20 20 20 20 73 74 72 69 6e 67 20 64 69 72 65 63      string direc
197a0 74 6f 72 79 20 3d 20 47 65 74 46 72 61 6d 65 77  tory = GetFramew
197b0 6f 72 6b 44 69 72 65 63 74 6f 72 79 28 0d 0a 20  orkDirectory(.. 
197c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
197d0 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20         rootKey, 
197e0 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e  frameworkVersion
197f0 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73  , whatIf, verbos
19800 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
19810 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 53             if (S
19820 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d  tring.IsNullOrEm
19830 70 74 79 28 64 69 72 65 63 74 6f 72 79 29 29 0d  pty(directory)).
19840 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
19850 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
19860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19870 54 72 61 63 65 4f 70 73 2e 54 72 61 63 65 28 0d  TraceOps.Trace(.
19880 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
19890 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
198a0 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 2c 20  cePriority.Low, 
198b0 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53  traceCallback, S
198c0 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
198d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
198e0 20 20 20 20 20 20 20 20 20 20 20 22 2e 4e 45 54             ".NET
198f0 20 46 72 61 6d 65 77 6f 72 6b 20 7b 30 7d 20 64   Framework {0} d
19900 69 72 65 63 74 6f 72 79 20 69 73 20 69 6e 76 61  irectory is inva
19910 6c 69 64 2c 20 22 20 2b 0d 0a 20 20 20 20 20 20  lid, " +..      
19920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19930 20 20 20 20 20 20 22 73 6b 69 70 70 69 6e 67 2e        "skipping.
19940 2e 2e 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  ..", ForDisplay(
19950 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e  frameworkVersion
19960 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
19970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19980 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
19990 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
199a0 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74              cont
199b0 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  inue;..         
199c0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
199d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
199e0 20 20 20 20 64 69 72 65 63 74 6f 72 79 20 3d 20      directory = 
199f0 50 61 74 68 2e 43 6f 6d 62 69 6e 65 28 64 69 72  Path.Combine(dir
19a00 65 63 74 6f 72 79 2c 20 22 43 6f 6e 66 69 67 22  ectory, "Config"
19a10 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
19a20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21 44            if (!D
19a30 69 72 65 63 74 6f 72 79 2e 45 78 69 73 74 73 28  irectory.Exists(
19a40 64 69 72 65 63 74 6f 72 79 29 29 0d 0a 20 20 20  directory))..   
19a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19a60 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
19a70 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
19a80 65 4f 70 73 2e 54 72 61 63 65 28 0d 0a 20 20 20  eOps.Trace(..   
19a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19aa0 20 20 20 20 20 20 20 20 20 54 72 61 63 65 50 72           TracePr
19ab0 69 6f 72 69 74 79 2e 4c 6f 77 2c 20 74 72 61 63  iority.Low, trac
19ac0 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e  eCallback, Strin
19ad0 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
19ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19af0 20 20 20 20 20 20 20 22 2e 4e 45 54 20 46 72 61         ".NET Fra
19b00 6d 65 77 6f 72 6b 20 7b 30 7d 20 64 69 72 65 63  mework {0} direc
19b10 74 6f 72 79 20 7b 31 7d 20 64 6f 65 73 20 6e 6f  tory {1} does no
19b20 74 20 65 78 69 73 74 2c 20 22 20 2b 0d 0a 20 20  t exist, " +..  
19b30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19b40 20 20 20 20 20 20 20 20 20 20 22 73 6b 69 70 70            "skipp
19b50 69 6e 67 2e 2e 2e 22 2c 20 46 6f 72 44 69 73 70  ing...", ForDisp
19b60 6c 61 79 28 66 72 61 6d 65 77 6f 72 6b 56 65 72  lay(frameworkVer
19b70 73 69 6f 6e 29 2c 0d 0a 20 20 20 20 20 20 20 20  sion),..        
19b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19b90 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 64      ForDisplay(d
19ba0 69 72 65 63 74 6f 72 79 29 29 2c 20 74 72 61 63  irectory)), trac
19bb0 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
19bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19bd0 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b         continue;
19be0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
19bf0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
19c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
19c10 74 72 69 6e 67 20 66 69 6c 65 4e 61 6d 65 20 3d  tring fileName =
19c20 20 50 61 74 68 2e 43 6f 6d 62 69 6e 65 28 64 69   Path.Combine(di
19c30 72 65 63 74 6f 72 79 2c 20 22 6d 61 63 68 69 6e  rectory, "machin
19c40 65 2e 63 6f 6e 66 69 67 22 29 3b 0d 0a 0d 0a 20  e.config");.... 
19c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19c60 20 20 20 69 66 20 28 21 46 69 6c 65 2e 45 78 69     if (!File.Exi
19c70 73 74 73 28 66 69 6c 65 4e 61 6d 65 29 29 0d 0a  sts(fileName))..
19c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19c90 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
19ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
19cb0 72 61 63 65 4f 70 73 2e 54 72 61 63 65 28 0d 0a  raceOps.Trace(..
19cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19cd0 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
19ce0 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 2c 20 74  ePriority.Low, t
19cf0 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74  raceCallback, St
19d00 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
19d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19d20 20 20 20 20 20 20 20 20 20 20 22 2e 4e 45 54 20            ".NET 
19d30 46 72 61 6d 65 77 6f 72 6b 20 7b 30 7d 20 66 69  Framework {0} fi
19d40 6c 65 20 7b 31 7d 20 64 6f 65 73 20 6e 6f 74 20  le {1} does not 
19d50 65 78 69 73 74 2c 20 22 20 2b 0d 0a 20 20 20 20  exist, " +..    
19d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19d70 20 20 20 20 20 20 20 20 22 73 6b 69 70 70 69 6e          "skippin
19d80 67 2e 2e 2e 22 2c 20 46 6f 72 44 69 73 70 6c 61  g...", ForDispla
19d90 79 28 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69  y(frameworkVersi
19da0 6f 6e 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  on),..          
19db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19dc0 20 20 46 6f 72 44 69 73 70 6c 61 79 28 66 69 6c    ForDisplay(fil
19dd0 65 4e 61 6d 65 29 29 2c 20 74 72 61 63 65 43 61  eName)), traceCa
19de0 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
19df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19e00 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20      continue;.. 
19e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19e20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
19e30 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
19e40 20 6c 6f 63 61 6c 53 61 76 65 64 20 3d 20 66 61   localSaved = fa
19e50 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  lse;....        
19e60 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
19e70 21 63 61 6c 6c 62 61 63 6b 28 0d 0a 20 20 20 20  !callback(..    
19e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19e90 20 20 20 20 20 20 20 20 66 69 6c 65 4e 61 6d 65          fileName
19ea0 2c 20 69 6e 76 61 72 69 61 6e 74 2c 20 6e 61 6d  , invariant, nam
19eb0 65 2c 20 64 65 73 63 72 69 70 74 69 6f 6e 2c 20  e, description, 
19ec0 74 79 70 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20  typeName,..     
19ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19ee0 20 20 20 20 20 20 20 61 73 73 65 6d 62 6c 79 4e         assemblyN
19ef0 61 6d 65 2c 20 63 6c 69 65 6e 74 44 61 74 61 2c  ame, clientData,
19f00 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65   whatIf, verbose
19f10 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
19f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
19f30 65 66 20 6c 6f 63 61 6c 53 61 76 65 64 2c 20 72  ef localSaved, r
19f40 65 66 20 65 72 72 6f 72 29 29 0d 0a 20 20 20 20  ef error))..    
19f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19f60 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
19f70 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
19f80 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
19f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
19fa0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
19fb0 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20       else..     
19fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
19fd0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
19fe0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6c 6f            if (lo
19ff0 63 61 6c 53 61 76 65 64 20 26 26 20 21 73 61 76  calSaved && !sav
1a000 65 64 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ed)..           
1a010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a020 20 73 61 76 65 64 20 3d 20 74 72 75 65 3b 0d 0a   saved = true;..
1a030 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1a040 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76 65            if (ve
1a050 72 62 6f 73 65 29 0d 0a 20 20 20 20 20 20 20 20  rbose)..        
1a060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a070 20 20 20 20 54 72 61 63 65 4f 70 73 2e 54 72 61      TraceOps.Tra
1a080 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ce(..           
1a090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a0a0 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69       TracePriori
1a0b0 74 79 2e 4c 6f 77 65 73 74 2c 0d 0a 20 20 20 20  ty.Lowest,..    
1a0c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a0d0 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
1a0e0 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e  eCallback, Strin
1a0f0 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
1a100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a110 20 20 20 20 20 20 20 20 20 20 20 22 6c 6f 63 61             "loca
1a120 6c 53 61 76 65 64 20 3d 20 7b 30 7d 2c 20 73 61  lSaved = {0}, sa
1a130 76 65 64 20 3d 20 7b 31 7d 22 2c 0d 0a 20 20 20  ved = {1}",..   
1a140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a150 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72               For
1a160 44 69 73 70 6c 61 79 28 6c 6f 63 61 6c 53 61 76  Display(localSav
1a170 65 64 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  ed), ForDisplay(
1a180 73 61 76 65 64 29 29 2c 0d 0a 20 20 20 20 20 20  saved)),..      
1a190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a1a0 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
1a1b0 61 74 65 67 6f 72 79 29 3b 0d 0a 20 20 20 20 20  ategory);..     
1a1c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
1a1d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1a1e0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
1a1f0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
1a200 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a    return true;..
1a210 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
1a220 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
1a230 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a240 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a250 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a260 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
1a270 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
1a280 73 74 61 74 69 63 20 62 6f 6f 6c 20 46 6f 72 45  static bool ForE
1a290 61 63 68 46 72 61 6d 65 77 6f 72 6b 52 65 67 69  achFrameworkRegi
1a2a0 73 74 72 79 28 0d 0a 20 20 20 20 20 20 20 20 20  stry(..         
1a2b0 20 20 20 46 72 61 6d 65 77 6f 72 6b 52 65 67 69     FrameworkRegi
1a2c0 73 74 72 79 43 61 6c 6c 62 61 63 6b 20 63 61 6c  stryCallback cal
1a2d0 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20  lback,..        
1a2e0 20 20 20 20 6f 62 6a 65 63 74 20 63 6c 69 65 6e      object clien
1a2f0 74 44 61 74 61 2c 0d 0a 20 20 20 20 20 20 20 20  tData,..        
1a300 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c      bool whatIf,
1a310 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
1a320 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20  ol verbose,..   
1a330 20 20 20 20 20 20 20 20 20 72 65 66 20 73 74 72           ref str
1a340 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20 20 20  ing error..     
1a350 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
1a360 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
1a370 20 52 65 67 69 73 74 72 79 4b 65 79 20 72 6f 6f   RegistryKey roo
1a380 74 4b 65 79 20 3d 20 66 72 61 6d 65 77 6f 72 6b  tKey = framework
1a390 52 6f 6f 74 4b 65 79 3b 0d 0a 0d 0a 20 20 20 20  RootKey;....    
1a3a0 20 20 20 20 20 20 20 20 69 66 20 28 72 6f 6f 74          if (root
1a3b0 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  Key == null)..  
1a3c0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1a3d0 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
1a3e0 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 72 6f  or = "invalid ro
1a3f0 6f 74 20 6b 65 79 22 3b 0d 0a 20 20 20 20 20 20  ot key";..      
1a400 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
1a410 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
1a420 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
1a430 20 20 20 20 20 20 69 66 20 28 21 4f 62 6a 65 63        if (!Objec
1a440 74 2e 52 65 66 65 72 65 6e 63 65 45 71 75 61 6c  t.ReferenceEqual
1a450 73 28 72 6f 6f 74 4b 65 79 2c 20 52 65 67 69 73  s(rootKey, Regis
1a460 74 72 79 2e 43 75 72 72 65 6e 74 55 73 65 72 29  try.CurrentUser)
1a470 20 26 26 0d 0a 20 20 20 20 20 20 20 20 20 20 20   &&..           
1a480 20 20 20 20 20 21 4f 62 6a 65 63 74 2e 52 65 66       !Object.Ref
1a490 65 72 65 6e 63 65 45 71 75 61 6c 73 28 72 6f 6f  erenceEquals(roo
1a4a0 74 4b 65 79 2c 20 52 65 67 69 73 74 72 79 2e 4c  tKey, Registry.L
1a4b0 6f 63 61 6c 4d 61 63 68 69 6e 65 29 29 0d 0a 20  ocalMachine)).. 
1a4c0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
1a4d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
1a4e0 72 6f 72 20 3d 20 22 72 6f 6f 74 20 6b 65 79 20  ror = "root key 
1a4f0 6d 75 73 74 20 62 65 20 70 65 72 2d 75 73 65 72  must be per-user
1a500 20 6f 72 20 70 65 72 2d 6d 61 63 68 69 6e 65 22   or per-machine"
1a510 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
1a520 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
1a530 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
1a540 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
1a550 66 20 28 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65  f (frameworkName
1a560 4c 69 73 74 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  List == null).. 
1a570 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
1a580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
1a590 72 6f 72 20 3d 20 22 6e 6f 20 66 72 61 6d 65 77  ror = "no framew
1a5a0 6f 72 6b 20 6e 61 6d 65 73 20 66 6f 75 6e 64 22  ork names found"
1a5b0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
1a5c0 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
1a5d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
1a5e0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
1a5f0 66 20 28 66 72 61 6d 65 77 6f 72 6b 56 65 72 73  f (frameworkVers
1a600 69 6f 6e 4d 61 70 20 3d 3d 20 6e 75 6c 6c 29 0d  ionMap == null).
1a610 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
1a620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a630 65 72 72 6f 72 20 3d 20 22 6e 6f 20 66 72 61 6d  error = "no fram
1a640 65 77 6f 72 6b 20 76 65 72 73 69 6f 6e 73 20 66  ework versions f
1a650 6f 75 6e 64 22 3b 0d 0a 20 20 20 20 20 20 20 20  ound";..        
1a660 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
1a670 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
1a680 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
1a690 20 20 20 20 69 66 20 28 70 6c 61 74 66 6f 72 6d      if (platform
1a6a0 4e 61 6d 65 4c 69 73 74 20 3d 3d 20 6e 75 6c 6c  NameList == null
1a6b0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
1a6c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1a6d0 20 20 65 72 72 6f 72 20 3d 20 22 6e 6f 20 70 6c    error = "no pl
1a6e0 61 74 66 6f 72 6d 20 6e 61 6d 65 73 20 66 6f 75  atform names fou
1a6f0 6e 64 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  nd";..          
1a700 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
1a710 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se;..           
1a720 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
1a730 20 20 69 66 20 28 66 72 61 6d 65 77 6f 72 6b 4e    if (frameworkN
1a740 61 6d 65 4c 69 73 74 2e 43 6f 75 6e 74 20 21 3d  ameList.Count !=
1a750 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 4c 69 73   platformNameLis
1a760 74 2e 43 6f 75 6e 74 29 0d 0a 20 20 20 20 20 20  t.Count)..      
1a770 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1a780 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
1a790 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22   String.Format("
1a7a0 66 72 61 6d 65 77 6f 72 6b 20 6e 61 6d 65 20 63  framework name c
1a7b0 6f 75 6e 74 20 7b 30 7d 20 64 6f 65 73 20 6e 6f  ount {0} does no
1a7c0 74 20 22 20 2b 0d 0a 20 20 20 20 20 20 20 20 20  t " +..         
1a7d0 20 20 20 20 20 20 20 20 20 20 20 22 6d 61 74 63             "matc
1a7e0 68 20 70 6c 61 74 66 6f 72 6d 20 6e 61 6d 65 20  h platform name 
1a7f0 63 6f 75 6e 74 20 7b 31 7d 22 2c 20 66 72 61 6d  count {1}", fram
1a800 65 77 6f 72 6b 4e 61 6d 65 4c 69 73 74 2e 43 6f  eworkNameList.Co
1a810 75 6e 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  unt,..          
1a820 20 20 20 20 20 20 20 20 20 20 70 6c 61 74 66 6f            platfo
1a830 72 6d 4e 61 6d 65 4c 69 73 74 2e 43 6f 75 6e 74  rmNameList.Count
1a840 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
1a850 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
1a860 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se;..           
1a870 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
1a880 20 20 66 6f 72 20 28 69 6e 74 20 69 6e 64 65 78    for (int index
1a890 20 3d 20 30 3b 20 69 6e 64 65 78 20 3c 20 66 72   = 0; index < fr
1a8a0 61 6d 65 77 6f 72 6b 4e 61 6d 65 4c 69 73 74 2e  ameworkNameList.
1a8b0 43 6f 75 6e 74 3b 20 69 6e 64 65 78 2b 2b 29 0d  Count; index++).
1a8c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
1a8d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a8e0 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
1a8f0 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 47 72 61      // NOTE: Gra
1a900 62 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68  b the name of th
1a910 65 20 66 72 61 6d 65 77 6f 72 6b 20 28 65 2e 67  e framework (e.g
1a920 2e 20 22 2e 4e 45 54 46 72 61 6d 65 77 6f 72 6b  . ".NETFramework
1a930 22 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ")..            
1a940 20 20 20 20 2f 2f 20 20 20 20 20 20 20 61 6e 64      //       and
1a950 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65   the name of the
1a960 20 70 6c 61 74 66 6f 72 6d 20 28 65 2e 67 2e 20   platform (e.g. 
1a970 22 57 69 6e 64 6f 77 73 43 45 22 29 2e 0d 0a 20  "WindowsCE")... 
1a980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1a990 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
1a9a0 20 20 20 73 74 72 69 6e 67 20 66 72 61 6d 65 77     string framew
1a9b0 6f 72 6b 4e 61 6d 65 20 3d 20 66 72 61 6d 65 77  orkName = framew
1a9c0 6f 72 6b 4e 61 6d 65 4c 69 73 74 5b 69 6e 64 65  orkNameList[inde
1a9d0 78 5d 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  x];..           
1a9e0 20 20 20 20 20 73 74 72 69 6e 67 20 70 6c 61 74       string plat
1a9f0 66 6f 72 6d 4e 61 6d 65 20 3d 20 70 6c 61 74 66  formName = platf
1aa00 6f 72 6d 4e 61 6d 65 4c 69 73 74 5b 69 6e 64 65  ormNameList[inde
1aa10 78 5d 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  x];....         
1aa20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
1aa30 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f             // NO
1aa40 54 45 3a 20 47 72 61 62 20 74 68 65 20 73 75 70  TE: Grab the sup
1aa50 70 6f 72 74 65 64 20 76 65 72 73 69 6f 6e 73 20  ported versions 
1aa60 6f 66 20 74 68 69 73 20 70 61 72 74 69 63 75 6c  of this particul
1aa70 61 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ar..            
1aa80 20 20 20 20 2f 2f 20 20 20 20 20 20 20 66 72 61      //       fra
1aa90 6d 65 77 6f 72 6b 2e 0d 0a 20 20 20 20 20 20 20  mework...       
1aaa0 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
1aab0 20 20 20 20 20 20 20 20 20 20 20 20 20 56 65 72               Ver
1aac0 73 69 6f 6e 4c 69 73 74 20 66 72 61 6d 65 77 6f  sionList framewo
1aad0 72 6b 56 65 72 73 69 6f 6e 4c 69 73 74 3b 0d 0a  rkVersionList;..
1aae0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1aaf0 20 20 69 66 20 28 21 66 72 61 6d 65 77 6f 72 6b    if (!framework
1ab00 56 65 72 73 69 6f 6e 4d 61 70 2e 54 72 79 47 65  VersionMap.TryGe
1ab10 74 56 61 6c 75 65 28 0d 0a 20 20 20 20 20 20 20  tValue(..       
1ab20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ab30 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 20   frameworkName, 
1ab40 6f 75 74 20 66 72 61 6d 65 77 6f 72 6b 56 65 72  out frameworkVer
1ab50 73 69 6f 6e 4c 69 73 74 29 20 7c 7c 0d 0a 20 20  sionList) ||..  
1ab60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ab70 20 20 28 66 72 61 6d 65 77 6f 72 6b 56 65 72 73    (frameworkVers
1ab80 69 6f 6e 4c 69 73 74 20 3d 3d 20 6e 75 6c 6c 29  ionList == null)
1ab90 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
1aba0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
1abb0 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e            contin
1abc0 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
1abd0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
1abe0 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 63            foreac
1abf0 68 20 28 56 65 72 73 69 6f 6e 20 66 72 61 6d 65  h (Version frame
1ac00 77 6f 72 6b 56 65 72 73 69 6f 6e 20 69 6e 20 66  workVersion in f
1ac10 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 4c  rameworkVersionL
1ac20 69 73 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ist)..          
1ac30 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1ac40 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
1ac50 63 65 4f 70 73 2e 54 72 61 63 65 28 0d 0a 20 20  ceOps.Trace(..  
1ac60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ac70 20 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72        TracePrior
1ac80 69 74 79 2e 4c 6f 77 65 72 2c 20 74 72 61 63 65  ity.Lower, trace
1ac90 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67  Callback, String
1aca0 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
1acb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1acc0 20 20 22 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65    "frameworkName
1acd0 20 3d 20 7b 30 7d 2c 20 66 72 61 6d 65 77 6f 72   = {0}, framewor
1ace0 6b 56 65 72 73 69 6f 6e 20 3d 20 7b 31 7d 2c 20  kVersion = {1}, 
1acf0 22 20 2b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  " +..           
1ad00 20 20 20 20 20 20 20 20 20 20 20 20 20 22 70 6c               "pl
1ad10 61 74 66 6f 72 6d 4e 61 6d 65 20 3d 20 7b 32 7d  atformName = {2}
1ad20 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 66 72  ", ForDisplay(fr
1ad30 61 6d 65 77 6f 72 6b 4e 61 6d 65 29 2c 0d 0a 20  ameworkName),.. 
1ad40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ad50 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61         ForDispla
1ad60 79 28 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69  y(frameworkVersi
1ad70 6f 6e 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  on),..          
1ad80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f                Fo
1ad90 72 44 69 73 70 6c 61 79 28 70 6c 61 74 66 6f 72  rDisplay(platfor
1ada0 6d 4e 61 6d 65 29 29 2c 20 74 72 61 63 65 43 61  mName)), traceCa
1adb0 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
1adc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1add0 69 66 20 28 21 48 61 76 65 46 72 61 6d 65 77 6f  if (!HaveFramewo
1ade0 72 6b 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  rk(..           
1adf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ae00 20 72 6f 6f 74 4b 65 79 2c 20 66 72 61 6d 65 77   rootKey, framew
1ae10 6f 72 6b 4e 61 6d 65 2c 20 66 72 61 6d 65 77 6f  orkName, framewo
1ae20 72 6b 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20  rkVersion,..    
1ae30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ae40 20 20 20 20 20 20 20 20 70 6c 61 74 66 6f 72 6d          platform
1ae50 4e 61 6d 65 2c 20 77 68 61 74 49 66 2c 20 76 65  Name, whatIf, ve
1ae60 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20  rbose))..       
1ae70 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
1ae80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ae90 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73          TraceOps
1aea0 2e 54 72 61 63 65 28 54 72 61 63 65 50 72 69 6f  .Trace(TracePrio
1aeb0 72 69 74 79 2e 4c 6f 77 2c 20 74 72 61 63 65 43  rity.Low, traceC
1aec0 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20  allback,..      
1aed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aee0 20 20 20 20 20 20 22 2e 4e 45 54 20 46 72 61 6d        ".NET Fram
1aef0 65 77 6f 72 6b 20 6e 6f 74 20 66 6f 75 6e 64 2c  ework not found,
1af00 20 73 6b 69 70 70 69 6e 67 2e 2e 2e 22 2c 0d 0a   skipping...",..
1af10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1af20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
1af30 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
1af40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1af50 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b         continue;
1af60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1af70 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
1af80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
1af90 66 20 28 63 61 6c 6c 62 61 63 6b 20 3d 3d 20 6e  f (callback == n
1afa0 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
1afb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
1afc0 6e 74 69 6e 75 65 3b 0d 0a 0d 0a 20 20 20 20 20  ntinue;....     
1afd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
1afe0 66 20 28 21 63 61 6c 6c 62 61 63 6b 28 0d 0a 20  f (!callback(.. 
1aff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b000 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b             rootK
1b010 65 79 2c 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d  ey, frameworkNam
1b020 65 2c 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73  e, frameworkVers
1b030 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ion,..          
1b040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b050 20 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c 20    platformName, 
1b060 63 6c 69 65 6e 74 44 61 74 61 2c 20 77 68 61 74  clientData, what
1b070 49 66 2c 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20  If, verbose,..  
1b080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b090 20 20 20 20 20 20 20 20 20 20 72 65 66 20 65 72            ref er
1b0a0 72 6f 72 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ror))..         
1b0b0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
1b0c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b0d0 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
1b0e0 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se;..           
1b0f0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
1b100 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
1b110 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
1b120 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
1b130 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20  rn true;..      
1b140 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e    }..        #en
1b150 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
1b160 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
1b170 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b180 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b190 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b1a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
1b1b0 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 65        #region Pe
1b1c0 72 2d 56 69 73 75 61 6c 20 53 74 75 64 69 6f 20  r-Visual Studio 
1b1d0 56 65 72 73 69 6f 6e 20 48 61 6e 64 6c 69 6e 67  Version Handling
1b1e0 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
1b1f0 65 20 73 74 61 74 69 63 20 76 6f 69 64 20 49 6e  e static void In
1b200 69 74 69 61 6c 69 7a 65 41 6c 6c 56 73 56 65 72  itializeAllVsVer
1b210 73 69 6f 6e 73 28 0d 0a 20 20 20 20 20 20 20 20  sions(..        
1b220 20 20 20 20 43 6f 6e 66 69 67 75 72 61 74 69 6f      Configuratio
1b230 6e 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 0d  n configuration.
1b240 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a  .            )..
1b250 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
1b260 20 20 20 20 20 20 20 69 66 20 28 76 73 52 6f 6f         if (vsRoo
1b270 74 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  tKey == null).. 
1b280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76                 v
1b290 73 52 6f 6f 74 4b 65 79 20 3d 20 52 65 67 69 73  sRootKey = Regis
1b2a0 74 72 79 2e 4c 6f 63 61 6c 4d 61 63 68 69 6e 65  try.LocalMachine
1b2b0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
1b2c0 20 69 66 20 28 76 73 41 64 6f 4e 65 74 54 65 63   if (vsAdoNetTec
1b2d0 68 6e 6f 6c 6f 67 79 49 64 20 3d 3d 20 6e 75 6c  hnologyId == nul
1b2e0 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
1b2f0 20 20 20 20 76 73 41 64 6f 4e 65 74 54 65 63 68      vsAdoNetTech
1b300 6e 6f 6c 6f 67 79 49 64 20 3d 20 6e 65 77 20 47  nologyId = new G
1b310 75 69 64 28 0d 0a 20 20 20 20 20 20 20 20 20 20  uid(..          
1b320 20 20 20 20 20 20 20 20 20 20 22 37 37 41 42 39            "77AB9
1b330 41 39 44 2d 37 38 42 39 2d 34 42 41 37 2d 39 31  A9D-78B9-4BA7-91
1b340 41 43 2d 38 37 33 46 35 33 33 38 46 31 44 32 22  AC-873F5338F1D2"
1b350 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
1b360 20 20 69 66 20 28 76 73 50 61 63 6b 61 67 65 49    if (vsPackageI
1b370 64 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  d == null)..    
1b380 20 20 20 20 20 20 20 20 20 20 20 20 76 73 50 61              vsPa
1b390 63 6b 61 67 65 49 64 20 3d 20 6e 65 77 20 47 75  ckageId = new Gu
1b3a0 69 64 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  id(..           
1b3b0 20 20 20 20 20 20 20 20 20 22 44 43 42 45 36 43           "DCBE6C
1b3c0 38 44 2d 30 45 35 37 2d 34 30 39 39 2d 41 31 38  8D-0E57-4099-A18
1b3d0 33 2d 39 38 46 46 37 34 43 36 34 44 39 43 22 29  3-98FF74C64D9C")
1b3e0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
1b3f0 20 69 66 20 28 76 73 53 65 72 76 69 63 65 49 64   if (vsServiceId
1b400 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
1b410 20 20 20 20 20 20 20 20 20 20 20 76 73 53 65 72             vsSer
1b420 76 69 63 65 49 64 20 3d 20 6e 65 77 20 47 75 69  viceId = new Gui
1b430 64 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d(..            
1b440 20 20 20 20 20 20 20 20 22 44 43 42 45 36 43 38          "DCBE6C8
1b450 44 2d 30 45 35 37 2d 34 30 39 39 2d 41 31 38 33  D-0E57-4099-A183
1b460 2d 39 38 46 46 37 34 43 36 34 44 39 44 22 29 3b  -98FF74C64D9D");
1b470 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1b480 69 66 20 28 76 73 44 61 74 61 53 6f 75 72 63 65  if (vsDataSource
1b490 73 49 64 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  sId == null)..  
1b4a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76 73                vs
1b4b0 44 61 74 61 53 6f 75 72 63 65 73 49 64 20 3d 20  DataSourcesId = 
1b4c0 6e 65 77 20 47 75 69 64 28 0d 0a 20 20 20 20 20  new Guid(..     
1b4d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
1b4e0 30 45 42 41 41 42 36 45 2d 43 41 38 30 2d 34 42  0EBAAB6E-CA80-4B
1b4f0 34 41 2d 38 44 44 46 2d 43 42 45 36 42 46 30 35  4A-8DDF-CBE6BF05
1b500 38 43 37 31 22 29 3b 0d 0a 0d 0a 20 20 20 20 20  8C71");....     
1b510 20 20 20 20 20 20 20 69 66 20 28 76 73 44 61 74         if (vsDat
1b520 61 50 72 6f 76 69 64 65 72 49 64 20 3d 3d 20 6e  aProviderId == n
1b530 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
1b540 20 20 20 20 20 20 76 73 44 61 74 61 50 72 6f 76        vsDataProv
1b550 69 64 65 72 49 64 20 3d 20 6e 65 77 20 47 75 69  iderId = new Gui
1b560 64 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d(..            
1b570 20 20 20 20 20 20 20 20 22 30 45 42 41 41 42 36          "0EBAAB6
1b580 45 2d 43 41 38 30 2d 34 42 34 41 2d 38 44 44 46  E-CA80-4B4A-8DDF
1b590 2d 43 42 45 36 42 46 30 35 38 43 37 30 22 29 3b  -CBE6BF058C70");
1b5a0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1b5b0 69 66 20 28 76 73 56 65 72 73 69 6f 6e 4c 69 73  if (vsVersionLis
1b5c0 74 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  t == null)..    
1b5d0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
1b5e0 20 20 20 20 20 20 20 20 20 20 20 76 73 56 65 72             vsVer
1b5f0 73 69 6f 6e 4c 69 73 74 20 3d 20 6e 65 77 20 56  sionList = new V
1b600 65 72 73 69 6f 6e 4c 69 73 74 28 29 3b 0d 0a 0d  ersionList();...
1b610 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1b620 20 2f 2f 20 76 73 56 65 72 73 69 6f 6e 4c 69 73   // vsVersionLis
1b630 74 2e 41 64 64 28 6e 65 77 20 56 65 72 73 69 6f  t.Add(new Versio
1b640 6e 28 38 2c 20 30 29 29 3b 20 2f 2f 20 56 69 73  n(8, 0)); // Vis
1b650 75 61 6c 20 53 74 75 64 69 6f 20 32 30 30 35 0d  ual Studio 2005.
1b660 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1b670 20 20 20 69 66 20 28 28 63 6f 6e 66 69 67 75 72     if ((configur
1b680 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20 7c  ation == null) |
1b690 7c 20 21 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  | !configuration
1b6a0 2e 4e 6f 56 73 32 30 30 38 29 0d 0a 20 20 20 20  .NoVs2008)..    
1b6b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b6c0 76 73 56 65 72 73 69 6f 6e 4c 69 73 74 2e 41 64  vsVersionList.Ad
1b6d0 64 28 6e 65 77 20 56 65 72 73 69 6f 6e 28 39 2c  d(new Version(9,
1b6e0 20 30 29 29 3b 20 2f 2f 20 56 69 73 75 61 6c 20   0)); // Visual 
1b6f0 53 74 75 64 69 6f 20 32 30 30 38 0d 0a 0d 0a 20  Studio 2008.... 
1b700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
1b710 66 20 28 28 63 6f 6e 66 69 67 75 72 61 74 69 6f  f ((configuratio
1b720 6e 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 21 63  n == null) || !c
1b730 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 4e 6f 56  onfiguration.NoV
1b740 73 32 30 31 30 29 0d 0a 20 20 20 20 20 20 20 20  s2010)..        
1b750 20 20 20 20 20 20 20 20 20 20 20 20 76 73 56 65              vsVe
1b760 72 73 69 6f 6e 4c 69 73 74 2e 41 64 64 28 6e 65  rsionList.Add(ne
1b770 77 20 56 65 72 73 69 6f 6e 28 31 30 2c 20 30 29  w Version(10, 0)
1b780 29 3b 2f 2f 20 56 69 73 75 61 6c 20 53 74 75 64  );// Visual Stud
1b790 69 6f 20 32 30 31 30 0d 0a 20 20 20 20 20 20 20  io 2010..       
1b7a0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
1b7b0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  }....        ///
1b7c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b7d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b7e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b7f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b800 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
1b810 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 62  private static b
1b820 6f 6f 6c 20 48 61 76 65 56 73 56 65 72 73 69 6f  ool HaveVsVersio
1b830 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n(..            
1b840 52 65 67 69 73 74 72 79 4b 65 79 20 72 6f 6f 74  RegistryKey root
1b850 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  Key,..          
1b860 20 20 56 65 72 73 69 6f 6e 20 76 73 56 65 72 73    Version vsVers
1b870 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ion,..          
1b880 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a    bool whatIf,..
1b890 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
1b8a0 20 76 65 72 62 6f 73 65 0d 0a 20 20 20 20 20 20   verbose..      
1b8b0 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
1b8c0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1b8d0 73 74 72 69 6e 67 20 66 6f 72 6d 61 74 20 3d 20  string format = 
1b8e0 22 53 6f 66 74 77 61 72 65 5c 5c 4d 69 63 72 6f  "Software\\Micro
1b8f0 73 6f 66 74 5c 5c 56 69 73 75 61 6c 53 74 75 64  soft\\VisualStud
1b900 69 6f 5c 5c 7b 30 7d 22 3b 0d 0a 20 20 20 20 20  io\\{0}";..     
1b910 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6b 65         string ke
1b920 79 4e 61 6d 65 20 3d 20 53 74 72 69 6e 67 2e 46  yName = String.F
1b930 6f 72 6d 61 74 28 66 6f 72 6d 61 74 2c 20 76 73  ormat(format, vs
1b940 56 65 72 73 69 6f 6e 29 3b 0d 0a 0d 0a 20 20 20  Version);....   
1b950 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28           using (
1b960 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20  MockRegistryKey 
1b970 6b 65 79 20 3d 20 52 65 67 69 73 74 72 79 48 65  key = RegistryHe
1b980 6c 70 65 72 2e 4f 70 65 6e 53 75 62 4b 65 79 28  lper.OpenSubKey(
1b990 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1b9a0 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 6b        rootKey, k
1b9b0 65 79 4e 61 6d 65 2c 20 66 61 6c 73 65 2c 20 77  eyName, false, w
1b9c0 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 29  hatIf, verbose))
1b9d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
1b9e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1b9f0 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c   if (key == null
1ba00 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
1ba10 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
1ba20 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  lse;....        
1ba30 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 76          object v
1ba40 61 6c 75 65 20 3d 20 52 65 67 69 73 74 72 79 48  alue = RegistryH
1ba50 65 6c 70 65 72 2e 47 65 74 56 61 6c 75 65 28 0d  elper.GetValue(.
1ba60 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1ba70 20 20 20 20 20 6b 65 79 2c 20 22 49 6e 73 74 61       key, "Insta
1ba80 6c 6c 44 69 72 22 2c 20 6e 75 6c 6c 2c 20 77 68  llDir", null, wh
1ba90 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d  atIf, verbose);.
1baa0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1bab0 20 20 20 69 66 20 28 21 28 76 61 6c 75 65 20 69     if (!(value i
1bac0 73 20 73 74 72 69 6e 67 29 29 0d 0a 20 20 20 20  s string))..    
1bad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bae0 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d  return false;...
1baf0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1bb00 20 73 74 72 69 6e 67 20 64 69 72 65 63 74 6f 72   string director
1bb10 79 20 3d 20 28 73 74 72 69 6e 67 29 76 61 6c 75  y = (string)valu
1bb20 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
1bb30 20 20 20 20 20 20 69 66 20 28 53 74 72 69 6e 67        if (String
1bb40 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 64  .IsNullOrEmpty(d
1bb50 69 72 65 63 74 6f 72 79 29 29 0d 0a 20 20 20 20  irectory))..    
1bb60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bb70 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d  return false;...
1bb80 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1bb90 20 69 66 20 28 21 44 69 72 65 63 74 6f 72 79 2e   if (!Directory.
1bba0 45 78 69 73 74 73 28 64 69 72 65 63 74 6f 72 79  Exists(directory
1bbb0 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
1bbc0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
1bbd0 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  alse;....       
1bbe0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
1bbf0 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  true;..         
1bc00 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d     }..        }.
1bc10 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
1bc20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1bc30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1bc40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1bc50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1bc60 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72  //....        pr
1bc70 69 76 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f  ivate static boo
1bc80 6c 20 46 6f 72 45 61 63 68 56 73 56 65 72 73 69  l ForEachVsVersi
1bc90 6f 6e 52 65 67 69 73 74 72 79 28 0d 0a 20 20 20  onRegistry(..   
1bca0 20 20 20 20 20 20 20 20 20 56 69 73 75 61 6c 53           VisualS
1bcb0 74 75 64 69 6f 52 65 67 69 73 74 72 79 43 61 6c  tudioRegistryCal
1bcc0 6c 62 61 63 6b 20 63 61 6c 6c 62 61 63 6b 2c 0d  lback callback,.
1bcd0 0a 20 20 20 20 20 20 20 20 20 20 20 20 47 75 69  .            Gui
1bce0 64 20 70 61 63 6b 61 67 65 49 64 2c 0d 0a 20 20  d packageId,..  
1bcf0 20 20 20 20 20 20 20 20 20 20 47 75 69 64 20 73            Guid s
1bd00 65 72 76 69 63 65 49 64 2c 0d 0a 20 20 20 20 20  erviceId,..     
1bd10 20 20 20 20 20 20 20 47 75 69 64 20 64 61 74 61         Guid data
1bd20 53 6f 75 72 63 65 49 64 2c 0d 0a 20 20 20 20 20  SourceId,..     
1bd30 20 20 20 20 20 20 20 47 75 69 64 20 64 61 74 61         Guid data
1bd40 50 72 6f 76 69 64 65 72 49 64 2c 0d 0a 20 20 20  ProviderId,..   
1bd50 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20           object 
1bd60 63 6c 69 65 6e 74 44 61 74 61 2c 0d 0a 20 20 20  clientData,..   
1bd70 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68           bool wh
1bd80 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20  atIf,..         
1bd90 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c     bool verbose,
1bda0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
1bdb0 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a  f string error..
1bdc0 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
1bdd0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
1bde0 20 20 20 20 20 20 52 65 67 69 73 74 72 79 4b 65        RegistryKe
1bdf0 79 20 72 6f 6f 74 4b 65 79 20 3d 20 76 73 52 6f  y rootKey = vsRo
1be00 6f 74 4b 65 79 3b 0d 0a 0d 0a 20 20 20 20 20 20  otKey;....      
1be10 20 20 20 20 20 20 69 66 20 28 72 6f 6f 74 4b 65        if (rootKe
1be20 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  y == null)..    
1be30 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
1be40 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
1be50 20 3d 20 22 69 6e 76 61 6c 69 64 20 72 6f 6f 74   = "invalid root
1be60 20 6b 65 79 22 3b 0d 0a 20 20 20 20 20 20 20 20   key";..        
1be70 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
1be80 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
1be90 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
1bea0 20 20 20 20 69 66 20 28 21 4f 62 6a 65 63 74 2e      if (!Object.
1beb0 52 65 66 65 72 65 6e 63 65 45 71 75 61 6c 73 28  ReferenceEquals(
1bec0 72 6f 6f 74 4b 65 79 2c 20 52 65 67 69 73 74 72  rootKey, Registr
1bed0 79 2e 43 75 72 72 65 6e 74 55 73 65 72 29 20 26  y.CurrentUser) &
1bee0 26 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  &..             
1bef0 20 20 20 21 4f 62 6a 65 63 74 2e 52 65 66 65 72     !Object.Refer
1bf00 65 6e 63 65 45 71 75 61 6c 73 28 72 6f 6f 74 4b  enceEquals(rootK
1bf10 65 79 2c 20 52 65 67 69 73 74 72 79 2e 4c 6f 63  ey, Registry.Loc
1bf20 61 6c 4d 61 63 68 69 6e 65 29 29 0d 0a 20 20 20  alMachine))..   
1bf30 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
1bf40 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
1bf50 72 20 3d 20 22 72 6f 6f 74 20 6b 65 79 20 6d 75  r = "root key mu
1bf60 73 74 20 62 65 20 70 65 72 2d 75 73 65 72 20 6f  st be per-user o
1bf70 72 20 70 65 72 2d 6d 61 63 68 69 6e 65 22 3b 0d  r per-machine";.
1bf80 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1bf90 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
1bfa0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
1bfb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
1bfc0 28 76 73 56 65 72 73 69 6f 6e 4c 69 73 74 20 3d  (vsVersionList =
1bfd0 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
1bfe0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1bff0 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
1c000 22 6e 6f 20 56 53 20 76 65 72 73 69 6f 6e 73 20  "no VS versions 
1c010 66 6f 75 6e 64 22 3b 0d 0a 20 20 20 20 20 20 20  found";..       
1c020 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
1c030 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
1c040 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
1c050 20 20 20 20 20 66 6f 72 65 61 63 68 20 28 56 65       foreach (Ve
1c060 72 73 69 6f 6e 20 76 73 56 65 72 73 69 6f 6e 20  rsion vsVersion 
1c070 69 6e 20 76 73 56 65 72 73 69 6f 6e 4c 69 73 74  in vsVersionList
1c080 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
1c090 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1c0a0 20 20 54 72 61 63 65 4f 70 73 2e 54 72 61 63 65    TraceOps.Trace
1c0b0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
1c0c0 20 20 20 20 20 20 20 54 72 61 63 65 50 72 69 6f         TracePrio
1c0d0 72 69 74 79 2e 4c 6f 77 65 72 2c 20 74 72 61 63  rity.Lower, trac
1c0e0 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e  eCallback, Strin
1c0f0 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
1c100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
1c110 76 73 56 65 72 73 69 6f 6e 20 3d 20 7b 30 7d 22  vsVersion = {0}"
1c120 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 76 73 56  , ForDisplay(vsV
1c130 65 72 73 69 6f 6e 29 29 2c 0d 0a 20 20 20 20 20  ersion)),..     
1c140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
1c150 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
1c160 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1c170 20 20 69 66 20 28 21 48 61 76 65 56 73 56 65 72    if (!HaveVsVer
1c180 73 69 6f 6e 28 72 6f 6f 74 4b 65 79 2c 20 76 73  sion(rootKey, vs
1c190 56 65 72 73 69 6f 6e 2c 20 77 68 61 74 49 66 2c  Version, whatIf,
1c1a0 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20   verbose))..    
1c1b0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
1c1c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c1d0 20 20 20 54 72 61 63 65 4f 70 73 2e 54 72 61 63     TraceOps.Trac
1c1e0 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e  e(TracePriority.
1c1f0 4c 6f 77 2c 20 74 72 61 63 65 43 61 6c 6c 62 61  Low, traceCallba
1c200 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ck,..           
1c210 20 20 20 20 20 20 20 20 20 20 20 20 20 22 56 69               "Vi
1c220 73 75 61 6c 20 53 74 75 64 69 6f 20 76 65 72 73  sual Studio vers
1c230 69 6f 6e 20 6e 6f 74 20 66 6f 75 6e 64 2c 20 73  ion not found, s
1c240 6b 69 70 70 69 6e 67 2e 2e 2e 22 2c 0d 0a 20 20  kipping...",..  
1c250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c260 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
1c270 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
1c280 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
1c290 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20  tinue;..        
1c2a0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
1c2b0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
1c2c0 28 63 61 6c 6c 62 61 63 6b 20 3d 3d 20 6e 75 6c  (callback == nul
1c2d0 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
1c2e0 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65          continue
1c2f0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
1c300 20 20 20 20 20 69 66 20 28 21 63 61 6c 6c 62 61       if (!callba
1c310 63 6b 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ck(..           
1c320 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f               roo
1c330 74 4b 65 79 2c 20 76 73 56 65 72 73 69 6f 6e 2c  tKey, vsVersion,
1c340 20 70 61 63 6b 61 67 65 49 64 2c 20 73 65 72 76   packageId, serv
1c350 69 63 65 49 64 2c 0d 0a 20 20 20 20 20 20 20 20  iceId,..        
1c360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c370 64 61 74 61 53 6f 75 72 63 65 49 64 2c 20 64 61  dataSourceId, da
1c380 74 61 50 72 6f 76 69 64 65 72 49 64 2c 20 63 6c  taProviderId, cl
1c390 69 65 6e 74 44 61 74 61 2c 20 77 68 61 74 49 66  ientData, whatIf
1c3a0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
1c3b0 20 20 20 20 20 20 20 20 20 20 20 76 65 72 62 6f             verbo
1c3c0 73 65 2c 20 72 65 66 20 65 72 72 6f 72 29 29 0d  se, ref error)).
1c3d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1c3e0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1c3f0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
1c400 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
1c410 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
1c420 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
1c430 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72         return tr
1c440 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ue;..        }..
1c450 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
1c460 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  on....        //
1c470 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c480 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c490 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c4a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c4b0 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
1c4c0 20 23 72 65 67 69 6f 6e 20 43 6f 6e 66 69 67 75   #region Configu
1c4d0 72 61 74 69 6f 6e 20 46 69 6c 65 20 48 61 6e 64  ration File Hand
1c4e0 6c 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 70 72  ling..        pr
1c4f0 69 76 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f  ivate static boo
1c500 6c 20 41 64 64 44 62 50 72 6f 76 69 64 65 72 46  l AddDbProviderF
1c510 61 63 74 6f 72 79 28 0d 0a 20 20 20 20 20 20 20  actory(..       
1c520 20 20 20 20 20 73 74 72 69 6e 67 20 66 69 6c 65       string file
1c530 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  Name,..         
1c540 20 20 20 73 74 72 69 6e 67 20 69 6e 76 61 72 69     string invari
1c550 61 6e 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ant,..          
1c560 20 20 73 74 72 69 6e 67 20 6e 61 6d 65 2c 0d 0a    string name,..
1c570 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
1c580 6e 67 20 64 65 73 63 72 69 70 74 69 6f 6e 2c 0d  ng description,.
1c590 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72  .            str
1c5a0 69 6e 67 20 74 79 70 65 4e 61 6d 65 2c 0d 0a 20  ing typeName,.. 
1c5b0 20 20 20 20 20 20 20 20 20 20 20 41 73 73 65 6d             Assem
1c5c0 62 6c 79 4e 61 6d 65 20 61 73 73 65 6d 62 6c 79  blyName assembly
1c5d0 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  Name,..         
1c5e0 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d     bool whatIf,.
1c5f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
1c600 6c 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20  l verbose,..    
1c610 20 20 20 20 20 20 20 20 72 65 66 20 62 6f 6f 6c          ref bool
1c620 20 73 61 76 65 64 2c 0d 0a 20 20 20 20 20 20 20   saved,..       
1c630 20 20 20 20 20 72 65 66 20 73 74 72 69 6e 67 20       ref string 
1c640 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20  error..         
1c650 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d     )..        {.
1c660 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
1c670 6c 20 64 69 72 74 79 20 3d 20 66 61 6c 73 65 3b  l dirty = false;
1c680 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 58 6d  ..            Xm
1c690 6c 44 6f 63 75 6d 65 6e 74 20 64 6f 63 75 6d 65  lDocument docume
1c6a0 6e 74 20 3d 20 6e 65 77 20 58 6d 6c 44 6f 63 75  nt = new XmlDocu
1c6b0 6d 65 6e 74 28 29 3b 0d 0a 0d 0a 20 20 20 20 20  ment();....     
1c6c0 20 20 20 20 20 20 20 64 6f 63 75 6d 65 6e 74 2e         document.
1c6d0 50 72 65 73 65 72 76 65 57 68 69 74 65 73 70 61  PreserveWhitespa
1c6e0 63 65 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20  ce = true;..    
1c6f0 20 20 20 20 20 20 20 20 64 6f 63 75 6d 65 6e 74          document
1c700 2e 4c 6f 61 64 28 66 69 6c 65 4e 61 6d 65 29 3b  .Load(fileName);
1c710 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1c720 58 6d 6c 45 6c 65 6d 65 6e 74 20 65 6c 65 6d 65  XmlElement eleme
1c730 6e 74 20 3d 20 64 6f 63 75 6d 65 6e 74 2e 53 65  nt = document.Se
1c740 6c 65 63 74 53 69 6e 67 6c 65 4e 6f 64 65 28 53  lectSingleNode(S
1c750 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
1c760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 58                 X
1c770 50 61 74 68 46 6f 72 41 64 64 45 6c 65 6d 65 6e  PathForAddElemen
1c780 74 2c 20 69 6e 76 61 72 69 61 6e 74 29 29 20 61  t, invariant)) a
1c790 73 20 58 6d 6c 45 6c 65 6d 65 6e 74 3b 0d 0a 0d  s XmlElement;...
1c7a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
1c7b0 28 65 6c 65 6d 65 6e 74 20 3d 3d 20 6e 75 6c 6c  (element == null
1c7c0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
1c7d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1c7e0 20 20 73 74 72 69 6e 67 5b 5d 20 65 6c 65 6d 65    string[] eleme
1c7f0 6e 74 4e 61 6d 65 73 20 3d 20 7b 0d 0a 20 20 20  ntNames = {..   
1c800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c810 20 20 20 20 20 22 73 79 73 74 65 6d 2e 64 61 74       "system.dat
1c820 61 22 2c 20 22 44 62 50 72 6f 76 69 64 65 72 46  a", "DbProviderF
1c830 61 63 74 6f 72 69 65 73 22 0d 0a 20 20 20 20 20  actories"..     
1c840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
1c850 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
1c860 20 20 20 20 20 58 6d 6c 45 6c 65 6d 65 6e 74 20       XmlElement 
1c870 70 72 65 76 69 6f 75 73 45 6c 65 6d 65 6e 74 20  previousElement 
1c880 3d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  =..             
1c890 20 20 20 20 20 20 20 64 6f 63 75 6d 65 6e 74 2e         document.
1c8a0 44 6f 63 75 6d 65 6e 74 45 6c 65 6d 65 6e 74 3b  DocumentElement;
1c8b0 20 2f 2a 20 63 6f 6e 66 69 67 75 72 61 74 69 6f   /* configuratio
1c8c0 6e 20 2a 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  n */....        
1c8d0 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20          foreach 
1c8e0 28 73 74 72 69 6e 67 20 65 6c 65 6d 65 6e 74 4e  (string elementN
1c8f0 61 6d 65 20 69 6e 20 65 6c 65 6d 65 6e 74 4e 61  ame in elementNa
1c900 6d 65 73 29 0d 0a 20 20 20 20 20 20 20 20 20 20  mes)..          
1c910 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1c920 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 65               ele
1c930 6d 65 6e 74 20 3d 20 70 72 65 76 69 6f 75 73 45  ment = previousE
1c940 6c 65 6d 65 6e 74 2e 53 65 6c 65 63 74 53 69 6e  lement.SelectSin
1c950 67 6c 65 4e 6f 64 65 28 0d 0a 20 20 20 20 20 20  gleNode(..      
1c960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c970 20 20 65 6c 65 6d 65 6e 74 4e 61 6d 65 29 20 61    elementName) a
1c980 73 20 58 6d 6c 45 6c 65 6d 65 6e 74 3b 0d 0a 0d  s XmlElement;...
1c990 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1c9a0 20 20 20 20 20 69 66 20 28 65 6c 65 6d 65 6e 74       if (element
1c9b0 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
1c9c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
1c9d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1c9e0 20 20 20 20 20 20 20 20 20 20 65 6c 65 6d 65 6e            elemen
1c9f0 74 20 3d 20 64 6f 63 75 6d 65 6e 74 2e 43 72 65  t = document.Cre
1ca00 61 74 65 45 6c 65 6d 65 6e 74 28 0d 0a 20 20 20  ateElement(..   
1ca10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ca20 20 20 20 20 20 20 20 20 20 65 6c 65 6d 65 6e 74           element
1ca30 4e 61 6d 65 2c 20 53 74 72 69 6e 67 2e 45 6d 70  Name, String.Emp
1ca40 74 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ty);....        
1ca50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ca60 70 72 65 76 69 6f 75 73 45 6c 65 6d 65 6e 74 2e  previousElement.
1ca70 41 70 70 65 6e 64 43 68 69 6c 64 28 65 6c 65 6d  AppendChild(elem
1ca80 65 6e 74 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ent);..         
1ca90 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
1caa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cab0 20 20 20 20 70 72 65 76 69 6f 75 73 45 6c 65 6d      previousElem
1cac0 65 6e 74 20 3d 20 65 6c 65 6d 65 6e 74 3b 0d 0a  ent = element;..
1cad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cae0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
1caf0 20 20 20 20 20 65 6c 65 6d 65 6e 74 20 3d 20 64       element = d
1cb00 6f 63 75 6d 65 6e 74 2e 43 72 65 61 74 65 45 6c  ocument.CreateEl
1cb10 65 6d 65 6e 74 28 0d 0a 20 20 20 20 20 20 20 20  ement(..        
1cb20 20 20 20 20 20 20 20 20 20 20 20 20 22 61 64 64              "add
1cb30 22 2c 20 53 74 72 69 6e 67 2e 45 6d 70 74 79 29  ", String.Empty)
1cb40 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
1cb50 20 20 20 20 20 70 72 65 76 69 6f 75 73 45 6c 65       previousEle
1cb60 6d 65 6e 74 2e 41 70 70 65 6e 64 43 68 69 6c 64  ment.AppendChild
1cb70 28 65 6c 65 6d 65 6e 74 29 3b 0d 0a 0d 0a 20 20  (element);....  
1cb80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 69                di
1cb90 72 74 79 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20  rty = true;..   
1cba0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
1cbb0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21 53            if (!S
1cbc0 74 72 69 6e 67 2e 45 71 75 61 6c 73 28 65 6c 65  tring.Equals(ele
1cbd0 6d 65 6e 74 2e 47 65 74 41 74 74 72 69 62 75 74  ment.GetAttribut
1cbe0 65 28 22 6e 61 6d 65 22 29 2c 0d 0a 20 20 20 20  e("name"),..    
1cbf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cc00 6e 61 6d 65 2c 20 53 74 72 69 6e 67 43 6f 6d 70  name, StringComp
1cc10 61 72 69 73 6f 6e 2e 49 6e 76 61 72 69 61 6e 74  arison.Invariant
1cc20 43 75 6c 74 75 72 65 29 29 0d 0a 20 20 20 20 20  Culture))..     
1cc30 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
1cc40 20 20 20 20 20 20 20 20 20 20 65 6c 65 6d 65 6e            elemen
1cc50 74 2e 53 65 74 41 74 74 72 69 62 75 74 65 28 22  t.SetAttribute("
1cc60 6e 61 6d 65 22 2c 20 6e 61 6d 65 29 3b 0d 0a 20  name", name);.. 
1cc70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
1cc80 69 72 74 79 20 3d 20 74 72 75 65 3b 0d 0a 20 20  irty = true;..  
1cc90 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
1cca0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21             if (!
1ccb0 53 74 72 69 6e 67 2e 45 71 75 61 6c 73 28 65 6c  String.Equals(el
1ccc0 65 6d 65 6e 74 2e 47 65 74 41 74 74 72 69 62 75  ement.GetAttribu
1ccd0 74 65 28 22 69 6e 76 61 72 69 61 6e 74 22 29 2c  te("invariant"),
1cce0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1ccf0 20 20 20 20 20 20 69 6e 76 61 72 69 61 6e 74 2c        invariant,
1cd00 20 53 74 72 69 6e 67 43 6f 6d 70 61 72 69 73 6f   StringCompariso
1cd10 6e 2e 49 6e 76 61 72 69 61 6e 74 43 75 6c 74 75  n.InvariantCultu
1cd20 72 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  re))..          
1cd30 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
1cd40 20 20 20 20 20 65 6c 65 6d 65 6e 74 2e 53 65 74       element.Set
1cd50 41 74 74 72 69 62 75 74 65 28 22 69 6e 76 61 72  Attribute("invar
1cd60 69 61 6e 74 22 2c 20 69 6e 76 61 72 69 61 6e 74  iant", invariant
1cd70 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
1cd80 20 20 20 20 64 69 72 74 79 20 3d 20 74 72 75 65      dirty = true
1cd90 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
1cda0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1cdb0 69 66 20 28 21 53 74 72 69 6e 67 2e 45 71 75 61  if (!String.Equa
1cdc0 6c 73 28 65 6c 65 6d 65 6e 74 2e 47 65 74 41 74  ls(element.GetAt
1cdd0 74 72 69 62 75 74 65 28 22 64 65 73 63 72 69 70  tribute("descrip
1cde0 74 69 6f 6e 22 29 2c 0d 0a 20 20 20 20 20 20 20  tion"),..       
1cdf0 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65 73               des
1ce00 63 72 69 70 74 69 6f 6e 2c 20 53 74 72 69 6e 67  cription, String
1ce10 43 6f 6d 70 61 72 69 73 6f 6e 2e 49 6e 76 61 72  Comparison.Invar
1ce20 69 61 6e 74 43 75 6c 74 75 72 65 29 29 0d 0a 20  iantCulture)).. 
1ce30 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
1ce40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c                el
1ce50 65 6d 65 6e 74 2e 53 65 74 41 74 74 72 69 62 75  ement.SetAttribu
1ce60 74 65 28 22 64 65 73 63 72 69 70 74 69 6f 6e 22  te("description"
1ce70 2c 20 64 65 73 63 72 69 70 74 69 6f 6e 29 3b 0d  , description);.
1ce80 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1ce90 20 64 69 72 74 79 20 3d 20 74 72 75 65 3b 0d 0a   dirty = true;..
1cea0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
1ceb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72  .            str
1cec0 69 6e 67 20 66 75 6c 6c 54 79 70 65 4e 61 6d 65  ing fullTypeName
1ced0 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74   = String.Format
1cee0 28 22 7b 30 7d 2c 20 7b 31 7d 22 2c 0d 0a 20 20  ("{0}, {1}",..  
1cef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 79                ty
1cf00 70 65 4e 61 6d 65 2c 20 61 73 73 65 6d 62 6c 79  peName, assembly
1cf10 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  Name);....      
1cf20 20 20 20 20 20 20 69 66 20 28 21 53 74 72 69 6e        if (!Strin
1cf30 67 2e 45 71 75 61 6c 73 28 65 6c 65 6d 65 6e 74  g.Equals(element
1cf40 2e 47 65 74 41 74 74 72 69 62 75 74 65 28 22 74  .GetAttribute("t
1cf50 79 70 65 22 29 2c 0d 0a 20 20 20 20 20 20 20 20  ype"),..        
1cf60 20 20 20 20 20 20 20 20 20 20 20 20 66 75 6c 6c              full
1cf70 54 79 70 65 4e 61 6d 65 2c 20 53 74 72 69 6e 67  TypeName, String
1cf80 43 6f 6d 70 61 72 69 73 6f 6e 2e 49 6e 76 61 72  Comparison.Invar
1cf90 69 61 6e 74 43 75 6c 74 75 72 65 29 29 0d 0a 20  iantCulture)).. 
1cfa0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
1cfb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c                el
1cfc0 65 6d 65 6e 74 2e 53 65 74 41 74 74 72 69 62 75  ement.SetAttribu
1cfd0 74 65 28 22 74 79 70 65 22 2c 20 66 75 6c 6c 54  te("type", fullT
1cfe0 79 70 65 4e 61 6d 65 29 3b 0d 0a 20 20 20 20 20  ypeName);..     
1cff0 20 20 20 20 20 20 20 20 20 20 20 64 69 72 74 79             dirty
1d000 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20   = true;..      
1d010 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
1d020 20 20 20 20 20 20 20 69 66 20 28 64 69 72 74 79         if (dirty
1d030 20 7c 7c 20 77 68 61 74 49 66 29 0d 0a 20 20 20   || whatIf)..   
1d040 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
1d050 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
1d060 76 65 72 62 6f 73 65 29 0d 0a 20 20 20 20 20 20  verbose)..      
1d070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
1d080 61 63 65 4f 70 73 2e 54 72 61 63 65 28 0d 0a 20  aceOps.Trace(.. 
1d090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d0a0 20 20 20 20 20 20 20 54 72 61 63 65 50 72 69 6f         TracePrio
1d0b0 72 69 74 79 2e 48 69 67 68 65 73 74 2c 20 74 72  rity.Highest, tr
1d0c0 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72  aceCallback, Str
1d0d0 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
1d0e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d0f0 20 20 20 20 20 22 65 6c 65 6d 65 6e 74 20 3d 20       "element = 
1d100 7b 30 7d 22 2c 20 46 6f 72 44 69 73 70 6c 61 79  {0}", ForDisplay
1d110 28 65 6c 65 6d 65 6e 74 29 29 2c 20 74 72 61 63  (element)), trac
1d120 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
1d130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
1d140 66 20 28 21 77 68 61 74 49 66 29 0d 0a 20 20 20  f (!whatIf)..   
1d150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d160 20 64 6f 63 75 6d 65 6e 74 2e 53 61 76 65 28 66   document.Save(f
1d170 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20  ileName);....   
1d180 20 20 20 20 20 20 20 20 20 20 20 20 20 73 61 76               sav
1d190 65 64 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20  ed = true;..    
1d1a0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
1d1b0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
1d1c0 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d  true;..        }
1d1d0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
1d1e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d1f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d200 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d210 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d220 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70  ///....        p
1d230 72 69 76 61 74 65 20 73 74 61 74 69 63 20 62 6f  rivate static bo
1d240 6f 6c 20 52 65 6d 6f 76 65 44 62 50 72 6f 76 69  ol RemoveDbProvi
1d250 64 65 72 46 61 63 74 6f 72 79 28 0d 0a 20 20 20  derFactory(..   
1d260 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
1d270 66 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20  fileName,..     
1d280 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 69 6e         string in
1d290 76 61 72 69 61 6e 74 2c 0d 0a 20 20 20 20 20 20  variant,..      
1d2a0 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49        bool whatI
1d2b0 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f,..            
1d2c0 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a 20  bool verbose,.. 
1d2d0 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20 62             ref b
1d2e0 6f 6f 6c 20 73 61 76 65 64 2c 0d 0a 20 20 20 20  ool saved,..    
1d2f0 20 20 20 20 20 20 20 20 72 65 66 20 73 74 72 69          ref stri
1d300 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20  ng error..      
1d310 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
1d320 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1d330 62 6f 6f 6c 20 64 69 72 74 79 20 3d 20 66 61 6c  bool dirty = fal
1d340 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se;..           
1d350 20 58 6d 6c 44 6f 63 75 6d 65 6e 74 20 64 6f 63   XmlDocument doc
1d360 75 6d 65 6e 74 20 3d 20 6e 65 77 20 58 6d 6c 44  ument = new XmlD
1d370 6f 63 75 6d 65 6e 74 28 29 3b 0d 0a 0d 0a 20 20  ocument();....  
1d380 20 20 20 20 20 20 20 20 20 20 64 6f 63 75 6d 65            docume
1d390 6e 74 2e 50 72 65 73 65 72 76 65 57 68 69 74 65  nt.PreserveWhite
1d3a0 73 70 61 63 65 20 3d 20 74 72 75 65 3b 0d 0a 20  space = true;.. 
1d3b0 20 20 20 20 20 20 20 20 20 20 20 64 6f 63 75 6d             docum
1d3c0 65 6e 74 2e 4c 6f 61 64 28 66 69 6c 65 4e 61 6d  ent.Load(fileNam
1d3d0 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
1d3e0 20 20 20 58 6d 6c 45 6c 65 6d 65 6e 74 20 65 6c     XmlElement el
1d3f0 65 6d 65 6e 74 20 3d 20 64 6f 63 75 6d 65 6e 74  ement = document
1d400 2e 53 65 6c 65 63 74 53 69 6e 67 6c 65 4e 6f 64  .SelectSingleNod
1d410 65 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  e(String.Format(
1d420 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1d430 20 20 58 50 61 74 68 46 6f 72 41 64 64 45 6c 65    XPathForAddEle
1d440 6d 65 6e 74 2c 20 69 6e 76 61 72 69 61 6e 74 29  ment, invariant)
1d450 29 20 61 73 20 58 6d 6c 45 6c 65 6d 65 6e 74 3b  ) as XmlElement;
1d460 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1d470 69 66 20 28 65 6c 65 6d 65 6e 74 20 21 3d 20 6e  if (element != n
1d480 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
1d490 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
1d4a0 20 20 20 20 20 65 6c 65 6d 65 6e 74 2e 50 61 72       element.Par
1d4b0 65 6e 74 4e 6f 64 65 2e 52 65 6d 6f 76 65 43 68  entNode.RemoveCh
1d4c0 69 6c 64 28 65 6c 65 6d 65 6e 74 29 3b 0d 0a 20  ild(element);.. 
1d4d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
1d4e0 69 72 74 79 20 3d 20 74 72 75 65 3b 0d 0a 20 20  irty = true;..  
1d4f0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
1d500 20 20 20 20 20 20 20 20 20 20 20 65 6c 65 6d 65             eleme
1d510 6e 74 20 3d 20 64 6f 63 75 6d 65 6e 74 2e 53 65  nt = document.Se
1d520 6c 65 63 74 53 69 6e 67 6c 65 4e 6f 64 65 28 53  lectSingleNode(S
1d530 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
1d540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 58                 X
1d550 50 61 74 68 46 6f 72 52 65 6d 6f 76 65 45 6c 65  PathForRemoveEle
1d560 6d 65 6e 74 2c 20 69 6e 76 61 72 69 61 6e 74 29  ment, invariant)
1d570 29 20 61 73 20 58 6d 6c 45 6c 65 6d 65 6e 74 3b  ) as XmlElement;
1d580 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1d590 69 66 20 28 65 6c 65 6d 65 6e 74 20 21 3d 20 6e  if (element != n
1d5a0 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
1d5b0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
1d5c0 20 20 20 20 20 65 6c 65 6d 65 6e 74 2e 50 61 72       element.Par
1d5d0 65 6e 74 4e 6f 64 65 2e 52 65 6d 6f 76 65 43 68  entNode.RemoveCh
1d5e0 69 6c 64 28 65 6c 65 6d 65 6e 74 29 3b 0d 0a 20  ild(element);.. 
1d5f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
1d600 69 72 74 79 20 3d 20 74 72 75 65 3b 0d 0a 20 20  irty = true;..  
1d610 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
1d620 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 64             if (d
1d630 69 72 74 79 20 7c 7c 20 77 68 61 74 49 66 29 0d  irty || whatIf).
1d640 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
1d650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d660 69 66 20 28 76 65 72 62 6f 73 65 29 0d 0a 20 20  if (verbose)..  
1d670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d680 20 20 54 72 61 63 65 4f 70 73 2e 54 72 61 63 65    TraceOps.Trace
1d690 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
1d6a0 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
1d6b0 50 72 69 6f 72 69 74 79 2e 48 69 67 68 65 73 74  Priority.Highest
1d6c0 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c  , traceCallback,
1d6d0 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
1d6e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1d6f0 20 20 20 20 20 20 20 20 20 22 65 6c 65 6d 65 6e           "elemen
1d700 74 20 3d 20 7b 30 7d 22 2c 20 46 6f 72 44 69 73  t = {0}", ForDis
1d710 70 6c 61 79 28 65 6c 65 6d 65 6e 74 29 29 2c 20  play(element)), 
1d720 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
1d730 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1d740 20 20 20 69 66 20 28 21 77 68 61 74 49 66 29 0d     if (!whatIf).
1d750 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1d760 20 20 20 20 20 64 6f 63 75 6d 65 6e 74 2e 53 61       document.Sa
1d770 76 65 28 66 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d  ve(fileName);...
1d780 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1d790 20 73 61 76 65 64 20 3d 20 74 72 75 65 3b 0d 0a   saved = true;..
1d7a0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
1d7b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
1d7c0 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20  urn true;..     
1d7d0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
1d7e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d7f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d800 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d810 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d820 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
1d830 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
1d840 63 20 62 6f 6f 6c 20 50 72 6f 63 65 73 73 44 62  c bool ProcessDb
1d850 50 72 6f 76 69 64 65 72 46 61 63 74 6f 72 79 28  ProviderFactory(
1d860 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
1d870 72 69 6e 67 20 66 69 6c 65 4e 61 6d 65 2c 0d 0a  ring fileName,..
1d880 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
1d890 6e 67 20 69 6e 76 61 72 69 61 6e 74 2c 0d 0a 20  ng invariant,.. 
1d8a0 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
1d8b0 67 20 6e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20  g name,..       
1d8c0 20 20 20 20 20 73 74 72 69 6e 67 20 64 65 73 63       string desc
1d8d0 72 69 70 74 69 6f 6e 2c 0d 0a 20 20 20 20 20 20  ription,..      
1d8e0 20 20 20 20 20 20 73 74 72 69 6e 67 20 74 79 70        string typ
1d8f0 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20  eName,..        
1d900 20 20 20 20 41 73 73 65 6d 62 6c 79 4e 61 6d 65      AssemblyName
1d910 20 61 73 73 65 6d 62 6c 79 4e 61 6d 65 2c 0d 0a   assemblyName,..
1d920 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65              obje
1d930 63 74 20 63 6c 69 65 6e 74 44 61 74 61 2c 0d 0a  ct clientData,..
1d940 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
1d950 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20   whatIf,..      
1d960 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f        bool verbo
1d970 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se,..           
1d980 20 72 65 66 20 62 6f 6f 6c 20 73 61 76 65 64 2c   ref bool saved,
1d990 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
1d9a0 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a  f string error..
1d9b0 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
1d9c0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
1d9d0 20 20 20 20 20 20 41 6e 79 50 61 69 72 3c 73 74        AnyPair<st
1d9e0 72 69 6e 67 2c 20 62 6f 6f 6c 3e 20 70 61 69 72  ring, bool> pair
1d9f0 20 3d 20 63 6c 69 65 6e 74 44 61 74 61 20 61 73   = clientData as
1da00 20 41 6e 79 50 61 69 72 3c 73 74 72 69 6e 67 2c   AnyPair<string,
1da10 20 62 6f 6f 6c 3e 3b 0d 0a 0d 0a 20 20 20 20 20   bool>;....     
1da20 20 20 20 20 20 20 20 69 66 20 28 70 61 69 72 20         if (pair 
1da30 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
1da40 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1da50 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
1da60 20 22 69 6e 76 61 6c 69 64 20 66 72 61 6d 65 77   "invalid framew
1da70 6f 72 6b 20 63 6f 6e 66 69 67 20 63 61 6c 6c 62  ork config callb
1da80 61 63 6b 20 64 61 74 61 22 3b 0d 0a 20 20 20 20  ack data";..    
1da90 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
1daa0 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
1dab0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
1dac0 20 20 20 20 20 20 20 20 69 66 20 28 70 61 69 72          if (pair
1dad0 2e 59 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  .Y)..           
1dae0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1daf0 20 20 20 20 72 65 74 75 72 6e 20 52 65 6d 6f 76      return Remov
1db00 65 44 62 50 72 6f 76 69 64 65 72 46 61 63 74 6f  eDbProviderFacto
1db10 72 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ry(..           
1db20 20 20 20 20 20 20 20 20 20 66 69 6c 65 4e 61 6d           fileNam
1db30 65 2c 20 69 6e 76 61 72 69 61 6e 74 2c 20 77 68  e, invariant, wh
1db40 61 74 49 66 2c 20 76 65 72 62 6f 73 65 2c 20 72  atIf, verbose, r
1db50 65 66 20 73 61 76 65 64 2c 0d 0a 20 20 20 20 20  ef saved,..     
1db60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
1db70 65 66 20 65 72 72 6f 72 29 20 26 26 0d 0a 20 20  ef error) &&..  
1db80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 41 64                Ad
1db90 64 44 62 50 72 6f 76 69 64 65 72 46 61 63 74 6f  dDbProviderFacto
1dba0 72 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ry(..           
1dbb0 20 20 20 20 20 20 20 20 20 66 69 6c 65 4e 61 6d           fileNam
1dbc0 65 2c 20 69 6e 76 61 72 69 61 6e 74 2c 20 6e 61  e, invariant, na
1dbd0 6d 65 2c 20 64 65 73 63 72 69 70 74 69 6f 6e 2c  me, description,
1dbe0 20 74 79 70 65 4e 61 6d 65 2c 0d 0a 20 20 20 20   typeName,..    
1dbf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dc00 61 73 73 65 6d 62 6c 79 4e 61 6d 65 2c 20 77 68  assemblyName, wh
1dc10 61 74 49 66 2c 20 76 65 72 62 6f 73 65 2c 20 72  atIf, verbose, r
1dc20 65 66 20 73 61 76 65 64 2c 20 72 65 66 20 65 72  ef saved, ref er
1dc30 72 6f 72 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ror);..         
1dc40 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
1dc50 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20    else..        
1dc60 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1dc70 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 52 65         return Re
1dc80 6d 6f 76 65 44 62 50 72 6f 76 69 64 65 72 46 61  moveDbProviderFa
1dc90 63 74 6f 72 79 28 0d 0a 20 20 20 20 20 20 20 20  ctory(..        
1dca0 20 20 20 20 20 20 20 20 20 20 20 20 66 69 6c 65              file
1dcb0 4e 61 6d 65 2c 20 69 6e 76 61 72 69 61 6e 74 2c  Name, invariant,
1dcc0 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65   whatIf, verbose
1dcd0 2c 20 72 65 66 20 73 61 76 65 64 2c 0d 0a 20 20  , ref saved,..  
1dce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dcf0 20 20 72 65 66 20 65 72 72 6f 72 29 3b 0d 0a 20    ref error);.. 
1dd00 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
1dd10 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
1dd20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
1dd30 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
1dd40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1dd50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1dd60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1dd70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
1dd80 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f  ..        #regio
1dd90 6e 20 41 73 73 65 6d 62 6c 79 20 46 6f 6c 64 65  n Assembly Folde
1dda0 72 73 20 48 61 6e 64 6c 69 6e 67 0d 0a 20 20 20  rs Handling..   
1ddb0 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61       private sta
1ddc0 74 69 63 20 73 74 72 69 6e 67 20 47 65 74 41 73  tic string GetAs
1ddd0 73 65 6d 62 6c 79 46 6f 6c 64 65 72 73 4b 65 79  semblyFoldersKey
1dde0 4e 61 6d 65 28 0d 0a 20 20 20 20 20 20 20 20 20  Name(..         
1ddf0 20 20 20 73 74 72 69 6e 67 20 66 72 61 6d 65 77     string framew
1de00 6f 72 6b 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20  orkName,..      
1de10 20 20 20 20 20 20 56 65 72 73 69 6f 6e 20 66 72        Version fr
1de20 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 0d  ameworkVersion,.
1de30 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72  .            str
1de40 69 6e 67 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65  ing platformName
1de50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d  ..            ).
1de60 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
1de70 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 66          string f
1de80 6f 72 6d 61 74 20 3d 20 21 53 74 72 69 6e 67 2e  ormat = !String.
1de90 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 70 6c  IsNullOrEmpty(pl
1dea0 61 74 66 6f 72 6d 4e 61 6d 65 29 20 3f 0d 0a 20  atformName) ?.. 
1deb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
1dec0 53 6f 66 74 77 61 72 65 5c 5c 4d 69 63 72 6f 73  Software\\Micros
1ded0 6f 66 74 5c 5c 7b 30 7d 5c 5c 76 7b 31 7d 5c 5c  oft\\{0}\\v{1}\\
1dee0 7b 32 7d 5c 5c 41 73 73 65 6d 62 6c 79 46 6f 6c  {2}\\AssemblyFol
1def0 64 65 72 73 45 78 22 20 3a 0d 0a 20 20 20 20 20  dersEx" :..     
1df00 20 20 20 20 20 20 20 20 20 20 20 22 53 6f 66 74             "Soft
1df10 77 61 72 65 5c 5c 4d 69 63 72 6f 73 6f 66 74 5c  ware\\Microsoft\
1df20 5c 7b 30 7d 5c 5c 76 7b 31 7d 5c 5c 41 73 73 65  \{0}\\v{1}\\Asse
1df30 6d 62 6c 79 46 6f 6c 64 65 72 73 45 78 22 3b 0d  mblyFoldersEx";.
1df40 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ...            r
1df50 65 74 75 72 6e 20 53 74 72 69 6e 67 2e 46 6f 72  eturn String.For
1df60 6d 61 74 28 66 6f 72 6d 61 74 2c 20 66 72 61 6d  mat(format, fram
1df70 65 77 6f 72 6b 4e 61 6d 65 2c 20 66 72 61 6d 65  eworkName, frame
1df80 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 0d 0a 20 20  workVersion,..  
1df90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 6c                pl
1dfa0 61 74 66 6f 72 6d 4e 61 6d 65 29 3b 0d 0a 20 20  atformName);..  
1dfb0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
1dfc0 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
1dfd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1dfe0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1dff0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e000 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
1e010 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
1e020 61 74 69 63 20 62 6f 6f 6c 20 41 64 64 54 6f 41  atic bool AddToA
1e030 73 73 65 6d 62 6c 79 46 6f 6c 64 65 72 73 28 0d  ssemblyFolders(.
1e040 0a 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67  .            Reg
1e050 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79  istryKey rootKey
1e060 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  ,..            s
1e070 74 72 69 6e 67 20 66 72 61 6d 65 77 6f 72 6b 4e  tring frameworkN
1e080 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ame,..          
1e090 20 20 56 65 72 73 69 6f 6e 20 66 72 61 6d 65 77    Version framew
1e0a0 6f 72 6b 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20  orkVersion,..   
1e0b0 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
1e0c0 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c 0d 0a 20  platformName,.. 
1e0d0 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
1e0e0 67 20 73 75 62 4b 65 79 4e 61 6d 65 2c 0d 0a 20  g subKeyName,.. 
1e0f0 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
1e100 67 20 64 69 72 65 63 74 6f 72 79 2c 0d 0a 20 20  g directory,..  
1e110 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77            bool w
1e120 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20  hatIf,..        
1e130 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65      bool verbose
1e140 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ,..            r
1e150 65 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72 0d  ef string error.
1e160 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a  .            )..
1e170 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
1e180 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6b 65         string ke
1e190 79 4e 61 6d 65 20 3d 20 47 65 74 41 73 73 65 6d  yName = GetAssem
1e1a0 62 6c 79 46 6f 6c 64 65 72 73 4b 65 79 4e 61 6d  blyFoldersKeyNam
1e1b0 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
1e1c0 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d      frameworkNam
1e1d0 65 2c 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73  e, frameworkVers
1e1e0 69 6f 6e 2c 20 70 6c 61 74 66 6f 72 6d 4e 61 6d  ion, platformNam
1e1f0 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
1e200 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65     using (MockRe
1e210 67 69 73 74 72 79 4b 65 79 20 6b 65 79 20 3d 20  gistryKey key = 
1e220 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 4f  RegistryHelper.O
1e230 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20  penSubKey(..    
1e240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e250 72 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e 61 6d 65  rootKey, keyName
1e260 2c 20 74 72 75 65 2c 20 77 68 61 74 49 66 2c 20  , true, whatIf, 
1e270 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20  verbose))..     
1e280 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
1e290 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6b 65            if (ke
1e2a0 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  y == null)..    
1e2b0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
1e2c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e2d0 20 20 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e     error = Strin
1e2e0 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
1e2f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e300 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20 6f 70     "could not op
1e310 65 6e 20 72 65 67 69 73 74 72 79 20 6b 65 79 3a  en registry key:
1e320 20 7b 30 7d 5c 5c 7b 31 7d 22 2c 0d 0a 20 20 20   {0}\\{1}",..   
1e330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e340 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 6b 65       rootKey, ke
1e350 79 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  yName);....     
1e360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
1e370 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
1e380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
1e390 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1e3a0 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65     using (MockRe
1e3b0 67 69 73 74 72 79 4b 65 79 20 73 75 62 4b 65 79  gistryKey subKey
1e3c0 20 3d 20 52 65 67 69 73 74 72 79 48 65 6c 70 65   = RegistryHelpe
1e3d0 72 2e 43 72 65 61 74 65 53 75 62 4b 65 79 28 0d  r.CreateSubKey(.
1e3e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1e3f0 20 20 20 20 20 20 20 20 20 6b 65 79 2c 20 73 75           key, su
1e400 62 4b 65 79 4e 61 6d 65 2c 20 77 68 61 74 49 66  bKeyName, whatIf
1e410 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20  , verbose))..   
1e420 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
1e430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e440 20 20 20 20 69 66 20 28 73 75 62 4b 65 79 20 3d      if (subKey =
1e450 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
1e460 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
1e470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e480 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
1e490 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
1e4a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e4b0 20 20 20 20 20 20 20 20 20 20 20 20 22 63 6f 75              "cou
1e4c0 6c 64 20 6e 6f 74 20 63 72 65 61 74 65 20 72 65  ld not create re
1e4d0 67 69 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c  gistry key: {0}\
1e4e0 5c 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20  \{1}",..        
1e4f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e500 20 20 20 20 6b 65 79 2c 20 73 75 62 4b 65 79 4e      key, subKeyN
1e510 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ame);....       
1e520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e530 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
1e540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e550 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
1e560 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67               Reg
1e570 69 73 74 72 79 48 65 6c 70 65 72 2e 53 65 74 56  istryHelper.SetV
1e580 61 6c 75 65 28 0d 0a 20 20 20 20 20 20 20 20 20  alue(..         
1e590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
1e5a0 75 62 4b 65 79 2c 20 6e 75 6c 6c 2c 20 64 69 72  ubKey, null, dir
1e5b0 65 63 74 6f 72 79 2c 20 77 68 61 74 49 66 2c 20  ectory, whatIf, 
1e5c0 76 65 72 62 6f 73 65 29 3b 0d 0a 20 20 20 20 20  verbose);..     
1e5d0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
1e5e0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
1e5f0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
1e600 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20  n true;..       
1e610 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f   }....        //
1e620 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e630 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e640 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e650 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e660 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
1e670 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
1e680 62 6f 6f 6c 20 52 65 6d 6f 76 65 46 72 6f 6d 41  bool RemoveFromA
1e690 73 73 65 6d 62 6c 79 46 6f 6c 64 65 72 73 28 0d  ssemblyFolders(.
1e6a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67  .            Reg
1e6b0 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79  istryKey rootKey
1e6c0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  ,..            s
1e6d0 74 72 69 6e 67 20 66 72 61 6d 65 77 6f 72 6b 4e  tring frameworkN
1e6e0 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ame,..          
1e6f0 20 20 56 65 72 73 69 6f 6e 20 66 72 61 6d 65 77    Version framew
1e700 6f 72 6b 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20  orkVersion,..   
1e710 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
1e720 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c 0d 0a 20  platformName,.. 
1e730 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
1e740 67 20 73 75 62 4b 65 79 4e 61 6d 65 2c 0d 0a 20  g subKeyName,.. 
1e750 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
1e760 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20  whatIf,..       
1e770 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73       bool verbos
1e780 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
1e790 72 65 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72  ref string error
1e7a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d  ..            ).
1e7b0 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
1e7c0 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6b          string k
1e7d0 65 79 4e 61 6d 65 20 3d 20 47 65 74 41 73 73 65  eyName = GetAsse
1e7e0 6d 62 6c 79 46 6f 6c 64 65 72 73 4b 65 79 4e 61  mblyFoldersKeyNa
1e7f0 6d 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me(..           
1e800 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4e 61       frameworkNa
1e810 6d 65 2c 20 66 72 61 6d 65 77 6f 72 6b 56 65 72  me, frameworkVer
1e820 73 69 6f 6e 2c 20 70 6c 61 74 66 6f 72 6d 4e 61  sion, platformNa
1e830 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  me);....        
1e840 20 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52      using (MockR
1e850 65 67 69 73 74 72 79 4b 65 79 20 6b 65 79 20 3d  egistryKey key =
1e860 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e   RegistryHelper.
1e870 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20  OpenSubKey(..   
1e880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e890 20 72 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e 61 6d   rootKey, keyNam
1e8a0 65 2c 20 66 61 6c 73 65 2c 20 77 68 61 74 49 66  e, false, whatIf
1e8b0 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20  , verbose))..   
1e8c0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
1e8d0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
1e8e0 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  key == null)..  
1e8f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
1e900 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1e910 20 20 20 20 20 65 72 72 6f 72 20 3d 20 53 74 72       error = Str
1e920 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
1e930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e940 20 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20       "could not 
1e950 6f 70 65 6e 20 72 65 67 69 73 74 72 79 20 6b 65  open registry ke
1e960 79 3a 20 7b 30 7d 5c 5c 7b 31 7d 22 2c 0d 0a 20  y: {0}\\{1}",.. 
1e970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e980 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20         rootKey, 
1e990 6b 65 79 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20  keyName);....   
1e9a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e9b0 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
1e9c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e9d0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
1e9e0 20 20 20 20 20 52 65 67 69 73 74 72 79 48 65 6c       RegistryHel
1e9f0 70 65 72 2e 44 65 6c 65 74 65 53 75 62 4b 65 79  per.DeleteSubKey
1ea00 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
1ea10 20 20 20 20 20 20 20 6b 65 79 2c 20 73 75 62 4b         key, subK
1ea20 65 79 4e 61 6d 65 2c 20 77 68 61 74 49 66 2c 20  eyName, whatIf, 
1ea30 76 65 72 62 6f 73 65 29 3b 0d 0a 20 20 20 20 20  verbose);..     
1ea40 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
1ea50 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74          return t
1ea60 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  rue;..        }.
1ea70 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
1ea80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ea90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1eaa0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1eab0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1eac0 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72  //....        pr
1ead0 69 76 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f  ivate static boo
1eae0 6c 20 50 72 6f 63 65 73 73 41 73 73 65 6d 62 6c  l ProcessAssembl
1eaf0 79 46 6f 6c 64 65 72 73 28 0d 0a 20 20 20 20 20  yFolders(..     
1eb00 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79 4b         RegistryK
1eb10 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20  ey rootKey,..   
1eb20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
1eb30 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 0d 0a  frameworkName,..
1eb40 20 20 20 20 20 20 20 20 20 20 20 20 56 65 72 73              Vers
1eb50 69 6f 6e 20 66 72 61 6d 65 77 6f 72 6b 56 65 72  ion frameworkVer
1eb60 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20  sion,..         
1eb70 20 20 20 73 74 72 69 6e 67 20 70 6c 61 74 66 6f     string platfo
1eb80 72 6d 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20  rmName,..       
1eb90 20 20 20 20 20 6f 62 6a 65 63 74 20 63 6c 69 65       object clie
1eba0 6e 74 44 61 74 61 2c 0d 0a 20 20 20 20 20 20 20  ntData,..       
1ebb0 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66       bool whatIf
1ebc0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
1ebd0 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20  ool verbose,..  
1ebe0 20 20 20 20 20 20 20 20 20 20 72 65 66 20 73 74            ref st
1ebf0 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20 20  ring error..    
1ec00 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
1ec10 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
1ec20 20 20 41 6e 79 50 61 69 72 3c 73 74 72 69 6e 67    AnyPair<string
1ec30 2c 20 62 6f 6f 6c 3e 20 70 61 69 72 20 3d 20 63  , bool> pair = c
1ec40 6c 69 65 6e 74 44 61 74 61 20 61 73 20 41 6e 79  lientData as Any
1ec50 50 61 69 72 3c 73 74 72 69 6e 67 2c 20 62 6f 6f  Pair<string, boo
1ec60 6c 3e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  l>;....         
1ec70 20 20 20 69 66 20 28 70 61 69 72 20 3d 3d 20 6e     if (pair == n
1ec80 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
1ec90 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
1eca0 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69 6e       error = "in
1ecb0 76 61 6c 69 64 20 66 72 61 6d 65 77 6f 72 6b 20  valid framework 
1ecc0 63 61 6c 6c 62 61 63 6b 20 64 61 74 61 22 3b 0d  callback data";.
1ecd0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1ece0 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
1ecf0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
1ed00 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
1ed10 28 70 61 69 72 2e 59 29 0d 0a 20 20 20 20 20 20  (pair.Y)..      
1ed20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1ed30 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
1ed40 52 65 6d 6f 76 65 46 72 6f 6d 41 73 73 65 6d 62  RemoveFromAssemb
1ed50 6c 79 46 6f 6c 64 65 72 73 28 0d 0a 20 20 20 20  lyFolders(..    
1ed60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ed70 72 6f 6f 74 4b 65 79 2c 20 66 72 61 6d 65 77 6f  rootKey, framewo
1ed80 72 6b 4e 61 6d 65 2c 20 66 72 61 6d 65 77 6f 72  rkName, framewor
1ed90 6b 56 65 72 73 69 6f 6e 2c 20 70 6c 61 74 66 6f  kVersion, platfo
1eda0 72 6d 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20  rmName,..       
1edb0 20 20 20 20 20 20 20 20 20 20 20 20 20 4c 65 67               Leg
1edc0 61 63 79 50 72 6f 6a 65 63 74 4e 61 6d 65 2c 20  acyProjectName, 
1edd0 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 2c  whatIf, verbose,
1ede0 20 72 65 66 20 65 72 72 6f 72 29 20 26 26 0d 0a   ref error) &&..
1edf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ee00 41 64 64 54 6f 41 73 73 65 6d 62 6c 79 46 6f 6c  AddToAssemblyFol
1ee10 64 65 72 73 28 0d 0a 20 20 20 20 20 20 20 20 20  ders(..         
1ee20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b             rootK
1ee30 65 79 2c 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d  ey, frameworkNam
1ee40 65 2c 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73  e, frameworkVers
1ee50 69 6f 6e 2c 20 70 6c 61 74 66 6f 72 6d 4e 61 6d  ion, platformNam
1ee60 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
1ee70 20 20 20 20 20 20 20 20 50 72 6f 6a 65 63 74 4e          ProjectN
1ee80 61 6d 65 2c 20 70 61 69 72 2e 58 2c 20 77 68 61  ame, pair.X, wha
1ee90 74 49 66 2c 20 76 65 72 62 6f 73 65 2c 20 72 65  tIf, verbose, re
1eea0 66 20 65 72 72 6f 72 29 3b 0d 0a 20 20 20 20 20  f error);..     
1eeb0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
1eec0 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20        else..    
1eed0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
1eee0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
1eef0 6e 20 52 65 6d 6f 76 65 46 72 6f 6d 41 73 73 65  n RemoveFromAsse
1ef00 6d 62 6c 79 46 6f 6c 64 65 72 73 28 0d 0a 20 20  mblyFolders(..  
1ef10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ef20 20 20 72 6f 6f 74 4b 65 79 2c 20 66 72 61 6d 65    rootKey, frame
1ef30 77 6f 72 6b 4e 61 6d 65 2c 20 66 72 61 6d 65 77  workName, framew
1ef40 6f 72 6b 56 65 72 73 69 6f 6e 2c 20 70 6c 61 74  orkVersion, plat
1ef50 66 6f 72 6d 4e 61 6d 65 2c 0d 0a 20 20 20 20 20  formName,..     
1ef60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 50                 P
1ef70 72 6f 6a 65 63 74 4e 61 6d 65 2c 20 77 68 61 74  rojectName, what
1ef80 49 66 2c 20 76 65 72 62 6f 73 65 2c 20 72 65 66  If, verbose, ref
1ef90 20 65 72 72 6f 72 29 3b 0d 0a 20 20 20 20 20 20   error);..      
1efa0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
1efb0 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64   }..        #end
1efc0 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
1efd0 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
1efe0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1eff0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f000 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f010 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
1f020 20 20 20 20 20 23 72 65 67 69 6f 6e 20 56 69 73       #region Vis
1f030 75 61 6c 20 53 74 75 64 69 6f 20 48 61 6e 64 6c  ual Studio Handl
1f040 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 70 72 69  ing..        pri
1f050 76 61 74 65 20 73 74 61 74 69 63 20 73 74 72 69  vate static stri
1f060 6e 67 20 47 65 74 56 73 4b 65 79 4e 61 6d 65 28  ng GetVsKeyName(
1f070 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 56 65  ..            Ve
1f080 72 73 69 6f 6e 20 76 73 56 65 72 73 69 6f 6e 0d  rsion vsVersion.
1f090 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a  .            )..
1f0a0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
1f0b0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 74         return St
1f0c0 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22 53 6f 66  ring.Format("Sof
1f0d0 74 77 61 72 65 5c 5c 4d 69 63 72 6f 73 6f 66 74  tware\\Microsoft
1f0e0 5c 5c 56 69 73 75 61 6c 53 74 75 64 69 6f 5c 5c  \\VisualStudio\\
1f0f0 7b 30 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  {0}",..         
1f100 20 20 20 20 20 20 20 76 73 56 65 72 73 69 6f 6e         vsVersion
1f110 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d  );..        }...
1f120 0a 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f  ////////////////
1f150 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f160 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f170 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67  ....        #reg
1f180 69 6f 6e 20 56 69 73 75 61 6c 20 53 74 75 64 69  ion Visual Studi
1f190 6f 20 44 61 74 61 20 53 6f 75 72 63 65 20 48 61  o Data Source Ha
1f1a0 6e 64 6c 69 6e 67 0d 0a 20 20 20 20 20 20 20 20  ndling..        
1f1b0 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 62  private static b
1f1c0 6f 6f 6c 20 41 64 64 56 73 44 61 74 61 53 6f 75  ool AddVsDataSou
1f1d0 72 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  rce(..          
1f1e0 20 20 52 65 67 69 73 74 72 79 4b 65 79 20 72 6f    RegistryKey ro
1f1f0 6f 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20  otKey,..        
1f200 20 20 20 20 56 65 72 73 69 6f 6e 20 76 73 56 65      Version vsVe
1f210 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20  rsion,..        
1f220 20 20 20 20 47 75 69 64 20 64 61 74 61 53 6f 75      Guid dataSou
1f230 72 63 65 49 64 2c 0d 0a 20 20 20 20 20 20 20 20  rceId,..        
1f240 20 20 20 20 47 75 69 64 20 64 61 74 61 50 72 6f      Guid dataPro
1f250 76 69 64 65 72 49 64 2c 0d 0a 20 20 20 20 20 20  viderId,..      
1f260 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49        bool whatI
1f270 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f,..            
1f280 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a 20  bool verbose,.. 
1f290 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20 73             ref s
1f2a0 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20  tring error..   
1f2b0 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
1f2c0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1f2d0 20 20 20 73 74 72 69 6e 67 20 6b 65 79 4e 61 6d     string keyNam
1f2e0 65 20 3d 20 47 65 74 56 73 4b 65 79 4e 61 6d 65  e = GetVsKeyName
1f2f0 28 76 73 56 65 72 73 69 6f 6e 29 3b 0d 0a 0d 0a  (vsVersion);....
1f300 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e              usin
1f310 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b  g (MockRegistryK
1f320 65 79 20 6b 65 79 20 3d 20 52 65 67 69 73 74 72  ey key = Registr
1f330 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62 4b  yHelper.OpenSubK
1f340 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey(..           
1f350 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79           rootKey
1f360 2c 20 6b 65 79 4e 61 6d 65 2c 20 66 61 6c 73 65  , keyName, false
1f370 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73  , whatIf, verbos
1f380 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e))..           
1f390 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1f3a0 20 20 20 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e      if (key == n
1f3b0 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
1f3c0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1f3d0 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
1f3e0 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d  or = String.Form
1f3f0 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
1f400 20 20 20 20 20 20 20 20 20 20 20 20 20 22 63 6f               "co
1f410 75 6c 64 20 6e 6f 74 20 6f 70 65 6e 20 72 65 67  uld not open reg
1f420 69 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c  istry key: {0}\\
1f430 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  {1}",..         
1f440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
1f450 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e 61 6d 65 29  ootKey, keyName)
1f460 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
1f470 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
1f480 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
1f490 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
1f4a0 20 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69               usi
1f4b0 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79  ng (MockRegistry
1f4c0 4b 65 79 20 73 75 62 4b 65 79 20 3d 20 52 65 67  Key subKey = Reg
1f4d0 69 73 74 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e  istryHelper.Open
1f4e0 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20  SubKey(..       
1f4f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f500 20 6b 65 79 2c 20 22 44 61 74 61 53 6f 75 72 63   key, "DataSourc
1f510 65 73 22 2c 20 74 72 75 65 2c 20 77 68 61 74 49  es", true, whatI
1f520 66 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20  f, verbose))..  
1f530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
1f540 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1f550 20 20 20 20 20 69 66 20 28 73 75 62 4b 65 79 20       if (subKey 
1f560 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
1f570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
1f580 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1f590 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
1f5a0 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
1f5b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1f5c0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 63 6f               "co
1f5d0 75 6c 64 20 6e 6f 74 20 6f 70 65 6e 20 72 65 67  uld not open reg
1f5e0 69 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c  istry key: {0}\\
1f5f0 44 61 74 61 53 6f 75 72 63 65 73 22 2c 0d 0a 20  DataSources",.. 
1f600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f610 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 29 3b             key);
1f620 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1f630 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
1f640 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
1f650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
1f660 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1f670 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 4d          using (M
1f680 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 64  ockRegistryKey d
1f690 61 74 61 53 6f 75 72 63 65 4b 65 79 20 3d 20 52  ataSourceKey = R
1f6a0 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 43 72  egistryHelper.Cr
1f6b0 65 61 74 65 53 75 62 4b 65 79 28 0d 0a 20 20 20  eateSubKey(..   
1f6c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f6d0 20 20 20 20 20 20 20 20 20 73 75 62 4b 65 79 2c           subKey,
1f6e0 20 64 61 74 61 53 6f 75 72 63 65 49 64 2e 54 6f   dataSourceId.To
1f6f0 53 74 72 69 6e 67 28 56 73 49 64 46 6f 72 6d 61  String(VsIdForma
1f700 74 29 2c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20  t), whatIf,..   
1f710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f720 20 20 20 20 20 20 20 20 20 76 65 72 62 6f 73 65           verbose
1f730 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
1f740 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
1f750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f760 20 20 20 69 66 20 28 64 61 74 61 53 6f 75 72 63     if (dataSourc
1f770 65 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  eKey == null).. 
1f780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f790 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
1f7a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f7b0 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 53 74        error = St
1f7c0 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
1f7d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f7e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 63                "c
1f7f0 6f 75 6c 64 20 6e 6f 74 20 63 72 65 61 74 65 20  ould not create 
1f800 72 65 67 69 73 74 72 79 20 6b 65 79 3a 20 7b 30  registry key: {0
1f810 7d 5c 5c 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20  }\\{1}",..      
1f820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f830 20 20 20 20 20 20 20 20 20 20 6b 65 79 2c 20 64            key, d
1f840 61 74 61 53 6f 75 72 63 65 49 64 2e 54 6f 53 74  ataSourceId.ToSt
1f850 72 69 6e 67 28 56 73 49 64 46 6f 72 6d 61 74 29  ring(VsIdFormat)
1f860 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
1f870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f880 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
1f890 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1f8a0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
1f8b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f8c0 20 20 20 20 20 20 52 65 67 69 73 74 72 79 48 65        RegistryHe
1f8d0 6c 70 65 72 2e 53 65 74 56 61 6c 75 65 28 0d 0a  lper.SetValue(..
1f8e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f8f0 20 20 20 20 20 20 20 20 20 20 20 20 64 61 74 61              data
1f900 53 6f 75 72 63 65 4b 65 79 2c 20 6e 75 6c 6c 2c  SourceKey, null,
1f910 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
1f920 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1f930 20 20 20 20 20 20 20 20 20 20 20 20 20 22 7b 30               "{0
1f940 7d 20 44 61 74 61 62 61 73 65 20 46 69 6c 65 22  } Database File"
1f950 2c 20 50 72 6f 6a 65 63 74 4e 61 6d 65 29 2c 20  , ProjectName), 
1f960 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20  whatIf,..       
1f970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f980 20 20 20 20 20 76 65 72 62 6f 73 65 29 3b 0d 0a       verbose);..
1f990 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1f9a0 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74            Regist
1f9b0 72 79 48 65 6c 70 65 72 2e 43 72 65 61 74 65 53  ryHelper.CreateS
1f9c0 75 62 4b 65 79 28 64 61 74 61 53 6f 75 72 63 65  ubKey(dataSource
1f9d0 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  Key,..          
1f9e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f9f0 20 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28    String.Format(
1fa00 22 53 75 70 70 6f 72 74 69 6e 67 50 72 6f 76 69  "SupportingProvi
1fa10 64 65 72 73 5c 5c 7b 30 7d 22 2c 0d 0a 20 20 20  ders\\{0}",..   
1fa20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fa30 20 20 20 20 20 20 20 20 20 64 61 74 61 50 72 6f           dataPro
1fa40 76 69 64 65 72 49 64 2e 54 6f 53 74 72 69 6e 67  viderId.ToString
1fa50 28 56 73 49 64 46 6f 72 6d 61 74 29 29 2c 20 77  (VsIdFormat)), w
1fa60 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20  hatIf,..        
1fa70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fa80 20 20 20 20 76 65 72 62 6f 73 65 29 3b 0d 0a 20      verbose);.. 
1fa90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1faa0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
1fab0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
1fac0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
1fad0 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75        return tru
1fae0 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d  e;..        }...
1faf0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
1fb00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fb10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fb20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fb30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fb40 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  ....        priv
1fb50 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f 6c 20  ate static bool 
1fb60 52 65 6d 6f 76 65 56 73 44 61 74 61 53 6f 75 72  RemoveVsDataSour
1fb70 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ce(..           
1fb80 20 52 65 67 69 73 74 72 79 4b 65 79 20 72 6f 6f   RegistryKey roo
1fb90 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20  tKey,..         
1fba0 20 20 20 56 65 72 73 69 6f 6e 20 76 73 56 65 72     Version vsVer
1fbb0 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20  sion,..         
1fbc0 20 20 20 47 75 69 64 20 64 61 74 61 53 6f 75 72     Guid dataSour
1fbd0 63 65 49 64 2c 0d 0a 20 20 20 20 20 20 20 20 20  ceId,..         
1fbe0 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d     bool whatIf,.
1fbf0 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
1fc00 6c 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20  l verbose,..    
1fc10 20 20 20 20 20 20 20 20 72 65 66 20 73 74 72 69          ref stri
1fc20 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20  ng error..      
1fc30 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
1fc40 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1fc50 73 74 72 69 6e 67 20 6b 65 79 4e 61 6d 65 20 3d  string keyName =
1fc60 20 47 65 74 56 73 4b 65 79 4e 61 6d 65 28 76 73   GetVsKeyName(vs
1fc70 56 65 72 73 69 6f 6e 29 3b 0d 0a 0d 0a 20 20 20  Version);....   
1fc80 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28           using (
1fc90 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20  MockRegistryKey 
1fca0 6b 65 79 20 3d 20 52 65 67 69 73 74 72 79 48 65  key = RegistryHe
1fcb0 6c 70 65 72 2e 4f 70 65 6e 53 75 62 4b 65 79 28  lper.OpenSubKey(
1fcc0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1fcd0 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 6b        rootKey, k
1fce0 65 79 4e 61 6d 65 2c 20 66 61 6c 73 65 2c 20 77  eyName, false, w
1fcf0 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 29  hatIf, verbose))
1fd00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
1fd10 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1fd20 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c   if (key == null
1fd30 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
1fd40 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
1fd50 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
1fd60 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  = String.Format(
1fd70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1fd80 20 20 20 20 20 20 20 20 20 20 22 63 6f 75 6c 64            "could
1fd90 20 6e 6f 74 20 6f 70 65 6e 20 72 65 67 69 73 74   not open regist
1fda0 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 7b 31 7d  ry key: {0}\\{1}
1fdb0 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
1fdc0 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74              root
1fdd0 4b 65 79 2c 20 6b 65 79 4e 61 6d 65 29 3b 0d 0a  Key, keyName);..
1fde0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1fdf0 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
1fe00 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se;..           
1fe10 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
1fe20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20            using 
1fe30 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79  (MockRegistryKey
1fe40 20 73 75 62 4b 65 79 20 3d 20 52 65 67 69 73 74   subKey = Regist
1fe50 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62  ryHelper.OpenSub
1fe60 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  Key(..          
1fe70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65                ke
1fe80 79 2c 20 22 44 61 74 61 53 6f 75 72 63 65 73 22  y, "DataSources"
1fe90 2c 20 74 72 75 65 2c 20 77 68 61 74 49 66 2c 20  , true, whatIf, 
1fea0 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20  verbose))..     
1feb0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
1fec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fed0 20 20 69 66 20 28 73 75 62 4b 65 79 20 3d 3d 20    if (subKey == 
1fee0 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
1fef0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
1ff00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ff10 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 53 74        error = St
1ff20 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
1ff30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ff40 20 20 20 20 20 20 20 20 20 20 22 63 6f 75 6c 64            "could
1ff50 20 6e 6f 74 20 6f 70 65 6e 20 72 65 67 69 73 74   not open regist
1ff60 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 44 61 74  ry key: {0}\\Dat
1ff70 61 53 6f 75 72 63 65 73 22 2c 0d 0a 20 20 20 20  aSources",..    
1ff80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ff90 20 20 20 20 20 20 20 20 6b 65 79 29 3b 0d 0a 0d          key);...
1ffa0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1ffb0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
1ffc0 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
1ffd0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
1ffe0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1fff0 20 20 20 20 20 52 65 67 69 73 74 72 79 48 65 6c       RegistryHel
20000 70 65 72 2e 44 65 6c 65 74 65 53 75 62 4b 65 79  per.DeleteSubKey
20010 54 72 65 65 28 0d 0a 20 20 20 20 20 20 20 20 20  Tree(..         
20020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
20030 75 62 4b 65 79 2c 20 64 61 74 61 53 6f 75 72 63  ubKey, dataSourc
20040 65 49 64 2e 54 6f 53 74 72 69 6e 67 28 56 73 49  eId.ToString(VsI
20050 64 46 6f 72 6d 61 74 29 2c 20 77 68 61 74 49 66  dFormat), whatIf
20060 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
20070 20 20 20 20 20 20 20 20 20 20 20 76 65 72 62 6f             verbo
20080 73 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  se);..          
20090 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
200a0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
200b0 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75        return tru
200c0 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d  e;..        }...
200d0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
200e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
200f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20100 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20110 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20120 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  ....        priv
20130 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f 6c 20  ate static bool 
20140 50 72 6f 63 65 73 73 56 73 44 61 74 61 53 6f 75  ProcessVsDataSou
20150 72 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  rce(..          
20160 20 20 52 65 67 69 73 74 72 79 4b 65 79 20 72 6f    RegistryKey ro
20170 6f 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20  otKey,..        
20180 20 20 20 20 56 65 72 73 69 6f 6e 20 76 73 56 65      Version vsVe
20190 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20  rsion,..        
201a0 20 20 20 20 47 75 69 64 20 70 61 63 6b 61 67 65      Guid package
201b0 49 64 2c 20 2f 2a 20 4e 4f 54 20 55 53 45 44 20  Id, /* NOT USED 
201c0 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  */..            
201d0 47 75 69 64 20 73 65 72 76 69 63 65 49 64 2c 20  Guid serviceId, 
201e0 2f 2a 20 4e 4f 54 20 55 53 45 44 20 2a 2f 0d 0a  /* NOT USED */..
201f0 20 20 20 20 20 20 20 20 20 20 20 20 47 75 69 64              Guid
20200 20 64 61 74 61 53 6f 75 72 63 65 49 64 2c 0d 0a   dataSourceId,..
20210 20 20 20 20 20 20 20 20 20 20 20 20 47 75 69 64              Guid
20220 20 64 61 74 61 50 72 6f 76 69 64 65 72 49 64 2c   dataProviderId,
20230 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6f 62  ..            ob
20240 6a 65 63 74 20 63 6c 69 65 6e 74 44 61 74 61 2c  ject clientData,
20250 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
20260 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20  ol whatIf,..    
20270 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72          bool ver
20280 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  bose,..         
20290 20 20 20 72 65 66 20 73 74 72 69 6e 67 20 65 72     ref string er
202a0 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ror..           
202b0 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20   )..        {.. 
202c0 20 20 20 20 20 20 20 20 20 20 20 41 6e 79 50 61             AnyPa
202d0 69 72 3c 73 74 72 69 6e 67 2c 20 62 6f 6f 6c 3e  ir<string, bool>
202e0 20 70 61 69 72 20 3d 20 63 6c 69 65 6e 74 44 61   pair = clientDa
202f0 74 61 20 61 73 20 41 6e 79 50 61 69 72 3c 73 74  ta as AnyPair<st
20300 72 69 6e 67 2c 20 62 6f 6f 6c 3e 3b 0d 0a 0d 0a  ring, bool>;....
20310 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
20320 70 61 69 72 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  pair == null).. 
20330 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
20340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
20350 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 56  ror = "invalid V
20360 53 20 63 61 6c 6c 62 61 63 6b 20 64 61 74 61 22  S callback data"
20370 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
20380 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
20390 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
203a0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
203b0 66 20 28 70 61 69 72 2e 59 29 0d 0a 20 20 20 20  f (pair.Y)..    
203c0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
203d0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
203e0 6e 20 41 64 64 56 73 44 61 74 61 53 6f 75 72 63  n AddVsDataSourc
203f0 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
20400 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c          rootKey,
20410 20 76 73 56 65 72 73 69 6f 6e 2c 20 64 61 74 61   vsVersion, data
20420 53 6f 75 72 63 65 49 64 2c 20 64 61 74 61 50 72  SourceId, dataPr
20430 6f 76 69 64 65 72 49 64 2c 0d 0a 20 20 20 20 20  oviderId,..     
20440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 77                 w
20450 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 2c 20  hatIf, verbose, 
20460 72 65 66 20 65 72 72 6f 72 29 3b 0d 0a 20 20 20  ref error);..   
20470 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
20480 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20          else..  
20490 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
204a0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
204b0 75 72 6e 20 52 65 6d 6f 76 65 56 73 44 61 74 61  urn RemoveVsData
204c0 53 6f 75 72 63 65 28 0d 0a 20 20 20 20 20 20 20  Source(..       
204d0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f               roo
204e0 74 4b 65 79 2c 20 76 73 56 65 72 73 69 6f 6e 2c  tKey, vsVersion,
204f0 20 64 61 74 61 53 6f 75 72 63 65 49 64 2c 20 77   dataSourceId, w
20500 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 2c 0d  hatIf, verbose,.
20510 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
20520 20 20 20 20 20 72 65 66 20 65 72 72 6f 72 29 3b       ref error);
20530 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
20540 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
20550 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
20560 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
20570 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20580 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20590 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
205a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
205b0 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65  /....        #re
205c0 67 69 6f 6e 20 56 69 73 75 61 6c 20 53 74 75 64  gion Visual Stud
205d0 69 6f 20 44 61 74 61 20 50 72 6f 76 69 64 65 72  io Data Provider
205e0 20 48 61 6e 64 6c 69 6e 67 0d 0a 20 20 20 20 20   Handling..     
205f0 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
20600 63 20 62 6f 6f 6c 20 41 64 64 56 73 44 61 74 61  c bool AddVsData
20610 50 72 6f 76 69 64 65 72 28 0d 0a 20 20 20 20 20  Provider(..     
20620 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79 4b         RegistryK
20630 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20  ey rootKey,..   
20640 20 20 20 20 20 20 20 20 20 56 65 72 73 69 6f 6e           Version
20650 20 76 73 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20   vsVersion,..   
20660 20 20 20 20 20 20 20 20 20 47 75 69 64 20 73 65           Guid se
20670 72 76 69 63 65 49 64 2c 0d 0a 20 20 20 20 20 20  rviceId,..      
20680 20 20 20 20 20 20 47 75 69 64 20 64 61 74 61 50        Guid dataP
20690 72 6f 76 69 64 65 72 49 64 2c 0d 0a 20 20 20 20  roviderId,..    
206a0 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 66          string f
206b0 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20  ileName,..      
206c0 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49        bool whatI
206d0 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f,..            
206e0 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a 20  bool verbose,.. 
206f0 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20 73             ref s
20700 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20  tring error..   
20710 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
20720 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
20730 20 20 20 69 66 20 28 76 73 41 64 6f 4e 65 74 54     if (vsAdoNetT
20740 65 63 68 6e 6f 6c 6f 67 79 49 64 20 3d 3d 20 6e  echnologyId == n
20750 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
20760 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
20770 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69 6e       error = "in
20780 76 61 6c 69 64 20 41 44 4f 2e 4e 45 54 20 74 65  valid ADO.NET te
20790 63 68 6e 6f 6c 6f 67 79 20 49 64 22 3b 0d 0a 20  chnology Id";.. 
207a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
207b0 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
207c0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
207d0 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
207e0 67 20 6b 65 79 4e 61 6d 65 20 3d 20 47 65 74 56  g keyName = GetV
207f0 73 4b 65 79 4e 61 6d 65 28 76 73 56 65 72 73 69  sKeyName(vsVersi
20800 6f 6e 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  on);....        
20810 20 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52      using (MockR
20820 65 67 69 73 74 72 79 4b 65 79 20 6b 65 79 20 3d  egistryKey key =
20830 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e   RegistryHelper.
20840 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20  OpenSubKey(..   
20850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20860 20 72 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e 61 6d   rootKey, keyNam
20870 65 2c 20 66 61 6c 73 65 2c 20 77 68 61 74 49 66  e, false, whatIf
20880 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20  , verbose))..   
20890 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
208a0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
208b0 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  key == null)..  
208c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
208d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
208e0 20 20 20 20 20 65 72 72 6f 72 20 3d 20 53 74 72       error = Str
208f0 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
20900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20910 20 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20       "could not 
20920 6f 70 65 6e 20 72 65 67 69 73 74 72 79 20 6b 65  open registry ke
20930 79 3a 20 7b 30 7d 5c 5c 7b 31 7d 22 2c 0d 0a 20  y: {0}\\{1}",.. 
20940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20950 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20         rootKey, 
20960 6b 65 79 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20  keyName);....   
20970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20980 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
20990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
209a0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
209b0 20 20 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b       using (Mock
209c0 52 65 67 69 73 74 72 79 4b 65 79 20 73 75 62 4b  RegistryKey subK
209d0 65 79 20 3d 20 52 65 67 69 73 74 72 79 48 65 6c  ey = RegistryHel
209e0 70 65 72 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d  per.OpenSubKey(.
209f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
20a00 20 20 20 20 20 20 20 20 20 6b 65 79 2c 20 22 44           key, "D
20a10 61 74 61 50 72 6f 76 69 64 65 72 73 22 2c 20 74  ataProviders", t
20a20 72 75 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72  rue, whatIf, ver
20a30 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20  bose))..        
20a40 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
20a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
20a60 66 20 28 73 75 62 4b 65 79 20 3d 3d 20 6e 75 6c  f (subKey == nul
20a70 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
20a80 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
20a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20aa0 20 20 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e     error = Strin
20ab0 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
20ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20ad0 20 20 20 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f         "could no
20ae0 74 20 6f 70 65 6e 20 72 65 67 69 73 74 72 79 20  t open registry 
20af0 6b 65 79 3a 20 7b 30 7d 5c 5c 44 61 74 61 50 72  key: {0}\\DataPr
20b00 6f 76 69 64 65 72 73 22 2c 0d 0a 20 20 20 20 20  oviders",..     
20b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20b20 20 20 20 20 20 20 20 6b 65 79 29 3b 0d 0a 0d 0a         key);....
20b30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20b40 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
20b50 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
20b60 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
20b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20b80 20 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52      using (MockR
20b90 65 67 69 73 74 72 79 4b 65 79 20 64 61 74 61 50  egistryKey dataP
20ba0 72 6f 76 69 64 65 72 4b 65 79 20 3d 20 52 65 67  roviderKey = Reg
20bb0 69 73 74 72 79 48 65 6c 70 65 72 2e 43 72 65 61  istryHelper.Crea
20bc0 74 65 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20  teSubKey(..     
20bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20be0 20 20 20 20 20 20 20 73 75 62 4b 65 79 2c 20 64         subKey, d
20bf0 61 74 61 50 72 6f 76 69 64 65 72 49 64 2e 54 6f  ataProviderId.To
20c00 53 74 72 69 6e 67 28 56 73 49 64 46 6f 72 6d 61  String(VsIdForma
20c10 74 29 2c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20  t), whatIf,..   
20c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20c30 20 20 20 20 20 20 20 20 20 76 65 72 62 6f 73 65           verbose
20c40 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
20c50 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
20c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20c70 20 20 20 69 66 20 28 64 61 74 61 50 72 6f 76 69     if (dataProvi
20c80 64 65 72 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d  derKey == null).
20c90 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
20ca0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
20cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20cc0 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
20cd0 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
20ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20d00 22 63 6f 75 6c 64 20 6e 6f 74 20 63 72 65 61 74  "could not creat
20d10 65 20 72 65 67 69 73 74 72 79 20 6b 65 79 3a 20  e registry key: 
20d20 7b 30 7d 5c 5c 7b 31 7d 22 2c 0d 0a 20 20 20 20  {0}\\{1}",..    
20d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20d40 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 2c              key,
20d50 20 64 61 74 61 50 72 6f 76 69 64 65 72 49 64 2e   dataProviderId.
20d60 54 6f 53 74 72 69 6e 67 28 56 73 49 64 46 6f 72  ToString(VsIdFor
20d70 6d 61 74 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  mat));....      
20d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20d90 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
20da0 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se;..           
20db0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
20dc0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
20dd0 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74            Regist
20de0 72 79 48 65 6c 70 65 72 2e 53 65 74 56 61 6c 75  ryHelper.SetValu
20df0 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
20e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20e10 64 61 74 61 50 72 6f 76 69 64 65 72 4b 65 79 2c  dataProviderKey,
20e20 20 6e 75 6c 6c 2c 20 44 65 73 63 72 69 70 74 69   null, Descripti
20e30 6f 6e 2c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20  on, whatIf,..   
20e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20e50 20 20 20 20 20 20 20 20 20 76 65 72 62 6f 73 65           verbose
20e60 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
20e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65                Re
20e80 67 69 73 74 72 79 48 65 6c 70 65 72 2e 53 65 74  gistryHelper.Set
20e90 56 61 6c 75 65 28 0d 0a 20 20 20 20 20 20 20 20  Value(..        
20ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20eb0 20 20 20 20 64 61 74 61 50 72 6f 76 69 64 65 72      dataProvider
20ec0 4b 65 79 2c 20 22 49 6e 76 61 72 69 61 6e 74 4e  Key, "InvariantN
20ed0 61 6d 65 22 2c 20 49 6e 76 61 72 69 61 6e 74 4e  ame", InvariantN
20ee0 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ame,..          
20ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20f00 20 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73    whatIf, verbos
20f10 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
20f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52                 R
20f30 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 53 65  egistryHelper.Se
20f40 74 56 61 6c 75 65 28 0d 0a 20 20 20 20 20 20 20  tValue(..       
20f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20f60 20 20 20 20 20 64 61 74 61 50 72 6f 76 69 64 65       dataProvide
20f70 72 4b 65 79 2c 20 22 54 65 63 68 6e 6f 6c 6f 67  rKey, "Technolog
20f80 79 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  y",..           
20f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20fa0 20 28 28 47 75 69 64 29 76 73 41 64 6f 4e 65 74   ((Guid)vsAdoNet
20fb0 54 65 63 68 6e 6f 6c 6f 67 79 49 64 29 2e 54 6f  TechnologyId).To
20fc0 53 74 72 69 6e 67 28 56 73 49 64 46 6f 72 6d 61  String(VsIdForma
20fd0 74 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  t),..           
20fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20ff0 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65   whatIf, verbose
21000 29 3b 0d 0a 0d 0a 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 52 65                Re
21020 67 69 73 74 72 79 48 65 6c 70 65 72 2e 53 65 74  gistryHelper.Set
21030 56 61 6c 75 65 28 0d 0a 20 20 20 20 20 20 20 20  Value(..        
21040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21050 20 20 20 20 64 61 74 61 50 72 6f 76 69 64 65 72      dataProvider
21060 4b 65 79 2c 20 22 43 6f 64 65 42 61 73 65 22 2c  Key, "CodeBase",
21070 20 66 69 6c 65 4e 61 6d 65 2c 20 77 68 61 74 49   fileName, whatI
21080 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f,..            
21090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
210a0 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20  verbose);....   
210b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
210c0 20 20 20 20 20 52 65 67 69 73 74 72 79 48 65 6c       RegistryHel
210d0 70 65 72 2e 53 65 74 56 61 6c 75 65 28 0d 0a 20  per.SetValue(.. 
210e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
210f0 20 20 20 20 20 20 20 20 20 20 20 64 61 74 61 50             dataP
21100 72 6f 76 69 64 65 72 4b 65 79 2c 20 22 46 61 63  roviderKey, "Fac
21110 74 6f 72 79 53 65 72 76 69 63 65 22 2c 0d 0a 20  toryService",.. 
21120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21130 20 20 20 20 20 20 20 20 20 20 20 73 65 72 76 69             servi
21140 63 65 49 64 2e 54 6f 53 74 72 69 6e 67 28 56 73  ceId.ToString(Vs
21150 49 64 46 6f 72 6d 61 74 29 2c 20 77 68 61 74 49  IdFormat), whatI
21160 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a  f, verbose);....
21170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21180 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79          Registry
21190 48 65 6c 70 65 72 2e 43 72 65 61 74 65 53 75 62  Helper.CreateSub
211a0 4b 65 79 28 64 61 74 61 50 72 6f 76 69 64 65 72  Key(dataProvider
211b0 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  Key,..          
211c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
211d0 20 20 22 53 75 70 70 6f 72 74 65 64 4f 62 6a 65    "SupportedObje
211e0 63 74 73 5c 5c 44 61 74 61 43 6f 6e 6e 65 63 74  cts\\DataConnect
211f0 69 6f 6e 55 49 43 6f 6e 74 72 6f 6c 22 2c 0d 0a  ionUIControl",..
21200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21210 20 20 20 20 20 20 20 20 20 20 20 20 77 68 61 74              what
21220 49 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d  If, verbose);...
21230 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
21240 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72           Registr
21250 79 48 65 6c 70 65 72 2e 43 72 65 61 74 65 53 75  yHelper.CreateSu
21260 62 4b 65 79 28 64 61 74 61 50 72 6f 76 69 64 65  bKey(dataProvide
21270 72 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20  rKey,..         
21280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21290 20 20 20 22 53 75 70 70 6f 72 74 65 64 4f 62 6a     "SupportedObj
212a0 65 63 74 73 5c 5c 44 61 74 61 43 6f 6e 6e 65 63  ects\\DataConnec
212b0 74 69 6f 6e 50 72 6f 70 65 72 74 69 65 73 22 2c  tionProperties",
212c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
212d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 77 68                wh
212e0 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d  atIf, verbose);.
212f0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
21300 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73             Regis
21310 74 72 79 48 65 6c 70 65 72 2e 43 72 65 61 74 65  tryHelper.Create
21320 53 75 62 4b 65 79 28 64 61 74 61 50 72 6f 76 69  SubKey(dataProvi
21330 64 65 72 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20  derKey,..       
21340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21350 20 20 20 20 20 22 53 75 70 70 6f 72 74 65 64 4f       "SupportedO
21360 62 6a 65 63 74 73 5c 5c 44 61 74 61 43 6f 6e 6e  bjects\\DataConn
21370 65 63 74 69 6f 6e 53 75 70 70 6f 72 74 22 2c 20  ectionSupport", 
21380 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20  whatIf,..       
21390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
213a0 20 20 20 20 20 76 65 72 62 6f 73 65 29 3b 0d 0a       verbose);..
213b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
213c0 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74            Regist
213d0 72 79 48 65 6c 70 65 72 2e 43 72 65 61 74 65 53  ryHelper.CreateS
213e0 75 62 4b 65 79 28 64 61 74 61 50 72 6f 76 69 64  ubKey(dataProvid
213f0 65 72 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20  erKey,..        
21400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21410 20 20 20 20 22 53 75 70 70 6f 72 74 65 64 4f 62      "SupportedOb
21420 6a 65 63 74 73 5c 5c 44 61 74 61 4f 62 6a 65 63  jects\\DataObjec
21430 74 53 75 70 70 6f 72 74 22 2c 20 77 68 61 74 49  tSupport", whatI
21440 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f,..            
21450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21460 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20  verbose);....   
21470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21480 20 20 20 20 20 52 65 67 69 73 74 72 79 48 65 6c       RegistryHel
21490 70 65 72 2e 43 72 65 61 74 65 53 75 62 4b 65 79  per.CreateSubKey
214a0 28 64 61 74 61 50 72 6f 76 69 64 65 72 4b 65 79  (dataProviderKey
214b0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
214c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
214d0 53 75 70 70 6f 72 74 65 64 4f 62 6a 65 63 74 73  SupportedObjects
214e0 5c 5c 44 61 74 61 56 69 65 77 53 75 70 70 6f 72  \\DataViewSuppor
214f0 74 22 2c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20  t", whatIf,..   
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 20 76 65 72 62 6f 73 65           verbose
21520 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
21530 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
21540 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
21550 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
21560 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
21570 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20  n true;..       
21580 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f   }....        //
21590 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
215a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
215b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
215c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
215d0 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
215e0 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
215f0 62 6f 6f 6c 20 52 65 6d 6f 76 65 56 73 44 61 74  bool RemoveVsDat
21600 61 50 72 6f 76 69 64 65 72 28 0d 0a 20 20 20 20  aProvider(..    
21610 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79          Registry
21620 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20  Key rootKey,..  
21630 20 20 20 20 20 20 20 20 20 20 56 65 72 73 69 6f            Versio
21640 6e 20 76 73 56 65 72 73 69 6f 6e 2c 0d 0a 20 20  n vsVersion,..  
21650 20 20 20 20 20 20 20 20 20 20 47 75 69 64 20 64            Guid d
21660 61 74 61 50 72 6f 76 69 64 65 72 49 64 2c 0d 0a  ataProviderId,..
21670 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
21680 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20   whatIf,..      
21690 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f        bool verbo
216a0 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se,..           
216b0 20 72 65 66 20 73 74 72 69 6e 67 20 65 72 72 6f   ref string erro
216c0 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29  r..            )
216d0 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
216e0 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
216f0 6b 65 79 4e 61 6d 65 20 3d 20 47 65 74 56 73 4b  keyName = GetVsK
21700 65 79 4e 61 6d 65 28 76 73 56 65 72 73 69 6f 6e  eyName(vsVersion
21710 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
21720 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67    using (MockReg
21730 69 73 74 72 79 4b 65 79 20 6b 65 79 20 3d 20 52  istryKey key = R
21740 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 4f 70  egistryHelper.Op
21750 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20  enSubKey(..     
21760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
21770 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e 61 6d 65 2c  ootKey, keyName,
21780 20 66 61 6c 73 65 2c 20 77 68 61 74 49 66 2c 20   false, whatIf, 
21790 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20  verbose))..     
217a0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
217b0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6b 65            if (ke
217c0 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  y == null)..    
217d0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
217e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
217f0 20 20 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e     error = Strin
21800 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
21810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21820 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20 6f 70     "could not op
21830 65 6e 20 72 65 67 69 73 74 72 79 20 6b 65 79 3a  en registry key:
21840 20 7b 30 7d 5c 5c 7b 31 7d 22 2c 0d 0a 20 20 20   {0}\\{1}",..   
21850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21860 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 6b 65       rootKey, ke
21870 79 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  yName);....     
21880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
21890 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
218a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
218b0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
218c0 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65     using (MockRe
218d0 67 69 73 74 72 79 4b 65 79 20 73 75 62 4b 65 79  gistryKey subKey
218e0 20 3d 20 52 65 67 69 73 74 72 79 48 65 6c 70 65   = RegistryHelpe
218f0 72 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20  r.OpenSubKey(.. 
21900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21910 20 20 20 20 20 20 20 6b 65 79 2c 20 22 44 61 74         key, "Dat
21920 61 50 72 6f 76 69 64 65 72 73 22 2c 20 74 72 75  aProviders", tru
21930 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f  e, whatIf, verbo
21940 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  se))..          
21950 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
21960 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
21970 28 73 75 62 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29  (subKey == null)
21980 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
21990 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
219a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
219b0 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e   error = String.
219c0 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
219d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
219e0 20 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20       "could not 
219f0 6f 70 65 6e 20 72 65 67 69 73 74 72 79 20 6b 65  open registry ke
21a00 79 3a 20 7b 30 7d 5c 5c 44 61 74 61 50 72 6f 76  y: {0}\\DataProv
21a10 69 64 65 72 73 22 2c 0d 0a 20 20 20 20 20 20 20  iders",..       
21a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21a30 20 20 20 20 20 6b 65 79 29 3b 0d 0a 0d 0a 20 20       key);....  
21a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21a50 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
21a60 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se;..           
21a70 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
21a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21a90 20 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72    RegistryHelper
21aa0 2e 44 65 6c 65 74 65 53 75 62 4b 65 79 54 72 65  .DeleteSubKeyTre
21ab0 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
21ac0 20 20 20 20 20 20 20 20 20 20 20 20 73 75 62 4b              subK
21ad0 65 79 2c 20 64 61 74 61 50 72 6f 76 69 64 65 72  ey, dataProvider
21ae0 49 64 2e 54 6f 53 74 72 69 6e 67 28 56 73 49 64  Id.ToString(VsId
21af0 46 6f 72 6d 61 74 29 2c 20 77 68 61 74 49 66 2c  Format), whatIf,
21b00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
21b10 20 20 20 20 20 20 20 20 20 20 76 65 72 62 6f 73            verbos
21b20 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e);..           
21b30 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
21b40 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
21b50 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65       return true
21b60 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  ;..        }....
21b70 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
21b80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21b90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21ba0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21bb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
21bc0 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  ...        priva
21bd0 74 65 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 50  te static bool P
21be0 72 6f 63 65 73 73 56 73 44 61 74 61 50 72 6f 76  rocessVsDataProv
21bf0 69 64 65 72 28 0d 0a 20 20 20 20 20 20 20 20 20  ider(..         
21c00 20 20 20 52 65 67 69 73 74 72 79 4b 65 79 20 72     RegistryKey r
21c10 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20  ootKey,..       
21c20 20 20 20 20 20 56 65 72 73 69 6f 6e 20 76 73 56       Version vsV
21c30 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20  ersion,..       
21c40 20 20 20 20 20 47 75 69 64 20 70 61 63 6b 61 67       Guid packag
21c50 65 49 64 2c 20 2f 2a 20 4e 4f 54 20 55 53 45 44  eId, /* NOT USED
21c60 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   */..           
21c70 20 47 75 69 64 20 73 65 72 76 69 63 65 49 64 2c   Guid serviceId,
21c80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 47 75  ..            Gu
21c90 69 64 20 64 61 74 61 53 6f 75 72 63 65 49 64 2c  id dataSourceId,
21ca0 20 2f 2a 20 4e 4f 54 20 55 53 45 44 20 2a 2f 0d   /* NOT USED */.
21cb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 47 75 69  .            Gui
21cc0 64 20 64 61 74 61 50 72 6f 76 69 64 65 72 49 64  d dataProviderId
21cd0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6f  ,..            o
21ce0 62 6a 65 63 74 20 63 6c 69 65 6e 74 44 61 74 61  bject clientData
21cf0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
21d00 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20  ool whatIf,..   
21d10 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65           bool ve
21d20 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 20  rbose,..        
21d30 20 20 20 20 72 65 66 20 73 74 72 69 6e 67 20 65      ref string e
21d40 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20  rror..          
21d50 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a    )..        {..
21d60 20 20 20 20 20 20 20 20 20 20 20 20 41 6e 79 50              AnyP
21d70 61 69 72 3c 73 74 72 69 6e 67 2c 20 62 6f 6f 6c  air<string, bool
21d80 3e 20 70 61 69 72 20 3d 20 63 6c 69 65 6e 74 44  > pair = clientD
21d90 61 74 61 20 61 73 20 41 6e 79 50 61 69 72 3c 73  ata as AnyPair<s
21da0 74 72 69 6e 67 2c 20 62 6f 6f 6c 3e 3b 0d 0a 0d  tring, bool>;...
21db0 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
21dc0 28 70 61 69 72 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  (pair == null)..
21dd0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
21de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
21df0 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64 20  rror = "invalid 
21e00 56 53 20 63 61 6c 6c 62 61 63 6b 20 64 61 74 61  VS callback data
21e10 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ";..            
21e20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
21e30 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
21e40 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
21e50 69 66 20 28 70 61 69 72 2e 59 29 0d 0a 20 20 20  if (pair.Y)..   
21e60 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
21e70 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
21e80 72 6e 20 41 64 64 56 73 44 61 74 61 50 72 6f 76  rn AddVsDataProv
21e90 69 64 65 72 28 0d 0a 20 20 20 20 20 20 20 20 20  ider(..         
21ea0 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b             rootK
21eb0 65 79 2c 20 76 73 56 65 72 73 69 6f 6e 2c 20 73  ey, vsVersion, s
21ec0 65 72 76 69 63 65 49 64 2c 20 64 61 74 61 50 72  erviceId, dataPr
21ed0 6f 76 69 64 65 72 49 64 2c 20 70 61 69 72 2e 58  oviderId, pair.X
21ee0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
21ef0 20 20 20 20 20 20 20 77 68 61 74 49 66 2c 20 76         whatIf, v
21f00 65 72 62 6f 73 65 2c 20 72 65 66 20 65 72 72 6f  erbose, ref erro
21f10 72 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  r);..           
21f20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
21f30 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20  else..          
21f40 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
21f50 20 20 20 20 20 72 65 74 75 72 6e 20 52 65 6d 6f       return Remo
21f60 76 65 56 73 44 61 74 61 50 72 6f 76 69 64 65 72  veVsDataProvider
21f70 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
21f80 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20         rootKey, 
21f90 76 73 56 65 72 73 69 6f 6e 2c 20 64 61 74 61 50  vsVersion, dataP
21fa0 72 6f 76 69 64 65 72 49 64 2c 20 77 68 61 74 49  roviderId, whatI
21fb0 66 2c 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20  f, verbose,..   
21fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21fd0 20 72 65 66 20 65 72 72 6f 72 29 3b 0d 0a 20 20   ref error);..  
21fe0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
21ff0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
22000 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
22010 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
22020 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22030 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22040 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22050 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
22060 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e  .        #region
22070 20 56 69 73 75 61 6c 20 53 74 75 64 69 6f 20 50   Visual Studio P
22080 61 63 6b 61 67 65 20 48 61 6e 64 6c 69 6e 67 0d  ackage Handling.
22090 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
220a0 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 41 64 64   static bool Add
220b0 56 73 50 61 63 6b 61 67 65 28 0d 0a 20 20 20 20  VsPackage(..    
220c0 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79          Registry
220d0 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20  Key rootKey,..  
220e0 20 20 20 20 20 20 20 20 20 20 56 65 72 73 69 6f            Versio
220f0 6e 20 76 73 56 65 72 73 69 6f 6e 2c 0d 0a 20 20  n vsVersion,..  
22100 20 20 20 20 20 20 20 20 20 20 47 75 69 64 20 70            Guid p
22110 61 63 6b 61 67 65 49 64 2c 0d 0a 20 20 20 20 20  ackageId,..     
22120 20 20 20 20 20 20 20 47 75 69 64 20 73 65 72 76         Guid serv
22130 69 63 65 49 64 2c 0d 0a 20 20 20 20 20 20 20 20  iceId,..        
22140 20 20 20 20 73 74 72 69 6e 67 20 66 69 6c 65 4e      string fileN
22150 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ame,..          
22160 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a    bool whatIf,..
22170 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
22180 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20   verbose,..     
22190 20 20 20 20 20 20 20 72 65 66 20 73 74 72 69 6e         ref strin
221a0 67 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20  g error..       
221b0 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
221c0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  {..            s
221d0 74 72 69 6e 67 20 6b 65 79 4e 61 6d 65 20 3d 20  tring keyName = 
221e0 47 65 74 56 73 4b 65 79 4e 61 6d 65 28 76 73 56  GetVsKeyName(vsV
221f0 65 72 73 69 6f 6e 29 3b 0d 0a 0d 0a 20 20 20 20  ersion);....    
22200 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 4d          using (M
22210 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 6b  ockRegistryKey k
22220 65 79 20 3d 20 52 65 67 69 73 74 72 79 48 65 6c  ey = RegistryHel
22230 70 65 72 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d  per.OpenSubKey(.
22240 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
22250 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 6b 65       rootKey, ke
22260 79 4e 61 6d 65 2c 20 66 61 6c 73 65 2c 20 77 68  yName, false, wh
22270 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 29 0d  atIf, verbose)).
22280 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
22290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
222a0 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29  if (key == null)
222b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
222c0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
222d0 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
222e0 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
222f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
22300 20 20 20 20 20 20 20 20 20 22 63 6f 75 6c 64 20           "could 
22310 6e 6f 74 20 6f 70 65 6e 20 72 65 67 69 73 74 72  not open registr
22320 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 7b 31 7d 22  y key: {0}\\{1}"
22330 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
22340 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b             rootK
22350 65 79 2c 20 6b 65 79 4e 61 6d 65 29 3b 0d 0a 0d  ey, keyName);...
22360 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
22370 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
22380 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
22390 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
223a0 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28           using (
223b0 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20  MockRegistryKey 
223c0 73 75 62 4b 65 79 20 3d 20 52 65 67 69 73 74 72  subKey = Registr
223d0 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62 4b  yHelper.OpenSubK
223e0 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey(..           
223f0 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79               key
22400 2c 20 22 50 61 63 6b 61 67 65 73 22 2c 20 74 72  , "Packages", tr
22410 75 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62  ue, whatIf, verb
22420 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ose))..         
22430 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
22440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
22450 20 28 73 75 62 4b 65 79 20 3d 3d 20 6e 75 6c 6c   (subKey == null
22460 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
22470 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
22480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22490 20 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67    error = String
224a0 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
224b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
224c0 20 20 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74        "could not
224d0 20 6f 70 65 6e 20 72 65 67 69 73 74 72 79 20 6b   open registry k
224e0 65 79 3a 20 7b 30 7d 5c 5c 50 61 63 6b 61 67 65  ey: {0}\\Package
224f0 73 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s",..           
22500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22510 20 6b 65 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20   key);....      
22520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22530 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
22540 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
22550 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
22560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 75 73                us
22570 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72  ing (MockRegistr
22580 79 4b 65 79 20 70 61 63 6b 61 67 65 4b 65 79 20  yKey packageKey 
22590 3d 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72  = RegistryHelper
225a0 2e 43 72 65 61 74 65 53 75 62 4b 65 79 28 0d 0a  .CreateSubKey(..
225b0 20 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 20 20 20 73 75 62 4b              subK
225d0 65 79 2c 20 70 61 63 6b 61 67 65 49 64 2e 54 6f  ey, packageId.To
225e0 53 74 72 69 6e 67 28 56 73 49 64 46 6f 72 6d 61  String(VsIdForma
225f0 74 29 2c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20  t), whatIf,..   
22600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22610 20 20 20 20 20 20 20 20 20 76 65 72 62 6f 73 65           verbose
22620 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
22630 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
22640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22650 20 20 20 69 66 20 28 70 61 63 6b 61 67 65 4b 65     if (packageKe
22660 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  y == null)..    
22670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22680 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
22690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
226a0 20 20 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e     error = Strin
226b0 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
226c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
226d0 20 20 20 20 20 20 20 20 20 20 20 22 63 6f 75 6c             "coul
226e0 64 20 6e 6f 74 20 63 72 65 61 74 65 20 72 65 67  d not create reg
226f0 69 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c  istry key: {0}\\
22700 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  {1}",..         
22710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22720 20 20 20 20 20 20 20 6b 65 79 2c 20 70 61 63 6b         key, pack
22730 61 67 65 49 64 2e 54 6f 53 74 72 69 6e 67 28 56  ageId.ToString(V
22740 73 49 64 46 6f 72 6d 61 74 29 29 3b 0d 0a 0d 0a  sIdFormat));....
22750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22760 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
22770 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
22780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22790 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
227a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
227b0 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 53  RegistryHelper.S
227c0 65 74 56 61 6c 75 65 28 70 61 63 6b 61 67 65 4b  etValue(packageK
227d0 65 79 2c 20 6e 75 6c 6c 2c 20 53 74 72 69 6e 67  ey, null, String
227e0 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
227f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22800 20 20 20 20 20 20 22 7b 30 7d 20 44 65 73 69 67        "{0} Desig
22810 6e 65 72 20 50 61 63 6b 61 67 65 22 2c 20 50 72  ner Package", Pr
22820 6f 6a 65 63 74 4e 61 6d 65 29 2c 20 77 68 61 74  ojectName), what
22830 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  If,..           
22840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22850 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20   verbose);....  
22860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22870 20 20 20 20 20 20 52 65 67 69 73 74 72 79 48 65        RegistryHe
22880 6c 70 65 72 2e 53 65 74 56 61 6c 75 65 28 70 61  lper.SetValue(pa
22890 63 6b 61 67 65 4b 65 79 2c 20 22 43 6c 61 73 73  ckageKey, "Class
228a0 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
228b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
228c0 22 53 51 4c 69 74 65 2e 44 65 73 69 67 6e 65 72  "SQLite.Designer
228d0 2e 53 51 4c 69 74 65 50 61 63 6b 61 67 65 22 2c  .SQLitePackage",
228e0 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65   whatIf, verbose
228f0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
22900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65                Re
22910 67 69 73 74 72 79 48 65 6c 70 65 72 2e 53 65 74  gistryHelper.Set
22920 56 61 6c 75 65 28 70 61 63 6b 61 67 65 4b 65 79  Value(packageKey
22930 2c 20 22 43 6f 64 65 42 61 73 65 22 2c 0d 0a 20  , "CodeBase",.. 
22940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22950 20 20 20 20 20 20 20 20 20 20 20 66 69 6c 65 4e             fileN
22960 61 6d 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72  ame, whatIf, ver
22970 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  bose);....      
22980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22990 20 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72    RegistryHelper
229a0 2e 53 65 74 56 61 6c 75 65 28 70 61 63 6b 61 67  .SetValue(packag
229b0 65 4b 65 79 2c 20 22 49 44 22 2c 20 34 30 30 2c  eKey, "ID", 400,
229c0 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20   whatIf,..      
229d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
229e0 20 20 20 20 20 20 76 65 72 62 6f 73 65 29 3b 0d        verbose);.
229f0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
22a00 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73             Regis
22a10 74 72 79 48 65 6c 70 65 72 2e 53 65 74 56 61 6c  tryHelper.SetVal
22a20 75 65 28 70 61 63 6b 61 67 65 4b 65 79 2c 20 22  ue(packageKey, "
22a30 49 6e 70 72 6f 63 53 65 72 76 65 72 33 32 22 2c  InprocServer32",
22a40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
22a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 50 61                Pa
22a60 74 68 2e 43 6f 6d 62 69 6e 65 28 45 6e 76 69 72  th.Combine(Envir
22a70 6f 6e 6d 65 6e 74 2e 53 79 73 74 65 6d 44 69 72  onment.SystemDir
22a80 65 63 74 6f 72 79 2c 0d 0a 20 20 20 20 20 20 20  ectory,..       
22a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22aa0 20 20 20 20 20 20 20 20 20 22 6d 73 63 6f 72 65           "mscore
22ab0 65 2e 64 6c 6c 22 29 2c 20 77 68 61 74 49 66 2c  e.dll"), whatIf,
22ac0 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20   verbose);....  
22ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22ae0 20 20 20 20 20 20 52 65 67 69 73 74 72 79 48 65        RegistryHe
22af0 6c 70 65 72 2e 53 65 74 56 61 6c 75 65 28 70 61  lper.SetValue(pa
22b00 63 6b 61 67 65 4b 65 79 2c 20 22 43 6f 6d 70 61  ckageKey, "Compa
22b10 6e 79 4e 61 6d 65 22 2c 0d 0a 20 20 20 20 20 20  nyName",..      
22b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22b30 20 20 20 20 20 20 22 68 74 74 70 3a 2f 2f 73 79        "http://sy
22b40 73 74 65 6d 2e 64 61 74 61 2e 73 71 6c 69 74 65  stem.data.sqlite
22b50 2e 6f 72 67 2f 22 2c 20 77 68 61 74 49 66 2c 20  .org/", whatIf, 
22b60 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20  verbose);....   
22b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22b80 20 20 20 20 20 52 65 67 69 73 74 72 79 48 65 6c       RegistryHel
22b90 70 65 72 2e 53 65 74 56 61 6c 75 65 28 70 61 63  per.SetValue(pac
22ba0 6b 61 67 65 4b 65 79 2c 20 22 4d 69 6e 45 64 69  kageKey, "MinEdi
22bb0 74 69 6f 6e 22 2c 0d 0a 20 20 20 20 20 20 20 20  tion",..        
22bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22bd0 20 20 20 20 22 73 74 61 6e 64 61 72 64 22 2c 20      "standard", 
22be0 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29  whatIf, verbose)
22bf0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
22c00 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67               Reg
22c10 69 73 74 72 79 48 65 6c 70 65 72 2e 53 65 74 56  istryHelper.SetV
22c20 61 6c 75 65 28 70 61 63 6b 61 67 65 4b 65 79 2c  alue(packageKey,
22c30 20 22 50 72 6f 64 75 63 74 4e 61 6d 65 22 2c 0d   "ProductName",.
22c40 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
22c50 20 20 20 20 20 20 20 20 20 20 20 20 20 53 74 72               Str
22c60 69 6e 67 2e 46 6f 72 6d 61 74 28 22 7b 30 7d 20  ing.Format("{0} 
22c70 44 65 73 69 67 6e 65 72 20 50 61 63 6b 61 67 65  Designer Package
22c80 22 2c 20 50 72 6f 6a 65 63 74 4e 61 6d 65 29 2c  ", ProjectName),
22c90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
22ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 77 68                wh
22cb0 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d  atIf, verbose);.
22cc0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
22cd0 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73             Regis
22ce0 74 72 79 48 65 6c 70 65 72 2e 53 65 74 56 61 6c  tryHelper.SetVal
22cf0 75 65 28 70 61 63 6b 61 67 65 4b 65 79 2c 20 22  ue(packageKey, "
22d00 50 72 6f 64 75 63 74 56 65 72 73 69 6f 6e 22 2c  ProductVersion",
22d10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
22d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 31                "1
22d30 2e 30 22 2c 20 77 68 61 74 49 66 2c 20 76 65 72  .0", whatIf, ver
22d40 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  bose);....      
22d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22d60 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67    using (MockReg
22d70 69 73 74 72 79 4b 65 79 20 74 6f 6f 6c 62 6f 78  istryKey toolbox
22d80 4b 65 79 20 3d 20 52 65 67 69 73 74 72 79 48 65  Key = RegistryHe
22d90 6c 70 65 72 2e 43 72 65 61 74 65 53 75 62 4b 65  lper.CreateSubKe
22da0 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
22db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22dc0 20 20 20 20 70 61 63 6b 61 67 65 4b 65 79 2c 20      packageKey, 
22dd0 22 54 6f 6f 6c 62 6f 78 22 2c 20 77 68 61 74 49  "Toolbox", whatI
22de0 66 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20  f, verbose))..  
22df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22e00 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
22e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22e20 20 20 20 20 20 69 66 20 28 74 6f 6f 6c 62 6f 78       if (toolbox
22e30 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  Key == null)..  
22e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22e50 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
22e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22e70 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
22e80 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d  or = String.Form
22e90 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
22ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22eb0 20 20 20 20 20 20 20 20 20 22 63 6f 75 6c 64 20           "could 
22ec0 6e 6f 74 20 63 72 65 61 74 65 20 72 65 67 69 73  not create regis
22ed0 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 54 6f  try key: {0}\\To
22ee0 6f 6c 62 6f 78 22 2c 0d 0a 20 20 20 20 20 20 20  olbox",..       
22ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22f00 20 20 20 20 20 20 20 20 20 20 20 20 20 70 61 63               pac
22f10 6b 61 67 65 4b 65 79 29 3b 0d 0a 0d 0a 20 20 20  kageKey);....   
22f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22f30 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
22f40 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  urn false;..    
22f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22f60 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
22f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22f80 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72           Registr
22f90 79 48 65 6c 70 65 72 2e 53 65 74 56 61 6c 75 65  yHelper.SetValue
22fa0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
22fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22fc0 20 20 20 74 6f 6f 6c 62 6f 78 4b 65 79 2c 20 22     toolboxKey, "
22fd0 44 65 66 61 75 6c 74 20 49 74 65 6d 73 22 2c 20  Default Items", 
22fe0 33 2c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20  3, whatIf,..    
22ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23000 20 20 20 20 20 20 20 20 20 20 20 20 76 65 72 62              verb
23010 6f 73 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ose);..         
23020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
23030 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
23040 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
23050 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
23060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 75 73                us
23070 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72  ing (MockRegistr
23080 79 4b 65 79 20 73 75 62 4b 65 79 20 3d 20 52 65  yKey subKey = Re
23090 67 69 73 74 72 79 48 65 6c 70 65 72 2e 4f 70 65  gistryHelper.Ope
230a0 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20  nSubKey(..      
230b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
230c0 20 20 6b 65 79 2c 20 22 4d 65 6e 75 73 22 2c 20    key, "Menus", 
230d0 74 72 75 65 2c 20 77 68 61 74 49 66 2c 20 76 65  true, whatIf, ve
230e0 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20  rbose))..       
230f0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
23100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23110 69 66 20 28 73 75 62 4b 65 79 20 3d 3d 20 6e 75  if (subKey == nu
23120 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
23130 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
23140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23150 20 20 20 20 65 72 72 6f 72 20 3d 20 53 74 72 69      error = Stri
23160 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
23170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23180 20 20 20 20 20 20 20 20 22 63 6f 75 6c 64 20 6e          "could n
23190 6f 74 20 6f 70 65 6e 20 72 65 67 69 73 74 72 79  ot open registry
231a0 20 6b 65 79 3a 20 7b 30 7d 5c 5c 4d 65 6e 75 73   key: {0}\\Menus
231b0 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
231c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
231d0 6b 65 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  key);....       
231e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
231f0 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
23200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23210 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
23220 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67               Reg
23230 69 73 74 72 79 48 65 6c 70 65 72 2e 53 65 74 56  istryHelper.SetV
23240 61 6c 75 65 28 0d 0a 20 20 20 20 20 20 20 20 20  alue(..         
23250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
23260 75 62 4b 65 79 2c 20 70 61 63 6b 61 67 65 49 64  ubKey, packageId
23270 2e 54 6f 53 74 72 69 6e 67 28 56 73 49 64 46 6f  .ToString(VsIdFo
23280 72 6d 61 74 29 2c 20 22 2c 20 31 30 30 30 2c 20  rmat), ", 1000, 
23290 33 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  3",..           
232a0 20 20 20 20 20 20 20 20 20 20 20 20 20 77 68 61               wha
232b0 74 49 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a  tIf, verbose);..
232c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
232d0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
232e0 20 20 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b       using (Mock
232f0 52 65 67 69 73 74 72 79 4b 65 79 20 73 75 62 4b  RegistryKey subK
23300 65 79 20 3d 20 52 65 67 69 73 74 72 79 48 65 6c  ey = RegistryHel
23310 70 65 72 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d  per.OpenSubKey(.
23320 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
23330 20 20 20 20 20 20 20 20 20 6b 65 79 2c 20 22 53           key, "S
23340 65 72 76 69 63 65 73 22 2c 20 74 72 75 65 2c 20  ervices", true, 
23350 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29  whatIf, verbose)
23360 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
23370 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
23380 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73 75            if (su
23390 62 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  bKey == null).. 
233a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
233b0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
233c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
233d0 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72  ror = String.For
233e0 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
233f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23400 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20 6f 70 65    "could not ope
23410 6e 20 72 65 67 69 73 74 72 79 20 6b 65 79 3a 20  n registry key: 
23420 7b 30 7d 5c 5c 53 65 72 76 69 63 65 73 22 2c 0d  {0}\\Services",.
23430 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
23440 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79               key
23450 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
23460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
23470 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
23480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23490 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
234a0 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20            using 
234b0 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79  (MockRegistryKey
234c0 20 73 65 72 76 69 63 65 4b 65 79 20 3d 20 52 65   serviceKey = Re
234d0 67 69 73 74 72 79 48 65 6c 70 65 72 2e 43 72 65  gistryHelper.Cre
234e0 61 74 65 53 75 62 4b 65 79 28 0d 0a 20 20 20 20  ateSubKey(..    
234f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23500 20 20 20 20 20 20 20 20 73 75 62 4b 65 79 2c 20          subKey, 
23510 73 65 72 76 69 63 65 49 64 2e 54 6f 53 74 72 69  serviceId.ToStri
23520 6e 67 28 56 73 49 64 46 6f 72 6d 61 74 29 2c 20  ng(VsIdFormat), 
23530 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20  whatIf,..       
23540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23550 20 20 20 20 20 76 65 72 62 6f 73 65 29 29 0d 0a       verbose))..
23560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23570 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
23580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
23590 66 20 28 73 65 72 76 69 63 65 4b 65 79 20 3d 3d  f (serviceKey ==
235a0 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
235b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
235c0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
235d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
235e0 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f  rror = String.Fo
235f0 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
23600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23610 20 20 20 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f         "could no
23620 74 20 63 72 65 61 74 65 20 72 65 67 69 73 74 72  t create registr
23630 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 7b 31 7d 22  y key: {0}\\{1}"
23640 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
23650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23660 20 20 20 6b 65 79 2c 20 73 65 72 76 69 63 65 49     key, serviceI
23670 64 2e 54 6f 53 74 72 69 6e 67 28 56 73 49 64 46  d.ToString(VsIdF
23680 6f 72 6d 61 74 29 29 3b 0d 0a 0d 0a 20 20 20 20  ormat));....    
23690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
236a0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
236b0 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
236c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
236d0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
236e0 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69              Regi
236f0 73 74 72 79 48 65 6c 70 65 72 2e 53 65 74 56 61  stryHelper.SetVa
23700 6c 75 65 28 73 65 72 76 69 63 65 4b 65 79 2c 20  lue(serviceKey, 
23710 6e 75 6c 6c 2c 0d 0a 20 20 20 20 20 20 20 20 20  null,..         
23720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23730 20 20 20 70 61 63 6b 61 67 65 49 64 2e 54 6f 53     packageId.ToS
23740 74 72 69 6e 67 28 56 73 49 64 46 6f 72 6d 61 74  tring(VsIdFormat
23750 29 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f  ), whatIf, verbo
23760 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  se);....        
23770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23780 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 53  RegistryHelper.S
23790 65 74 56 61 6c 75 65 28 73 65 72 76 69 63 65 4b  etValue(serviceK
237a0 65 79 2c 20 22 4e 61 6d 65 22 2c 0d 0a 20 20 20  ey, "Name",..   
237b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
237c0 20 20 20 20 20 20 20 20 20 53 74 72 69 6e 67 2e           String.
237d0 46 6f 72 6d 61 74 28 22 7b 30 7d 20 44 65 73 69  Format("{0} Desi
237e0 67 6e 65 72 20 53 65 72 76 69 63 65 22 2c 20 50  gner Service", P
237f0 72 6f 6a 65 63 74 4e 61 6d 65 29 2c 0d 0a 20 20  rojectName),..  
23800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23810 20 20 20 20 20 20 20 20 20 20 77 68 61 74 49 66            whatIf
23820 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a 20 20 20  , verbose);..   
23830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23840 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
23850 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
23860 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
23870 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b      return true;
23880 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
23890 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
238a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
238b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
238c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
238d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
238e0 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
238f0 65 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 52 65  e static bool Re
23900 6d 6f 76 65 56 73 50 61 63 6b 61 67 65 28 0d 0a  moveVsPackage(..
23910 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69              Regi
23920 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c  stryKey rootKey,
23930 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 56 65  ..            Ve
23940 72 73 69 6f 6e 20 76 73 56 65 72 73 69 6f 6e 2c  rsion vsVersion,
23950 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 47 75  ..            Gu
23960 69 64 20 70 61 63 6b 61 67 65 49 64 2c 0d 0a 20  id packageId,.. 
23970 20 20 20 20 20 20 20 20 20 20 20 47 75 69 64 20             Guid 
23980 73 65 72 76 69 63 65 49 64 2c 0d 0a 20 20 20 20  serviceId,..    
23990 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61          bool wha
239a0 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf,..          
239b0 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d    bool verbose,.
239c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66  .            ref
239d0 20 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20   string error.. 
239e0 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
239f0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
23a00 20 20 20 20 20 73 74 72 69 6e 67 20 6b 65 79 4e       string keyN
23a10 61 6d 65 20 3d 20 47 65 74 56 73 4b 65 79 4e 61  ame = GetVsKeyNa
23a20 6d 65 28 76 73 56 65 72 73 69 6f 6e 29 3b 0d 0a  me(vsVersion);..
23a30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 75 73  ..            us
23a40 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72  ing (MockRegistr
23a50 79 4b 65 79 20 6b 65 79 20 3d 20 52 65 67 69 73  yKey key = Regis
23a60 74 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75  tryHelper.OpenSu
23a70 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20  bKey(..         
23a80 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b             rootK
23a90 65 79 2c 20 6b 65 79 4e 61 6d 65 2c 20 66 61 6c  ey, keyName, fal
23aa0 73 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62  se, whatIf, verb
23ab0 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ose))..         
23ac0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
23ad0 20 20 20 20 20 20 69 66 20 28 6b 65 79 20 3d 3d        if (key ==
23ae0 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
23af0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
23b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
23b10 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f  rror = String.Fo
23b20 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
23b30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
23b40 63 6f 75 6c 64 20 6e 6f 74 20 6f 70 65 6e 20 72  could not open r
23b50 65 67 69 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d  egistry key: {0}
23b60 5c 5c 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20  \\{1}",..       
23b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23b80 20 72 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e 61 6d   rootKey, keyNam
23b90 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
23ba0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
23bb0 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
23bc0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
23bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 75                 u
23be0 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74  sing (MockRegist
23bf0 72 79 4b 65 79 20 73 75 62 4b 65 79 20 3d 20 52  ryKey subKey = R
23c00 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 4f 70  egistryHelper.Op
23c10 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20  enSubKey(..     
23c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23c30 20 20 20 6b 65 79 2c 20 22 50 61 63 6b 61 67 65     key, "Package
23c40 73 22 2c 20 74 72 75 65 2c 20 77 68 61 74 49 66  s", true, whatIf
23c50 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20  , verbose))..   
23c60 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
23c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23c80 20 20 20 20 69 66 20 28 73 75 62 4b 65 79 20 3d      if (subKey =
23c90 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
23ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
23cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23cc0 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
23cd0 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
23ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23cf0 20 20 20 20 20 20 20 20 20 20 20 20 22 63 6f 75              "cou
23d00 6c 64 20 6e 6f 74 20 6f 70 65 6e 20 72 65 67 69  ld not open regi
23d10 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 50  stry key: {0}\\P
23d20 61 63 6b 61 67 65 73 22 2c 0d 0a 20 20 20 20 20  ackages",..     
23d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23d40 20 20 20 20 20 20 20 6b 65 79 29 3b 0d 0a 0d 0a         key);....
23d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23d60 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
23d70 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
23d80 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
23d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23da0 20 20 20 20 52 65 67 69 73 74 72 79 48 65 6c 70      RegistryHelp
23db0 65 72 2e 44 65 6c 65 74 65 53 75 62 4b 65 79 54  er.DeleteSubKeyT
23dc0 72 65 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ree(..          
23dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65                ke
23de0 79 2c 20 70 61 63 6b 61 67 65 49 64 2e 54 6f 53  y, packageId.ToS
23df0 74 72 69 6e 67 28 56 73 49 64 46 6f 72 6d 61 74  tring(VsIdFormat
23e00 29 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f  ), whatIf, verbo
23e10 73 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  se);..          
23e20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
23e30 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67             using
23e40 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65   (MockRegistryKe
23e50 79 20 73 75 62 4b 65 79 20 3d 20 52 65 67 69 73  y subKey = Regis
23e60 74 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75  tryHelper.OpenSu
23e70 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20  bKey(..         
23e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b                 k
23e90 65 79 2c 20 22 4d 65 6e 75 73 22 2c 20 74 72 75  ey, "Menus", tru
23ea0 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f  e, whatIf, verbo
23eb0 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  se))..          
23ec0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
23ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
23ee0 28 73 75 62 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29  (subKey == null)
23ef0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
23f00 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
23f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23f20 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e   error = String.
23f30 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
23f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23f50 20 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20       "could not 
23f60 6f 70 65 6e 20 72 65 67 69 73 74 72 79 20 6b 65  open registry ke
23f70 79 3a 20 7b 30 7d 5c 5c 4d 65 6e 75 73 22 2c 0d  y: {0}\\Menus",.
23f80 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
23f90 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79               key
23fa0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
23fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
23fc0 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
23fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23fe0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
23ff0 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74            Regist
24000 72 79 48 65 6c 70 65 72 2e 44 65 6c 65 74 65 56  ryHelper.DeleteV
24010 61 6c 75 65 28 0d 0a 20 20 20 20 20 20 20 20 20  alue(..         
24020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
24030 75 62 4b 65 79 2c 20 70 61 63 6b 61 67 65 49 64  ubKey, packageId
24040 2e 54 6f 53 74 72 69 6e 67 28 56 73 49 64 46 6f  .ToString(VsIdFo
24050 72 6d 61 74 29 2c 20 77 68 61 74 49 66 2c 0d 0a  rmat), whatIf,..
24060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24070 20 20 20 20 20 20 20 20 76 65 72 62 6f 73 65 29          verbose)
24080 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
24090 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
240a0 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 4d          using (M
240b0 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 73  ockRegistryKey s
240c0 75 62 4b 65 79 20 3d 20 52 65 67 69 73 74 72 79  ubKey = Registry
240d0 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62 4b 65  Helper.OpenSubKe
240e0 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
240f0 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 2c              key,
24100 20 22 53 65 72 76 69 63 65 73 22 2c 20 74 72 75   "Services", tru
24110 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f  e, whatIf, verbo
24120 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  se))..          
24130 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
24140 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
24150 28 73 75 62 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29  (subKey == null)
24160 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
24170 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
24180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24190 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e   error = String.
241a0 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
241b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
241c0 20 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20       "could not 
241d0 6f 70 65 6e 20 72 65 67 69 73 74 72 79 20 6b 65  open registry ke
241e0 79 3a 20 7b 30 7d 5c 5c 53 65 72 76 69 63 65 73  y: {0}\\Services
241f0 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
24200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24210 6b 65 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  key);....       
24220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24230 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
24240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24250 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
24260 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67               Reg
24270 69 73 74 72 79 48 65 6c 70 65 72 2e 44 65 6c 65  istryHelper.Dele
24280 74 65 53 75 62 4b 65 79 54 72 65 65 28 0d 0a 20  teSubKeyTree(.. 
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 73 75 62 4b 65 79 2c 20 73         subKey, s
242b0 65 72 76 69 63 65 49 64 2e 54 6f 53 74 72 69 6e  erviceId.ToStrin
242c0 67 28 56 73 49 64 46 6f 72 6d 61 74 29 2c 20 77  g(VsIdFormat), w
242d0 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20  hatIf,..        
242e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
242f0 76 65 72 62 6f 73 65 29 3b 0d 0a 20 20 20 20 20  verbose);..     
24300 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
24310 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
24320 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
24330 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20  n true;..       
24340 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f   }....        //
24350 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24360 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24370 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24380 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24390 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
243a0 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
243b0 62 6f 6f 6c 20 50 72 6f 63 65 73 73 56 73 50 61  bool ProcessVsPa
243c0 63 6b 61 67 65 28 0d 0a 20 20 20 20 20 20 20 20  ckage(..        
243d0 20 20 20 20 52 65 67 69 73 74 72 79 4b 65 79 20      RegistryKey 
243e0 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20  rootKey,..      
243f0 20 20 20 20 20 20 56 65 72 73 69 6f 6e 20 76 73        Version vs
24400 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20  Version,..      
24410 20 20 20 20 20 20 47 75 69 64 20 70 61 63 6b 61        Guid packa
24420 67 65 49 64 2c 0d 0a 20 20 20 20 20 20 20 20 20  geId,..         
24430 20 20 20 47 75 69 64 20 73 65 72 76 69 63 65 49     Guid serviceI
24440 64 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d,..            
24450 47 75 69 64 20 64 61 74 61 53 6f 75 72 63 65 49  Guid dataSourceI
24460 64 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d,..            
24470 47 75 69 64 20 64 61 74 61 50 72 6f 76 69 64 65  Guid dataProvide
24480 72 49 64 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  rId,..          
24490 20 20 6f 62 6a 65 63 74 20 63 6c 69 65 6e 74 44    object clientD
244a0 61 74 61 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ata,..          
244b0 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a    bool whatIf,..
244c0 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
244d0 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20   verbose,..     
244e0 20 20 20 20 20 20 20 72 65 66 20 73 74 72 69 6e         ref strin
244f0 67 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20  g error..       
24500 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
24510 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 41  {..            A
24520 6e 79 50 61 69 72 3c 73 74 72 69 6e 67 2c 20 62  nyPair<string, b
24530 6f 6f 6c 3e 20 70 61 69 72 20 3d 20 63 6c 69 65  ool> pair = clie
24540 6e 74 44 61 74 61 20 61 73 20 41 6e 79 50 61 69  ntData as AnyPai
24550 72 3c 73 74 72 69 6e 67 2c 20 62 6f 6f 6c 3e 3b  r<string, bool>;
24560 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
24570 69 66 20 28 70 61 69 72 20 3d 3d 20 6e 75 6c 6c  if (pair == null
24580 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
24590 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
245a0 20 20 65 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c    error = "inval
245b0 69 64 20 56 53 20 63 61 6c 6c 62 61 63 6b 20 64  id VS callback d
245c0 61 74 61 22 3b 0d 0a 20 20 20 20 20 20 20 20 20  ata";..         
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 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
24600 20 20 20 69 66 20 28 70 61 69 72 2e 59 29 0d 0a     if (pair.Y)..
24610 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
24620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
24630 65 74 75 72 6e 20 41 64 64 56 73 50 61 63 6b 61  eturn AddVsPacka
24640 67 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ge(..           
24650 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79           rootKey
24660 2c 20 76 73 56 65 72 73 69 6f 6e 2c 20 70 61 63  , vsVersion, pac
24670 6b 61 67 65 49 64 2c 20 73 65 72 76 69 63 65 49  kageId, serviceI
24680 64 2c 20 70 61 69 72 2e 58 2c 20 77 68 61 74 49  d, pair.X, whatI
24690 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f,..            
246a0 20 20 20 20 20 20 20 20 76 65 72 62 6f 73 65 2c          verbose,
246b0 20 72 65 66 20 65 72 72 6f 72 29 3b 0d 0a 20 20   ref error);..  
246c0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
246d0 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20           else.. 
246e0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
246f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
24700 74 75 72 6e 20 52 65 6d 6f 76 65 56 73 50 61 63  turn RemoveVsPac
24710 6b 61 67 65 28 0d 0a 20 20 20 20 20 20 20 20 20  kage(..         
24720 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b             rootK
24730 65 79 2c 20 76 73 56 65 72 73 69 6f 6e 2c 20 70  ey, vsVersion, p
24740 61 63 6b 61 67 65 49 64 2c 20 73 65 72 76 69 63  ackageId, servic
24750 65 49 64 2c 20 77 68 61 74 49 66 2c 20 76 65 72  eId, whatIf, ver
24760 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  bose,..         
24770 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20 65             ref e
24780 72 72 6f 72 29 3b 0d 0a 20 20 20 20 20 20 20 20  rror);..        
24790 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d      }..        }
247a0 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65  ..        #endre
247b0 67 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 23 65  gion..        #e
247c0 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
247d0 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
247e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
247f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24800 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24810 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
24820 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 41         #region A
24830 70 70 6c 69 63 61 74 69 6f 6e 20 45 6e 74 72 79  pplication Entry
24840 20 50 6f 69 6e 74 0d 0a 20 20 20 20 20 20 20 20   Point..        
24850 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 69  private static i
24860 6e 74 20 4d 61 69 6e 28 73 74 72 69 6e 67 5b 5d  nt Main(string[]
24870 20 61 72 67 73 29 0d 0a 20 20 20 20 20 20 20 20   args)..        
24880 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 43  {..            C
24890 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 63 6f 6e  onfiguration con
248a0 66 69 67 75 72 61 74 69 6f 6e 20 3d 20 6e 75 6c  figuration = nul
248b0 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l;..            
248c0 73 74 72 69 6e 67 20 65 72 72 6f 72 20 3d 20 6e  string error = n
248d0 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ull;....        
248e0 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
248f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24900 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24910 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24920 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
24930 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 43         #region C
24940 6f 6d 6d 61 6e 64 20 4c 69 6e 65 20 50 72 6f 63  ommand Line Proc
24950 65 73 73 69 6e 67 0d 0a 20 20 20 20 20 20 20 20  essing..        
24960 20 20 20 20 69 66 20 28 21 43 6f 6e 66 69 67 75      if (!Configu
24970 72 61 74 69 6f 6e 2e 46 72 6f 6d 41 72 67 73 28  ration.FromArgs(
24980 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
24990 20 20 20 20 20 20 61 72 67 73 2c 20 74 72 75 65        args, true
249a0 2c 20 72 65 66 20 63 6f 6e 66 69 67 75 72 61 74  , ref configurat
249b0 69 6f 6e 2c 20 72 65 66 20 65 72 72 6f 72 29 20  ion, ref error) 
249c0 7c 7c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ||..            
249d0 20 20 20 20 21 43 6f 6e 66 69 67 75 72 61 74 69      !Configurati
249e0 6f 6e 2e 50 72 6f 63 65 73 73 28 0d 0a 20 20 20  on.Process(..   
249f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24a00 20 61 72 67 73 2c 20 63 6f 6e 66 69 67 75 72 61   args, configura
24a10 74 69 6f 6e 2c 20 74 72 75 65 2c 20 72 65 66 20  tion, true, ref 
24a20 65 72 72 6f 72 29 29 0d 0a 20 20 20 20 20 20 20  error))..       
24a30 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
24a40 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73          TraceOps
24a50 2e 53 68 6f 77 4d 65 73 73 61 67 65 28 0d 0a 20  .ShowMessage(.. 
24a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24a70 20 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79     TracePriority
24a80 2e 48 69 67 68 65 73 74 2c 20 74 72 61 63 65 43  .Highest, traceC
24a90 61 6c 6c 62 61 63 6b 2c 20 74 68 69 73 41 73 73  allback, thisAss
24aa0 65 6d 62 6c 79 2c 0d 0a 20 20 20 20 20 20 20 20  embly,..        
24ab0 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
24ac0 72 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72 79  r, traceCategory
24ad0 2c 20 4d 65 73 73 61 67 65 42 6f 78 42 75 74 74  , MessageBoxButt
24ae0 6f 6e 73 2e 4f 4b 2c 0d 0a 20 20 20 20 20 20 20  ons.OK,..       
24af0 20 20 20 20 20 20 20 20 20 20 20 20 20 4d 65 73               Mes
24b00 73 61 67 65 42 6f 78 49 63 6f 6e 2e 45 72 72 6f  sageBoxIcon.Erro
24b10 72 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  r);....         
24b20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 31 3b         return 1;
24b30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
24b40 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
24b50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24b60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24b70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24b80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24b90 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
24ba0 20 20 49 6e 69 74 69 61 6c 69 7a 65 41 6c 6c 46    InitializeAllF
24bb0 72 61 6d 65 77 6f 72 6b 73 28 63 6f 6e 66 69 67  rameworks(config
24bc0 75 72 61 74 69 6f 6e 29 3b 0d 0a 20 20 20 20 20  uration);..     
24bd0 20 20 20 20 20 20 20 49 6e 69 74 69 61 6c 69 7a         Initializ
24be0 65 41 6c 6c 56 73 56 65 72 73 69 6f 6e 73 28 63  eAllVsVersions(c
24bf0 6f 6e 66 69 67 75 72 61 74 69 6f 6e 29 3b 0d 0a  onfiguration);..
24c00 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64              #end
24c10 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
24c20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
24c30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24c40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24c50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24c60 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
24c70 20 20 20 20 20 20 20 20 20 41 73 73 65 6d 62 6c           Assembl
24c80 79 4e 61 6d 65 20 61 73 73 65 6d 62 6c 79 4e 61  yName assemblyNa
24c90 6d 65 20 3d 20 41 73 73 65 6d 62 6c 79 4e 61 6d  me = AssemblyNam
24ca0 65 2e 47 65 74 41 73 73 65 6d 62 6c 79 4e 61 6d  e.GetAssemblyNam
24cb0 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
24cc0 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f      configuratio
24cd0 6e 2e 43 6f 72 65 46 69 6c 65 4e 61 6d 65 29 3b  n.CoreFileName);
24ce0 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 0d 0a   /* throw */....
24cf0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
24d00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24d10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24d20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24d30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
24d40 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 41  ...            A
24d50 6e 79 50 61 69 72 3c 73 74 72 69 6e 67 2c 20 62  nyPair<string, b
24d60 6f 6f 6c 3e 20 64 69 72 65 63 74 6f 72 79 50 61  ool> directoryPa
24d70 69 72 20 3d 20 6e 65 77 20 41 6e 79 50 61 69 72  ir = new AnyPair
24d80 3c 73 74 72 69 6e 67 2c 20 62 6f 6f 6c 3e 28 0d  <string, bool>(.
24d90 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
24da0 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 44   configuration.D
24db0 69 72 65 63 74 6f 72 79 2c 20 63 6f 6e 66 69 67  irectory, config
24dc0 75 72 61 74 69 6f 6e 2e 49 6e 73 74 61 6c 6c 29  uration.Install)
24dd0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
24de0 20 41 6e 79 50 61 69 72 3c 73 74 72 69 6e 67 2c   AnyPair<string,
24df0 20 62 6f 6f 6c 3e 20 66 69 6c 65 4e 61 6d 65 50   bool> fileNameP
24e00 61 69 72 20 3d 20 6e 65 77 20 41 6e 79 50 61 69  air = new AnyPai
24e10 72 3c 73 74 72 69 6e 67 2c 20 62 6f 6f 6c 3e 28  r<string, bool>(
24e20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
24e30 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e    configuration.
24e40 44 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65  DesignerFileName
24e50 2c 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e  , configuration.
24e60 49 6e 73 74 61 6c 6c 29 3b 0d 0a 0d 0a 20 20 20  Install);....   
24e70 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
24e80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24e90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24ea0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24eb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
24ec0 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67              #reg
24ed0 69 6f 6e 20 2e 4e 45 54 20 47 41 43 20 49 6e 73  ion .NET GAC Ins
24ee0 74 61 6c 6c 2f 52 65 6d 6f 76 65 0d 0a 20 20 20  tall/Remove..   
24ef0 20 20 20 20 20 20 20 20 20 69 66 20 28 63 6f 6e           if (con
24f00 66 69 67 75 72 61 74 69 6f 6e 2e 48 61 73 46 6c  figuration.HasFl
24f10 61 67 73 28 49 6e 73 74 61 6c 6c 46 6c 61 67 73  ags(InstallFlags
24f20 2e 47 41 43 2c 20 74 72 75 65 29 29 0d 0a 20 20  .GAC, true))..  
24f30 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
24f40 20 20 20 20 20 20 20 20 20 20 20 20 20 50 75 62               Pub
24f50 6c 69 73 68 20 70 75 62 6c 69 73 68 20 3d 20 6e  lish publish = n
24f60 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ull;....        
24f70 20 20 20 20 20 20 20 20 69 66 20 28 21 63 6f 6e          if (!con
24f80 66 69 67 75 72 61 74 69 6f 6e 2e 57 68 61 74 49  figuration.WhatI
24f90 66 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f)..            
24fa0 20 20 20 20 20 20 20 20 70 75 62 6c 69 73 68 20          publish 
24fb0 3d 20 6e 65 77 20 50 75 62 6c 69 73 68 28 29 3b  = new Publish();
24fc0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
24fd0 20 20 20 20 69 66 20 28 63 6f 6e 66 69 67 75 72      if (configur
24fe0 61 74 69 6f 6e 2e 49 6e 73 74 61 6c 6c 29 0d 0a  ation.Install)..
24ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25000 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
25010 20 20 20 20 20 20 20 69 66 20 28 21 63 6f 6e 66         if (!conf
25020 69 67 75 72 61 74 69 6f 6e 2e 57 68 61 74 49 66  iguration.WhatIf
25030 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
25040 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
25050 73 68 2e 47 61 63 49 6e 73 74 61 6c 6c 28 63 6f  sh.GacInstall(co
25060 6e 66 69 67 75 72 61 74 69 6f 6e 2e 43 6f 72 65  nfiguration.Core
25070 46 69 6c 65 4e 61 6d 65 29 3b 20 2f 2a 20 74 68  FileName); /* th
25080 72 6f 77 20 2a 2f 0d 0a 0d 0a 20 20 20 20 20 20  row */....      
25090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
250a0 61 63 65 4f 70 73 2e 54 72 61 63 65 28 0d 0a 20  aceOps.Trace(.. 
250b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
250c0 20 20 20 20 20 20 20 54 72 61 63 65 50 72 69 6f         TracePrio
250d0 72 69 74 79 2e 48 69 67 68 65 73 74 2c 20 74 72  rity.Highest, tr
250e0 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72  aceCallback, Str
250f0 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
25100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25110 20 20 20 20 20 22 47 61 63 49 6e 73 74 61 6c 6c       "GacInstall
25120 3a 20 61 73 73 65 6d 62 6c 79 50 61 74 68 20 3d  : assemblyPath =
25130 20 7b 30 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20   {0}",..        
25140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25150 46 6f 72 44 69 73 70 6c 61 79 28 63 6f 6e 66 69  ForDisplay(confi
25160 67 75 72 61 74 69 6f 6e 2e 43 6f 72 65 46 69 6c  guration.CoreFil
25170 65 4e 61 6d 65 29 29 2c 20 74 72 61 63 65 43 61  eName)), traceCa
25180 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
25190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
251a0 69 66 20 28 21 63 6f 6e 66 69 67 75 72 61 74 69  if (!configurati
251b0 6f 6e 2e 57 68 61 74 49 66 29 0d 0a 20 20 20 20  on.WhatIf)..    
251c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
251d0 20 20 20 20 70 75 62 6c 69 73 68 2e 47 61 63 49      publish.GacI
251e0 6e 73 74 61 6c 6c 28 63 6f 6e 66 69 67 75 72 61  nstall(configura
251f0 74 69 6f 6e 2e 4c 69 6e 71 46 69 6c 65 4e 61 6d  tion.LinqFileNam
25200 65 29 3b 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d  e); /* throw */.
25210 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
25220 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e         TraceOps.
25230 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20  Trace(..        
25240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25250 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 48 69  TracePriority.Hi
25260 67 68 65 73 74 2c 20 74 72 61 63 65 43 61 6c 6c  ghest, traceCall
25270 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72  back, String.For
25280 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
25290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 47                "G
252a0 61 63 49 6e 73 74 61 6c 6c 3a 20 61 73 73 65 6d  acInstall: assem
252b0 62 6c 79 50 61 74 68 20 3d 20 7b 30 7d 22 2c 0d  blyPath = {0}",.
252c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
252d0 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70           ForDisp
252e0 6c 61 79 28 63 6f 6e 66 69 67 75 72 61 74 69 6f  lay(configuratio
252f0 6e 2e 4c 69 6e 71 46 69 6c 65 4e 61 6d 65 29 29  n.LinqFileName))
25300 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29  , traceCategory)
25310 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
25320 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
25330 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20        else..    
25340 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
25350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25360 20 20 20 69 66 20 28 21 63 6f 6e 66 69 67 75 72     if (!configur
25370 61 74 69 6f 6e 2e 57 68 61 74 49 66 29 0d 0a 20  ation.WhatIf).. 
25380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25390 20 20 20 20 20 20 20 70 75 62 6c 69 73 68 2e 47         publish.G
253a0 61 63 52 65 6d 6f 76 65 28 63 6f 6e 66 69 67 75  acRemove(configu
253b0 72 61 74 69 6f 6e 2e 4c 69 6e 71 46 69 6c 65 4e  ration.LinqFileN
253c0 61 6d 65 29 3b 20 2f 2a 20 74 68 72 6f 77 20 2a  ame); /* throw *
253d0 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
253e0 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70           TraceOp
253f0 73 2e 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20  s.Trace(..      
25400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25410 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e    TracePriority.
25420 48 69 67 68 65 73 74 2c 20 74 72 61 63 65 43 61  Highest, traceCa
25430 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46  llback, String.F
25440 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
25450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25460 22 47 61 63 52 65 6d 6f 76 65 3a 20 61 73 73 65  "GacRemove: asse
25470 6d 62 6c 79 50 61 74 68 20 3d 20 7b 30 7d 22 2c  mblyPath = {0}",
25480 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
25490 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73            ForDis
254a0 70 6c 61 79 28 63 6f 6e 66 69 67 75 72 61 74 69  play(configurati
254b0 6f 6e 2e 4c 69 6e 71 46 69 6c 65 4e 61 6d 65 29  on.LinqFileName)
254c0 29 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72 79  ), traceCategory
254d0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
254e0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21 63            if (!c
254f0 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 57 68 61  onfiguration.Wha
25500 74 49 66 29 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf)..          
25510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 75                pu
25520 62 6c 69 73 68 2e 47 61 63 52 65 6d 6f 76 65 28  blish.GacRemove(
25530 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 43 6f  configuration.Co
25540 72 65 46 69 6c 65 4e 61 6d 65 29 3b 20 2f 2a 20  reFileName); /* 
25550 74 68 72 6f 77 20 2a 2f 0d 0a 0d 0a 20 20 20 20  throw */....    
25560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25570 54 72 61 63 65 4f 70 73 2e 54 72 61 63 65 28 0d  TraceOps.Trace(.
25580 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
25590 20 20 20 20 20 20 20 20 20 54 72 61 63 65 50 72           TracePr
255a0 69 6f 72 69 74 79 2e 48 69 67 68 65 73 74 2c 20  iority.Highest, 
255b0 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53  traceCallback, S
255c0 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
255d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
255e0 20 20 20 20 20 20 20 22 47 61 63 52 65 6d 6f 76         "GacRemov
255f0 65 3a 20 61 73 73 65 6d 62 6c 79 50 61 74 68 20  e: assemblyPath 
25600 3d 20 7b 30 7d 22 2c 0d 0a 20 20 20 20 20 20 20  = {0}",..       
25610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25620 20 46 6f 72 44 69 73 70 6c 61 79 28 63 6f 6e 66   ForDisplay(conf
25630 69 67 75 72 61 74 69 6f 6e 2e 43 6f 72 65 46 69  iguration.CoreFi
25640 6c 65 4e 61 6d 65 29 29 2c 20 74 72 61 63 65 43  leName)), traceC
25650 61 74 65 67 6f 72 79 29 3b 0d 0a 20 20 20 20 20  ategory);..     
25660 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
25670 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
25680 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67           #endreg
25690 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ion....         
256a0 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
256b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
256c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
256d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
256e0 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
256f0 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 2e 4e        #region .N
25700 45 54 20 41 73 73 65 6d 62 6c 79 46 6f 6c 64 65  ET AssemblyFolde
25710 72 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  rs..            
25720 69 66 20 28 63 6f 6e 66 69 67 75 72 61 74 69 6f  if (configuratio
25730 6e 2e 48 61 73 46 6c 61 67 73 28 49 6e 73 74 61  n.HasFlags(Insta
25740 6c 6c 46 6c 61 67 73 2e 41 73 73 65 6d 62 6c 79  llFlags.Assembly
25750 46 6f 6c 64 65 72 73 2c 20 74 72 75 65 29 29 0d  Folders, true)).
25760 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
25770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25780 69 66 20 28 21 46 6f 72 45 61 63 68 46 72 61 6d  if (!ForEachFram
25790 65 77 6f 72 6b 52 65 67 69 73 74 72 79 28 50 72  eworkRegistry(Pr
257a0 6f 63 65 73 73 41 73 73 65 6d 62 6c 79 46 6f 6c  ocessAssemblyFol
257b0 64 65 72 73 2c 0d 0a 20 20 20 20 20 20 20 20 20  ders,..         
257c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
257d0 69 72 65 63 74 6f 72 79 50 61 69 72 2c 20 63 6f  irectoryPair, co
257e0 6e 66 69 67 75 72 61 74 69 6f 6e 2e 57 68 61 74  nfiguration.What
257f0 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  If,..           
25800 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
25810 66 69 67 75 72 61 74 69 6f 6e 2e 56 65 72 62 6f  figuration.Verbo
25820 73 65 2c 20 72 65 66 20 65 72 72 6f 72 29 29 0d  se, ref error)).
25830 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
25840 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
25850 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73          TraceOps
25860 2e 53 68 6f 77 4d 65 73 73 61 67 65 28 0d 0a 20  .ShowMessage(.. 
25870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25880 20 20 20 20 20 20 20 54 72 61 63 65 50 72 69 6f         TracePrio
25890 72 69 74 79 2e 48 69 67 68 65 73 74 2c 20 74 72  rity.Highest, tr
258a0 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 6e 75 6c  aceCallback, nul
258b0 6c 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l,..            
258c0 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
258d0 72 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72 79  r, traceCategory
258e0 2c 20 4d 65 73 73 61 67 65 42 6f 78 42 75 74 74  , MessageBoxButt
258f0 6f 6e 73 2e 4f 4b 2c 0d 0a 20 20 20 20 20 20 20  ons.OK,..       
25900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25910 20 4d 65 73 73 61 67 65 42 6f 78 49 63 6f 6e 2e   MessageBoxIcon.
25920 45 72 72 6f 72 29 3b 0d 0a 0d 0a 20 20 20 20 20  Error);....     
25930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
25940 65 74 75 72 6e 20 31 3b 0d 0a 20 20 20 20 20 20  eturn 1;..      
25950 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
25960 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
25970 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
25980 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  on....          
25990 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
259a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
259b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
259c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
259d0 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
259e0 20 20 20 20 20 23 72 65 67 69 6f 6e 20 2e 4e 45       #region .NE
259f0 54 20 44 62 50 72 6f 76 69 64 65 72 46 61 63 74  T DbProviderFact
25a00 6f 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ory..           
25a10 20 69 66 20 28 63 6f 6e 66 69 67 75 72 61 74 69   if (configurati
25a20 6f 6e 2e 48 61 73 46 6c 61 67 73 28 49 6e 73 74  on.HasFlags(Inst
25a30 61 6c 6c 46 6c 61 67 73 2e 44 62 50 72 6f 76 69  allFlags.DbProvi
25a40 64 65 72 46 61 63 74 6f 72 79 2c 20 74 72 75 65  derFactory, true
25a50 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
25a60 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
25a70 20 20 20 62 6f 6f 6c 20 73 61 76 65 64 20 3d 20     bool saved = 
25a80 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  false;....      
25a90 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21 46            if (!F
25aa0 6f 72 45 61 63 68 46 72 61 6d 65 77 6f 72 6b 43  orEachFrameworkC
25ab0 6f 6e 66 69 67 28 50 72 6f 63 65 73 73 44 62 50  onfig(ProcessDbP
25ac0 72 6f 76 69 64 65 72 46 61 63 74 6f 72 79 2c 0d  roviderFactory,.
25ad0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
25ae0 20 20 20 20 20 20 20 20 20 49 6e 76 61 72 69 61           Invaria
25af0 6e 74 4e 61 6d 65 2c 20 50 72 6f 76 69 64 65 72  ntName, Provider
25b00 4e 61 6d 65 2c 20 44 65 73 63 72 69 70 74 69 6f  Name, Descriptio
25b10 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n,..            
25b20 20 20 20 20 20 20 20 20 20 20 20 20 46 61 63 74              Fact
25b30 6f 72 79 54 79 70 65 4e 61 6d 65 2c 20 61 73 73  oryTypeName, ass
25b40 65 6d 62 6c 79 4e 61 6d 65 2c 20 64 69 72 65 63  emblyName, direc
25b50 74 6f 72 79 50 61 69 72 2c 0d 0a 20 20 20 20 20  toryPair,..     
25b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25b70 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e     configuration
25b80 2e 57 68 61 74 49 66 2c 20 63 6f 6e 66 69 67 75  .WhatIf, configu
25b90 72 61 74 69 6f 6e 2e 56 65 72 62 6f 73 65 2c 0d  ration.Verbose,.
25ba0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
25bb0 20 20 20 20 20 20 20 20 20 72 65 66 20 73 61 76           ref sav
25bc0 65 64 2c 20 72 65 66 20 65 72 72 6f 72 29 29 0d  ed, ref error)).
25bd0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
25be0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
25bf0 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73          TraceOps
25c00 2e 53 68 6f 77 4d 65 73 73 61 67 65 28 0d 0a 20  .ShowMessage(.. 
25c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25c20 20 20 20 20 20 20 20 54 72 61 63 65 50 72 69 6f         TracePrio
25c30 72 69 74 79 2e 48 69 67 68 65 73 74 2c 20 74 72  rity.Highest, tr
25c40 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 6e 75 6c  aceCallback, nul
25c50 6c 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l,..            
25c60 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
25c70 72 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72 79  r, traceCategory
25c80 2c 20 4d 65 73 73 61 67 65 42 6f 78 42 75 74 74  , MessageBoxButt
25c90 6f 6e 73 2e 4f 4b 2c 0d 0a 20 20 20 20 20 20 20  ons.OK,..       
25ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25cb0 20 4d 65 73 73 61 67 65 42 6f 78 49 63 6f 6e 2e   MessageBoxIcon.
25cc0 45 72 72 6f 72 29 3b 0d 0a 0d 0a 20 20 20 20 20  Error);....     
25cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
25ce0 65 74 75 72 6e 20 31 3b 0d 0a 20 20 20 20 20 20  eturn 1;..      
25cf0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
25d00 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
25d10 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
25d20 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  on....          
25d30 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
25d40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25d50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25d60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25d70 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
25d80 20 20 20 20 20 23 72 65 67 69 6f 6e 20 56 53 20       #region VS 
25d90 50 61 63 6b 61 67 65 0d 0a 20 20 20 20 20 20 20  Package..       
25da0 20 20 20 20 20 69 66 20 28 63 6f 6e 66 69 67 75       if (configu
25db0 72 61 74 69 6f 6e 2e 48 61 73 46 6c 61 67 73 28  ration.HasFlags(
25dc0 49 6e 73 74 61 6c 6c 46 6c 61 67 73 2e 56 73 50  InstallFlags.VsP
25dd0 61 63 6b 61 67 65 2c 20 74 72 75 65 29 29 0d 0a  ackage, true))..
25de0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
25df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
25e00 66 20 28 21 46 6f 72 45 61 63 68 56 73 56 65 72  f (!ForEachVsVer
25e10 73 69 6f 6e 52 65 67 69 73 74 72 79 28 50 72 6f  sionRegistry(Pro
25e20 63 65 73 73 56 73 50 61 63 6b 61 67 65 2c 0d 0a  cessVsPackage,..
25e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25e40 20 20 20 20 20 20 20 20 28 47 75 69 64 29 76 73          (Guid)vs
25e50 50 61 63 6b 61 67 65 49 64 2c 20 28 47 75 69 64  PackageId, (Guid
25e60 29 76 73 53 65 72 76 69 63 65 49 64 2c 0d 0a 20  )vsServiceId,.. 
25e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25e80 20 20 20 20 20 20 20 28 47 75 69 64 29 76 73 44         (Guid)vsD
25e90 61 74 61 53 6f 75 72 63 65 73 49 64 2c 20 28 47  ataSourcesId, (G
25ea0 75 69 64 29 76 73 44 61 74 61 50 72 6f 76 69 64  uid)vsDataProvid
25eb0 65 72 49 64 2c 0d 0a 20 20 20 20 20 20 20 20 20  erId,..         
25ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66                 f
25ed0 69 6c 65 4e 61 6d 65 50 61 69 72 2c 20 63 6f 6e  ileNamePair, con
25ee0 66 69 67 75 72 61 74 69 6f 6e 2e 57 68 61 74 49  figuration.WhatI
25ef0 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f,..            
25f00 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66              conf
25f10 69 67 75 72 61 74 69 6f 6e 2e 56 65 72 62 6f 73  iguration.Verbos
25f20 65 2c 20 72 65 66 20 65 72 72 6f 72 29 29 0d 0a  e, ref error))..
25f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25f40 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
25f50 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e         TraceOps.
25f60 53 68 6f 77 4d 65 73 73 61 67 65 28 0d 0a 20 20  ShowMessage(..  
25f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25f80 20 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72        TracePrior
25f90 69 74 79 2e 48 69 67 68 65 73 74 2c 20 74 72 61  ity.Highest, tra
25fa0 63 65 43 61 6c 6c 62 61 63 6b 2c 20 6e 75 6c 6c  ceCallback, null
25fb0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
25fc0 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
25fd0 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 2c  , traceCategory,
25fe0 20 4d 65 73 73 61 67 65 42 6f 78 42 75 74 74 6f   MessageBoxButto
25ff0 6e 73 2e 4f 4b 2c 0d 0a 20 20 20 20 20 20 20 20  ns.OK,..        
26000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26010 4d 65 73 73 61 67 65 42 6f 78 49 63 6f 6e 2e 45  MessageBoxIcon.E
26020 72 72 6f 72 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  rror);....      
26030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
26040 74 75 72 6e 20 31 3b 0d 0a 20 20 20 20 20 20 20  turn 1;..       
26050 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
26060 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
26070 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
26080 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n....           
26090 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
260a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
260b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
260c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
260d0 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
260e0 20 20 20 20 23 72 65 67 69 6f 6e 20 56 53 20 44      #region VS D
260f0 61 74 61 53 6f 75 72 63 65 0d 0a 20 20 20 20 20  ataSource..     
26100 20 20 20 20 20 20 20 69 66 20 28 63 6f 6e 66 69         if (confi
26110 67 75 72 61 74 69 6f 6e 2e 48 61 73 46 6c 61 67  guration.HasFlag
26120 73 28 49 6e 73 74 61 6c 6c 46 6c 61 67 73 2e 56  s(InstallFlags.V
26130 73 44 61 74 61 53 6f 75 72 63 65 2c 20 74 72 75  sDataSource, tru
26140 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e))..           
26150 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
26160 20 20 20 20 69 66 20 28 21 46 6f 72 45 61 63 68      if (!ForEach
26170 56 73 56 65 72 73 69 6f 6e 52 65 67 69 73 74 72  VsVersionRegistr
26180 79 28 50 72 6f 63 65 73 73 56 73 44 61 74 61 53  y(ProcessVsDataS
26190 6f 75 72 63 65 2c 0d 0a 20 20 20 20 20 20 20 20  ource,..        
261a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
261b0 28 47 75 69 64 29 76 73 50 61 63 6b 61 67 65 49  (Guid)vsPackageI
261c0 64 2c 20 28 47 75 69 64 29 76 73 53 65 72 76 69  d, (Guid)vsServi
261d0 63 65 49 64 2c 0d 0a 20 20 20 20 20 20 20 20 20  ceId,..         
261e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28                 (
261f0 47 75 69 64 29 76 73 44 61 74 61 53 6f 75 72 63  Guid)vsDataSourc
26200 65 73 49 64 2c 20 28 47 75 69 64 29 76 73 44 61  esId, (Guid)vsDa
26210 74 61 50 72 6f 76 69 64 65 72 49 64 2c 0d 0a 20  taProviderId,.. 
26220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26230 20 20 20 20 20 20 20 66 69 6c 65 4e 61 6d 65 50         fileNameP
26240 61 69 72 2c 20 63 6f 6e 66 69 67 75 72 61 74 69  air, configurati
26250 6f 6e 2e 57 68 61 74 49 66 2c 0d 0a 20 20 20 20  on.WhatIf,..    
26260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26270 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f      configuratio
26280 6e 2e 56 65 72 62 6f 73 65 2c 20 72 65 66 20 65  n.Verbose, ref e
26290 72 72 6f 72 29 29 0d 0a 20 20 20 20 20 20 20 20  rror))..        
262a0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
262b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
262c0 72 61 63 65 4f 70 73 2e 53 68 6f 77 4d 65 73 73  raceOps.ShowMess
262d0 61 67 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  age(..          
262e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
262f0 61 63 65 50 72 69 6f 72 69 74 79 2e 48 69 67 68  acePriority.High
26300 65 73 74 2c 20 74 72 61 63 65 43 61 6c 6c 62 61  est, traceCallba
26310 63 6b 2c 20 6e 75 6c 6c 2c 0d 0a 20 20 20 20 20  ck, null,..     
26320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26330 20 20 20 65 72 72 6f 72 2c 20 74 72 61 63 65 43     error, traceC
26340 61 74 65 67 6f 72 79 2c 20 4d 65 73 73 61 67 65  ategory, Message
26350 42 6f 78 42 75 74 74 6f 6e 73 2e 4f 4b 2c 0d 0a  BoxButtons.OK,..
26360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26370 20 20 20 20 20 20 20 20 4d 65 73 73 61 67 65 42          MessageB
26380 6f 78 49 63 6f 6e 2e 45 72 72 6f 72 29 3b 0d 0a  oxIcon.Error);..
26390 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
263a0 20 20 20 20 20 20 72 65 74 75 72 6e 20 31 3b 0d        return 1;.
263b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
263c0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
263d0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  }..            #
263e0 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
263f0 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
26400 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26410 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26420 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26430 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
26440 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67              #reg
26450 69 6f 6e 20 56 53 20 44 61 74 61 50 72 6f 76 69  ion VS DataProvi
26460 64 65 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20  der..           
26470 20 69 66 20 28 63 6f 6e 66 69 67 75 72 61 74 69   if (configurati
26480 6f 6e 2e 48 61 73 46 6c 61 67 73 28 49 6e 73 74  on.HasFlags(Inst
26490 61 6c 6c 46 6c 61 67 73 2e 56 73 44 61 74 61 50  allFlags.VsDataP
264a0 72 6f 76 69 64 65 72 2c 20 74 72 75 65 29 29 0d  rovider, true)).
264b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
264c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
264d0 69 66 20 28 21 46 6f 72 45 61 63 68 56 73 56 65  if (!ForEachVsVe
264e0 72 73 69 6f 6e 52 65 67 69 73 74 72 79 28 50 72  rsionRegistry(Pr
264f0 6f 63 65 73 73 56 73 44 61 74 61 50 72 6f 76 69  ocessVsDataProvi
26500 64 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  der,..          
26510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 47                (G
26520 75 69 64 29 76 73 50 61 63 6b 61 67 65 49 64 2c  uid)vsPackageId,
26530 20 28 47 75 69 64 29 76 73 53 65 72 76 69 63 65   (Guid)vsService
26540 49 64 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  Id,..           
26550 20 20 20 20 20 20 20 20 20 20 20 20 20 28 47 75               (Gu
26560 69 64 29 76 73 44 61 74 61 53 6f 75 72 63 65 73  id)vsDataSources
26570 49 64 2c 20 28 47 75 69 64 29 76 73 44 61 74 61  Id, (Guid)vsData
26580 50 72 6f 76 69 64 65 72 49 64 2c 0d 0a 20 20 20  ProviderId,..   
26590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
265a0 20 20 20 20 20 66 69 6c 65 4e 61 6d 65 50 61 69       fileNamePai
265b0 72 2c 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  r, configuration
265c0 2e 57 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20  .WhatIf,..      
265d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
265e0 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e    configuration.
265f0 56 65 72 62 6f 73 65 2c 20 72 65 66 20 65 72 72  Verbose, ref err
26600 6f 72 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  or))..          
26610 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
26620 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
26630 63 65 4f 70 73 2e 53 68 6f 77 4d 65 73 73 61 67  ceOps.ShowMessag
26640 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
26650 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
26660 65 50 72 69 6f 72 69 74 79 2e 48 69 67 68 65 73  ePriority.Highes
26670 74 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b  t, traceCallback
26680 2c 20 6e 75 6c 6c 2c 0d 0a 20 20 20 20 20 20 20  , null,..       
26690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
266a0 20 65 72 72 6f 72 2c 20 74 72 61 63 65 43 61 74   error, traceCat
266b0 65 67 6f 72 79 2c 20 4d 65 73 73 61 67 65 42 6f  egory, MessageBo
266c0 78 42 75 74 74 6f 6e 73 2e 4f 4b 2c 0d 0a 20 20  xButtons.OK,..  
266d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
266e0 20 20 20 20 20 20 4d 65 73 73 61 67 65 42 6f 78        MessageBox
266f0 49 63 6f 6e 2e 45 72 72 6f 72 29 3b 0d 0a 0d 0a  Icon.Error);....
26700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26710 20 20 20 20 72 65 74 75 72 6e 20 31 3b 0d 0a 20      return 1;.. 
26720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
26730 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
26740 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e  .            #en
26750 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
26760 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
26770 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26780 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26790 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
267a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
267b0 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f            TraceO
267c0 70 73 2e 54 72 61 63 65 28 0d 0a 20 20 20 20 20  ps.Trace(..     
267d0 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
267e0 50 72 69 6f 72 69 74 79 2e 48 69 67 68 65 72 2c  Priority.Higher,
267f0 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20   traceCallback, 
26800 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
26810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26820 22 73 75 62 4b 65 79 73 43 72 65 61 74 65 64 20  "subKeysCreated 
26830 3d 20 7b 30 7d 2c 20 73 75 62 4b 65 79 73 44 65  = {0}, subKeysDe
26840 6c 65 74 65 64 20 3d 20 7b 31 7d 2c 20 22 20 2b  leted = {1}, " +
26850 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
26860 20 20 22 6b 65 79 56 61 6c 75 65 73 53 65 74 20    "keyValuesSet 
26870 3d 20 7b 32 7d 2c 20 6b 65 79 56 61 6c 75 65 73  = {2}, keyValues
26880 44 65 6c 65 74 65 64 20 3d 20 7b 33 7d 22 2c 0d  Deleted = {3}",.
26890 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
268a0 20 46 6f 72 44 69 73 70 6c 61 79 28 52 65 67 69   ForDisplay(Regi
268b0 73 74 72 79 48 65 6c 70 65 72 2e 53 75 62 4b 65  stryHelper.SubKe
268c0 79 73 43 72 65 61 74 65 64 29 2c 0d 0a 20 20 20  ysCreated),..   
268d0 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72               For
268e0 44 69 73 70 6c 61 79 28 52 65 67 69 73 74 72 79  Display(Registry
268f0 48 65 6c 70 65 72 2e 53 75 62 4b 65 79 73 44 65  Helper.SubKeysDe
26900 6c 65 74 65 64 29 2c 0d 0a 20 20 20 20 20 20 20  leted),..       
26910 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70           ForDisp
26920 6c 61 79 28 52 65 67 69 73 74 72 79 48 65 6c 70  lay(RegistryHelp
26930 65 72 2e 4b 65 79 56 61 6c 75 65 73 53 65 74 29  er.KeyValuesSet)
26940 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
26950 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 52 65     ForDisplay(Re
26960 67 69 73 74 72 79 48 65 6c 70 65 72 2e 4b 65 79  gistryHelper.Key
26970 56 61 6c 75 65 73 44 65 6c 65 74 65 64 29 29 2c  ValuesDeleted)),
26980 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
26990 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
269a0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
269b0 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
269c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
269d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
269e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
269f0 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
26a00 20 20 20 20 72 65 74 75 72 6e 20 30 3b 0d 0a 20      return 0;.. 
26a10 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
26a20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 20 20    #endregion..  
26a30 20 20 7d 0d 0a 20 20 20 20 23 65 6e 64 72 65 67    }..    #endreg
26a40 69 6f 6e 0d 0a 7d 0d 0a                          ion..}..