System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact ce678c090b92e3bbc3f3537b5c7b9fb5d867ad43:


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 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
1d040 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1d050 20 20 69 66 20 28 76 65 72 62 6f 73 65 29 0d 0a    if (verbose)..
1d060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d070 20 20 20 20 54 72 61 63 65 4f 70 73 2e 54 72 61      TraceOps.Tra
1d080 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ce(..           
1d090 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
1d0a0 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73  cePriority.Lowes
1d0b0 74 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b  t, traceCallback
1d0c0 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  , String.Format(
1d0d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1d0e0 20 20 20 20 20 20 20 20 20 20 22 65 6c 65 6d 65            "eleme
1d0f0 6e 74 20 3d 20 7b 30 7d 22 2c 20 46 6f 72 44 69  nt = {0}", ForDi
1d100 73 70 6c 61 79 28 65 6c 65 6d 65 6e 74 29 29 2c  splay(element)),
1d110 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
1d120 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1d130 20 20 20 20 69 66 20 28 21 77 68 61 74 49 66 29      if (!whatIf)
1d140 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1d150 20 20 20 20 20 20 64 6f 63 75 6d 65 6e 74 2e 53        document.S
1d160 61 76 65 28 66 69 6c 65 4e 61 6d 65 29 3b 0d 0a  ave(fileName);..
1d170 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1d180 20 20 73 61 76 65 64 20 3d 20 74 72 75 65 3b 0d    saved = true;.
1d190 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
1d1a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
1d1b0 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20  turn true;..    
1d1c0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
1d1d0 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20  ////////....    
1d220 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74      private stat
1d230 69 63 20 62 6f 6f 6c 20 52 65 6d 6f 76 65 44 62  ic bool RemoveDb
1d240 50 72 6f 76 69 64 65 72 46 61 63 74 6f 72 79 28  ProviderFactory(
1d250 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
1d260 72 69 6e 67 20 66 69 6c 65 4e 61 6d 65 2c 0d 0a  ring fileName,..
1d270 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
1d280 6e 67 20 69 6e 76 61 72 69 61 6e 74 2c 0d 0a 20  ng invariant,.. 
1d290 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
1d2a0 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20  whatIf,..       
1d2b0 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73       bool verbos
1d2c0 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
1d2d0 72 65 66 20 62 6f 6f 6c 20 73 61 76 65 64 2c 0d  ref bool saved,.
1d2e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66  .            ref
1d2f0 20 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20   string error.. 
1d300 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
1d310 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1d320 20 20 20 20 20 62 6f 6f 6c 20 64 69 72 74 79 20       bool dirty 
1d330 3d 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  = false;..      
1d340 20 20 20 20 20 20 58 6d 6c 44 6f 63 75 6d 65 6e        XmlDocumen
1d350 74 20 64 6f 63 75 6d 65 6e 74 20 3d 20 6e 65 77  t document = new
1d360 20 58 6d 6c 44 6f 63 75 6d 65 6e 74 28 29 3b 0d   XmlDocument();.
1d370 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 64  ...            d
1d380 6f 63 75 6d 65 6e 74 2e 50 72 65 73 65 72 76 65  ocument.Preserve
1d390 57 68 69 74 65 73 70 61 63 65 20 3d 20 74 72 75  Whitespace = tru
1d3a0 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
1d3b0 64 6f 63 75 6d 65 6e 74 2e 4c 6f 61 64 28 66 69  document.Load(fi
1d3c0 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20  leName);....    
1d3d0 20 20 20 20 20 20 20 20 58 6d 6c 45 6c 65 6d 65          XmlEleme
1d3e0 6e 74 20 65 6c 65 6d 65 6e 74 20 3d 20 64 6f 63  nt element = doc
1d3f0 75 6d 65 6e 74 2e 53 65 6c 65 63 74 53 69 6e 67  ument.SelectSing
1d400 6c 65 4e 6f 64 65 28 53 74 72 69 6e 67 2e 46 6f  leNode(String.Fo
1d410 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
1d420 20 20 20 20 20 20 20 58 50 61 74 68 46 6f 72 41         XPathForA
1d430 64 64 45 6c 65 6d 65 6e 74 2c 20 69 6e 76 61 72  ddElement, invar
1d440 69 61 6e 74 29 29 20 61 73 20 58 6d 6c 45 6c 65  iant)) as XmlEle
1d450 6d 65 6e 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ment;....       
1d460 20 20 20 20 20 69 66 20 28 65 6c 65 6d 65 6e 74       if (element
1d470 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   != null)..     
1d480 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
1d490 20 20 20 20 20 20 20 20 20 20 65 6c 65 6d 65 6e            elemen
1d4a0 74 2e 50 61 72 65 6e 74 4e 6f 64 65 2e 52 65 6d  t.ParentNode.Rem
1d4b0 6f 76 65 43 68 69 6c 64 28 65 6c 65 6d 65 6e 74  oveChild(element
1d4c0 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
1d4d0 20 20 20 20 64 69 72 74 79 20 3d 20 74 72 75 65      dirty = true
1d4e0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
1d4f0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1d500 65 6c 65 6d 65 6e 74 20 3d 20 64 6f 63 75 6d 65  element = docume
1d510 6e 74 2e 53 65 6c 65 63 74 53 69 6e 67 6c 65 4e  nt.SelectSingleN
1d520 6f 64 65 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ode(String.Forma
1d530 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
1d540 20 20 20 20 58 50 61 74 68 46 6f 72 52 65 6d 6f      XPathForRemo
1d550 76 65 45 6c 65 6d 65 6e 74 2c 20 69 6e 76 61 72  veElement, invar
1d560 69 61 6e 74 29 29 20 61 73 20 58 6d 6c 45 6c 65  iant)) as XmlEle
1d570 6d 65 6e 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ment;....       
1d580 20 20 20 20 20 69 66 20 28 65 6c 65 6d 65 6e 74       if (element
1d590 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   != null)..     
1d5a0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
1d5b0 20 20 20 20 20 20 20 20 20 20 65 6c 65 6d 65 6e            elemen
1d5c0 74 2e 50 61 72 65 6e 74 4e 6f 64 65 2e 52 65 6d  t.ParentNode.Rem
1d5d0 6f 76 65 43 68 69 6c 64 28 65 6c 65 6d 65 6e 74  oveChild(element
1d5e0 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
1d5f0 20 20 20 20 64 69 72 74 79 20 3d 20 74 72 75 65      dirty = true
1d600 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
1d610 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1d620 69 66 20 28 64 69 72 74 79 29 0d 0a 20 20 20 20  if (dirty)..    
1d630 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
1d640 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76             if (v
1d650 65 72 62 6f 73 65 29 0d 0a 20 20 20 20 20 20 20  erbose)..       
1d660 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
1d670 63 65 4f 70 73 2e 54 72 61 63 65 28 0d 0a 20 20  ceOps.Trace(..  
1d680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d690 20 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72        TracePrior
1d6a0 69 74 79 2e 4c 6f 77 65 73 74 2c 20 74 72 61 63  ity.Lowest, trac
1d6b0 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e  eCallback, Strin
1d6c0 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
1d6d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d6e0 20 20 20 22 65 6c 65 6d 65 6e 74 20 3d 20 7b 30     "element = {0
1d6f0 7d 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 65  }", ForDisplay(e
1d700 6c 65 6d 65 6e 74 29 29 2c 20 74 72 61 63 65 43  lement)), traceC
1d710 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
1d720 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
1d730 28 21 77 68 61 74 49 66 29 0d 0a 20 20 20 20 20  (!whatIf)..     
1d740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
1d750 6f 63 75 6d 65 6e 74 2e 53 61 76 65 28 66 69 6c  ocument.Save(fil
1d760 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  eName);....     
1d770 20 20 20 20 20 20 20 20 20 20 20 73 61 76 65 64             saved
1d780 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20   = true;..      
1d790 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
1d7a0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72         return tr
1d7b0 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ue;..        }..
1d7c0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
1d7d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
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 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69  /....        pri
1d820 76 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f 6c  vate static bool
1d830 20 50 72 6f 63 65 73 73 44 62 50 72 6f 76 69 64   ProcessDbProvid
1d840 65 72 46 61 63 74 6f 72 79 28 0d 0a 20 20 20 20  erFactory(..    
1d850 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 66          string f
1d860 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20  ileName,..      
1d870 20 20 20 20 20 20 73 74 72 69 6e 67 20 69 6e 76        string inv
1d880 61 72 69 61 6e 74 2c 0d 0a 20 20 20 20 20 20 20  ariant,..       
1d890 20 20 20 20 20 73 74 72 69 6e 67 20 6e 61 6d 65       string name
1d8a0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  ,..            s
1d8b0 74 72 69 6e 67 20 64 65 73 63 72 69 70 74 69 6f  tring descriptio
1d8c0 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n,..            
1d8d0 73 74 72 69 6e 67 20 74 79 70 65 4e 61 6d 65 2c  string typeName,
1d8e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 41 73  ..            As
1d8f0 73 65 6d 62 6c 79 4e 61 6d 65 20 61 73 73 65 6d  semblyName assem
1d900 62 6c 79 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20  blyName,..      
1d910 20 20 20 20 20 20 6f 62 6a 65 63 74 20 63 6c 69        object cli
1d920 65 6e 74 44 61 74 61 2c 0d 0a 20 20 20 20 20 20  entData,..      
1d930 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49        bool whatI
1d940 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f,..            
1d950 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a 20  bool verbose,.. 
1d960 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20 62             ref b
1d970 6f 6f 6c 20 73 61 76 65 64 2c 0d 0a 20 20 20 20  ool saved,..    
1d980 20 20 20 20 20 20 20 20 72 65 66 20 73 74 72 69          ref stri
1d990 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20  ng error..      
1d9a0 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
1d9b0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1d9c0 41 6e 79 50 61 69 72 3c 73 74 72 69 6e 67 2c 20  AnyPair<string, 
1d9d0 62 6f 6f 6c 3e 20 70 61 69 72 20 3d 20 63 6c 69  bool> pair = cli
1d9e0 65 6e 74 44 61 74 61 20 61 73 20 41 6e 79 50 61  entData as AnyPa
1d9f0 69 72 3c 73 74 72 69 6e 67 2c 20 62 6f 6f 6c 3e  ir<string, bool>
1da00 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
1da10 20 69 66 20 28 70 61 69 72 20 3d 3d 20 6e 75 6c   if (pair == nul
1da20 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
1da30 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
1da40 20 20 20 65 72 72 6f 72 20 3d 20 22 69 6e 76 61     error = "inva
1da50 6c 69 64 20 66 72 61 6d 65 77 6f 72 6b 20 63 6f  lid framework co
1da60 6e 66 69 67 20 63 61 6c 6c 62 61 63 6b 20 64 61  nfig callback da
1da70 74 61 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ta";..          
1da80 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
1da90 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se;..           
1daa0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
1dab0 20 20 69 66 20 28 70 61 69 72 2e 59 29 0d 0a 20    if (pair.Y).. 
1dac0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
1dad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
1dae0 74 75 72 6e 20 52 65 6d 6f 76 65 44 62 50 72 6f  turn RemoveDbPro
1daf0 76 69 64 65 72 46 61 63 74 6f 72 79 28 0d 0a 20  viderFactory(.. 
1db00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1db10 20 20 20 66 69 6c 65 4e 61 6d 65 2c 20 69 6e 76     fileName, inv
1db20 61 72 69 61 6e 74 2c 20 77 68 61 74 49 66 2c 20  ariant, whatIf, 
1db30 76 65 72 62 6f 73 65 2c 20 72 65 66 20 73 61 76  verbose, ref sav
1db40 65 64 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ed,..           
1db50 20 20 20 20 20 20 20 20 20 72 65 66 20 65 72 72           ref err
1db60 6f 72 29 20 26 26 0d 0a 20 20 20 20 20 20 20 20  or) &&..        
1db70 20 20 20 20 20 20 20 20 41 64 64 44 62 50 72 6f          AddDbPro
1db80 76 69 64 65 72 46 61 63 74 6f 72 79 28 0d 0a 20  viderFactory(.. 
1db90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dba0 20 20 20 66 69 6c 65 4e 61 6d 65 2c 20 69 6e 76     fileName, inv
1dbb0 61 72 69 61 6e 74 2c 20 6e 61 6d 65 2c 20 64 65  ariant, name, de
1dbc0 73 63 72 69 70 74 69 6f 6e 2c 20 74 79 70 65 4e  scription, typeN
1dbd0 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ame,..          
1dbe0 20 20 20 20 20 20 20 20 20 20 61 73 73 65 6d 62            assemb
1dbf0 6c 79 4e 61 6d 65 2c 20 77 68 61 74 49 66 2c 20  lyName, whatIf, 
1dc00 76 65 72 62 6f 73 65 2c 20 72 65 66 20 73 61 76  verbose, ref sav
1dc10 65 64 2c 20 72 65 66 20 65 72 72 6f 72 29 3b 0d  ed, ref error);.
1dc20 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
1dc30 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65              else
1dc40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
1dc50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1dc60 20 72 65 74 75 72 6e 20 52 65 6d 6f 76 65 44 62   return RemoveDb
1dc70 50 72 6f 76 69 64 65 72 46 61 63 74 6f 72 79 28  ProviderFactory(
1dc80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1dc90 20 20 20 20 20 20 66 69 6c 65 4e 61 6d 65 2c 20        fileName, 
1dca0 69 6e 76 61 72 69 61 6e 74 2c 20 77 68 61 74 49  invariant, whatI
1dcb0 66 2c 20 76 65 72 62 6f 73 65 2c 20 72 65 66 20  f, verbose, ref 
1dcc0 73 61 76 65 64 2c 0d 0a 20 20 20 20 20 20 20 20  saved,..        
1dcd0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20              ref 
1dce0 65 72 72 6f 72 29 3b 0d 0a 20 20 20 20 20 20 20  error);..       
1dcf0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
1dd00 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72  }..        #endr
1dd10 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
1dd20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
1dd30 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20  ////////....    
1dd70 20 20 20 20 23 72 65 67 69 6f 6e 20 41 73 73 65      #region Asse
1dd80 6d 62 6c 79 20 46 6f 6c 64 65 72 73 20 48 61 6e  mbly Folders Han
1dd90 64 6c 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 70  dling..        p
1dda0 72 69 76 61 74 65 20 73 74 61 74 69 63 20 73 74  rivate static st
1ddb0 72 69 6e 67 20 47 65 74 41 73 73 65 6d 62 6c 79  ring GetAssembly
1ddc0 46 6f 6c 64 65 72 73 4b 65 79 4e 61 6d 65 28 0d  FoldersKeyName(.
1ddd0 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72  .            str
1dde0 69 6e 67 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d  ing frameworkNam
1ddf0 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
1de00 56 65 72 73 69 6f 6e 20 66 72 61 6d 65 77 6f 72  Version framewor
1de10 6b 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20  kVersion,..     
1de20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 70 6c         string pl
1de30 61 74 66 6f 72 6d 4e 61 6d 65 0d 0a 20 20 20 20  atformName..    
1de40 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
1de50 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
1de60 20 20 73 74 72 69 6e 67 20 66 6f 72 6d 61 74 20    string format 
1de70 3d 20 21 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c  = !String.IsNull
1de80 4f 72 45 6d 70 74 79 28 70 6c 61 74 66 6f 72 6d  OrEmpty(platform
1de90 4e 61 6d 65 29 20 3f 0d 0a 20 20 20 20 20 20 20  Name) ?..       
1dea0 20 20 20 20 20 20 20 20 20 22 53 6f 66 74 77 61           "Softwa
1deb0 72 65 5c 5c 4d 69 63 72 6f 73 6f 66 74 5c 5c 7b  re\\Microsoft\\{
1dec0 30 7d 5c 5c 76 7b 31 7d 5c 5c 7b 32 7d 5c 5c 41  0}\\v{1}\\{2}\\A
1ded0 73 73 65 6d 62 6c 79 46 6f 6c 64 65 72 73 45 78  ssemblyFoldersEx
1dee0 22 20 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  " :..           
1def0 20 20 20 20 20 22 53 6f 66 74 77 61 72 65 5c 5c       "Software\\
1df00 4d 69 63 72 6f 73 6f 66 74 5c 5c 7b 30 7d 5c 5c  Microsoft\\{0}\\
1df10 76 7b 31 7d 5c 5c 41 73 73 65 6d 62 6c 79 46 6f  v{1}\\AssemblyFo
1df20 6c 64 65 72 73 45 78 22 3b 0d 0a 0d 0a 20 20 20  ldersEx";....   
1df30 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
1df40 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 66 6f  String.Format(fo
1df50 72 6d 61 74 2c 20 66 72 61 6d 65 77 6f 72 6b 4e  rmat, frameworkN
1df60 61 6d 65 2c 20 66 72 61 6d 65 77 6f 72 6b 56 65  ame, frameworkVe
1df70 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20  rsion,..        
1df80 20 20 20 20 20 20 20 20 70 6c 61 74 66 6f 72 6d          platform
1df90 4e 61 6d 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  Name);..        
1dfa0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  }....        ///
1dfb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1dfc0 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
1e000 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 62  private static b
1e010 6f 6f 6c 20 41 64 64 54 6f 41 73 73 65 6d 62 6c  ool AddToAssembl
1e020 79 46 6f 6c 64 65 72 73 28 0d 0a 20 20 20 20 20  yFolders(..     
1e030 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79 4b         RegistryK
1e040 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20  ey rootKey,..   
1e050 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
1e060 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 0d 0a  frameworkName,..
1e070 20 20 20 20 20 20 20 20 20 20 20 20 56 65 72 73              Vers
1e080 69 6f 6e 20 66 72 61 6d 65 77 6f 72 6b 56 65 72  ion frameworkVer
1e090 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20  sion,..         
1e0a0 20 20 20 73 74 72 69 6e 67 20 70 6c 61 74 66 6f     string platfo
1e0b0 72 6d 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20  rmName,..       
1e0c0 20 20 20 20 20 73 74 72 69 6e 67 20 73 75 62 4b       string subK
1e0d0 65 79 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20  eyName,..       
1e0e0 20 20 20 20 20 73 74 72 69 6e 67 20 64 69 72 65       string dire
1e0f0 63 74 6f 72 79 2c 0d 0a 20 20 20 20 20 20 20 20  ctory,..        
1e100 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c      bool whatIf,
1e110 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
1e120 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20  ol verbose,..   
1e130 20 20 20 20 20 20 20 20 20 72 65 66 20 73 74 72           ref str
1e140 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20 20 20  ing error..     
1e150 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
1e160 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
1e170 20 73 74 72 69 6e 67 20 6b 65 79 4e 61 6d 65 20   string keyName 
1e180 3d 20 47 65 74 41 73 73 65 6d 62 6c 79 46 6f 6c  = GetAssemblyFol
1e190 64 65 72 73 4b 65 79 4e 61 6d 65 28 0d 0a 20 20  dersKeyName(..  
1e1a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 72                fr
1e1b0 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 20 66 72 61  ameworkName, fra
1e1c0 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 20 70  meworkVersion, p
1e1d0 6c 61 74 66 6f 72 6d 4e 61 6d 65 29 3b 0d 0a 0d  latformName);...
1e1e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69  .            usi
1e1f0 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79  ng (MockRegistry
1e200 4b 65 79 20 6b 65 79 20 3d 20 52 65 67 69 73 74  Key key = Regist
1e210 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62  ryHelper.OpenSub
1e220 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  Key(..          
1e230 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65            rootKe
1e240 79 2c 20 6b 65 79 4e 61 6d 65 2c 20 74 72 75 65  y, keyName, true
1e250 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73  , whatIf, verbos
1e260 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e))..           
1e270 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1e280 20 20 20 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e      if (key == n
1e290 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
1e2a0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1e2b0 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
1e2c0 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d  or = String.Form
1e2d0 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
1e2e0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 63 6f               "co
1e2f0 75 6c 64 20 6e 6f 74 20 6f 70 65 6e 20 72 65 67  uld not open reg
1e300 69 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c  istry key: {0}\\
1e310 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  {1}",..         
1e320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
1e330 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e 61 6d 65 29  ootKey, keyName)
1e340 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
1e350 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
1e360 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
1e370 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
1e380 20 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69               usi
1e390 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79  ng (MockRegistry
1e3a0 4b 65 79 20 73 75 62 4b 65 79 20 3d 20 52 65 67  Key subKey = Reg
1e3b0 69 73 74 72 79 48 65 6c 70 65 72 2e 43 72 65 61  istryHelper.Crea
1e3c0 74 65 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20  teSubKey(..     
1e3d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e3e0 20 20 20 6b 65 79 2c 20 73 75 62 4b 65 79 4e 61     key, subKeyNa
1e3f0 6d 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62  me, whatIf, verb
1e400 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ose))..         
1e410 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
1e420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
1e430 20 28 73 75 62 4b 65 79 20 3d 3d 20 6e 75 6c 6c   (subKey == null
1e440 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
1e450 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
1e460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e470 20 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67    error = String
1e480 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
1e490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e4a0 20 20 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74        "could not
1e4b0 20 63 72 65 61 74 65 20 72 65 67 69 73 74 72 79   create registry
1e4c0 20 6b 65 79 3a 20 7b 30 7d 5c 5c 7b 31 7d 22 2c   key: {0}\\{1}",
1e4d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1e4e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65                ke
1e4f0 79 2c 20 73 75 62 4b 65 79 4e 61 6d 65 29 3b 0d  y, subKeyName);.
1e500 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1e510 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
1e520 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
1e530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
1e540 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1e550 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79 48         RegistryH
1e560 65 6c 70 65 72 2e 53 65 74 56 61 6c 75 65 28 0d  elper.SetValue(.
1e570 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1e580 20 20 20 20 20 20 20 20 20 73 75 62 4b 65 79 2c           subKey,
1e590 20 6e 75 6c 6c 2c 20 64 69 72 65 63 74 6f 72 79   null, directory
1e5a0 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73  , whatIf, verbos
1e5b0 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e);..           
1e5c0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
1e5d0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
1e5e0 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65       return true
1e5f0 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  ;..        }....
1e600 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
1e610 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d  ///////////////.
1e650 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  ...        priva
1e660 74 65 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 52  te static bool R
1e670 65 6d 6f 76 65 46 72 6f 6d 41 73 73 65 6d 62 6c  emoveFromAssembl
1e680 79 46 6f 6c 64 65 72 73 28 0d 0a 20 20 20 20 20  yFolders(..     
1e690 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79 4b         RegistryK
1e6a0 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20  ey rootKey,..   
1e6b0 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
1e6c0 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 0d 0a  frameworkName,..
1e6d0 20 20 20 20 20 20 20 20 20 20 20 20 56 65 72 73              Vers
1e6e0 69 6f 6e 20 66 72 61 6d 65 77 6f 72 6b 56 65 72  ion frameworkVer
1e6f0 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20  sion,..         
1e700 20 20 20 73 74 72 69 6e 67 20 70 6c 61 74 66 6f     string platfo
1e710 72 6d 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20  rmName,..       
1e720 20 20 20 20 20 73 74 72 69 6e 67 20 73 75 62 4b       string subK
1e730 65 79 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20  eyName,..       
1e740 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66       bool whatIf
1e750 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
1e760 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20  ool verbose,..  
1e770 20 20 20 20 20 20 20 20 20 20 72 65 66 20 73 74            ref st
1e780 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20 20  ring error..    
1e790 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
1e7a0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
1e7b0 20 20 73 74 72 69 6e 67 20 6b 65 79 4e 61 6d 65    string keyName
1e7c0 20 3d 20 47 65 74 41 73 73 65 6d 62 6c 79 46 6f   = GetAssemblyFo
1e7d0 6c 64 65 72 73 4b 65 79 4e 61 6d 65 28 0d 0a 20  ldersKeyName(.. 
1e7e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66                 f
1e7f0 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 20 66 72  rameworkName, fr
1e800 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 20  ameworkVersion, 
1e810 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 29 3b 0d 0a  platformName);..
1e820 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 75 73  ..            us
1e830 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72  ing (MockRegistr
1e840 79 4b 65 79 20 6b 65 79 20 3d 20 52 65 67 69 73  yKey key = Regis
1e850 74 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75  tryHelper.OpenSu
1e860 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20  bKey(..         
1e870 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b             rootK
1e880 65 79 2c 20 6b 65 79 4e 61 6d 65 2c 20 66 61 6c  ey, keyName, fal
1e890 73 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62  se, whatIf, verb
1e8a0 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ose))..         
1e8b0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
1e8c0 20 20 20 20 20 20 69 66 20 28 6b 65 79 20 3d 3d        if (key ==
1e8d0 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
1e8e0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
1e8f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
1e900 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f  rror = String.Fo
1e910 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
1e920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
1e930 63 6f 75 6c 64 20 6e 6f 74 20 6f 70 65 6e 20 72  could not open r
1e940 65 67 69 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d  egistry key: {0}
1e950 5c 5c 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20  \\{1}",..       
1e960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e970 20 72 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e 61 6d   rootKey, keyNam
1e980 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
1e990 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
1e9a0 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
1e9b0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
1e9c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52                 R
1e9d0 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 44 65  egistryHelper.De
1e9e0 6c 65 74 65 53 75 62 4b 65 79 28 0d 0a 20 20 20  leteSubKey(..   
1e9f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ea00 20 6b 65 79 2c 20 73 75 62 4b 65 79 4e 61 6d 65   key, subKeyName
1ea10 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73  , whatIf, verbos
1ea20 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e);..           
1ea30 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
1ea40 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a    return true;..
1ea50 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
1ea60 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
1ea70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a  ////////////....
1eab0 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
1eac0 73 74 61 74 69 63 20 62 6f 6f 6c 20 50 72 6f 63  static bool Proc
1ead0 65 73 73 41 73 73 65 6d 62 6c 79 46 6f 6c 64 65  essAssemblyFolde
1eae0 72 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  rs(..           
1eaf0 20 52 65 67 69 73 74 72 79 4b 65 79 20 72 6f 6f   RegistryKey roo
1eb00 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20  tKey,..         
1eb10 20 20 20 73 74 72 69 6e 67 20 66 72 61 6d 65 77     string framew
1eb20 6f 72 6b 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20  orkName,..      
1eb30 20 20 20 20 20 20 56 65 72 73 69 6f 6e 20 66 72        Version fr
1eb40 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 0d  ameworkVersion,.
1eb50 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72  .            str
1eb60 69 6e 67 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65  ing platformName
1eb70 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6f  ,..            o
1eb80 62 6a 65 63 74 20 63 6c 69 65 6e 74 44 61 74 61  bject clientData
1eb90 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
1eba0 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20  ool whatIf,..   
1ebb0 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65           bool ve
1ebc0 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 20  rbose,..        
1ebd0 20 20 20 20 72 65 66 20 73 74 72 69 6e 67 20 65      ref string e
1ebe0 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20  rror..          
1ebf0 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a    )..        {..
1ec00 20 20 20 20 20 20 20 20 20 20 20 20 41 6e 79 50              AnyP
1ec10 61 69 72 3c 73 74 72 69 6e 67 2c 20 62 6f 6f 6c  air<string, bool
1ec20 3e 20 70 61 69 72 20 3d 20 63 6c 69 65 6e 74 44  > pair = clientD
1ec30 61 74 61 20 61 73 20 41 6e 79 50 61 69 72 3c 73  ata as AnyPair<s
1ec40 74 72 69 6e 67 2c 20 62 6f 6f 6c 3e 3b 0d 0a 0d  tring, bool>;...
1ec50 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
1ec60 28 70 61 69 72 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  (pair == null)..
1ec70 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
1ec80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
1ec90 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64 20  rror = "invalid 
1eca0 66 72 61 6d 65 77 6f 72 6b 20 63 61 6c 6c 62 61  framework callba
1ecb0 63 6b 20 64 61 74 61 22 3b 0d 0a 20 20 20 20 20  ck data";..     
1ecc0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
1ecd0 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
1ece0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
1ecf0 20 20 20 20 20 20 20 69 66 20 28 70 61 69 72 2e         if (pair.
1ed00 59 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  Y)..            
1ed10 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
1ed20 20 20 20 72 65 74 75 72 6e 20 52 65 6d 6f 76 65     return Remove
1ed30 46 72 6f 6d 41 73 73 65 6d 62 6c 79 46 6f 6c 64  FromAssemblyFold
1ed40 65 72 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ers(..          
1ed50 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65            rootKe
1ed60 79 2c 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65  y, frameworkName
1ed70 2c 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69  , frameworkVersi
1ed80 6f 6e 2c 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65  on, platformName
1ed90 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
1eda0 20 20 20 20 20 20 20 4c 65 67 61 63 79 50 72 6f         LegacyPro
1edb0 6a 65 63 74 4e 61 6d 65 2c 20 77 68 61 74 49 66  jectName, whatIf
1edc0 2c 20 76 65 72 62 6f 73 65 2c 20 72 65 66 20 65  , verbose, ref e
1edd0 72 72 6f 72 29 20 26 26 0d 0a 20 20 20 20 20 20  rror) &&..      
1ede0 20 20 20 20 20 20 20 20 20 20 41 64 64 54 6f 41            AddToA
1edf0 73 73 65 6d 62 6c 79 46 6f 6c 64 65 72 73 28 0d  ssemblyFolders(.
1ee00 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1ee10 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 66 72       rootKey, fr
1ee20 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 20 66 72 61  ameworkName, fra
1ee30 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 20 70  meworkVersion, p
1ee40 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c 0d 0a 20 20  latformName,..  
1ee50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ee60 20 20 50 72 6f 6a 65 63 74 4e 61 6d 65 2c 20 70    ProjectName, p
1ee70 61 69 72 2e 58 2c 20 77 68 61 74 49 66 2c 20 76  air.X, whatIf, v
1ee80 65 72 62 6f 73 65 2c 20 72 65 66 20 65 72 72 6f  erbose, ref erro
1ee90 72 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  r);..           
1eea0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
1eeb0 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20  else..          
1eec0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
1eed0 20 20 20 20 20 72 65 74 75 72 6e 20 52 65 6d 6f       return Remo
1eee0 76 65 46 72 6f 6d 41 73 73 65 6d 62 6c 79 46 6f  veFromAssemblyFo
1eef0 6c 64 65 72 73 28 0d 0a 20 20 20 20 20 20 20 20  lders(..        
1ef00 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74              root
1ef10 4b 65 79 2c 20 66 72 61 6d 65 77 6f 72 6b 4e 61  Key, frameworkNa
1ef20 6d 65 2c 20 66 72 61 6d 65 77 6f 72 6b 56 65 72  me, frameworkVer
1ef30 73 69 6f 6e 2c 20 70 6c 61 74 66 6f 72 6d 4e 61  sion, platformNa
1ef40 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me,..           
1ef50 20 20 20 20 20 20 20 20 20 50 72 6f 6a 65 63 74           Project
1ef60 4e 61 6d 65 2c 20 77 68 61 74 49 66 2c 20 76 65  Name, whatIf, ve
1ef70 72 62 6f 73 65 2c 20 72 65 66 20 65 72 72 6f 72  rbose, ref error
1ef80 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
1ef90 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  }..        }..  
1efa0 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
1efb0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
1efc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1efd0 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23  ///....        #
1f010 72 65 67 69 6f 6e 20 56 69 73 75 61 6c 20 53 74  region Visual St
1f020 75 64 69 6f 20 48 61 6e 64 6c 69 6e 67 0d 0a 20  udio Handling.. 
1f030 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
1f040 74 61 74 69 63 20 73 74 72 69 6e 67 20 47 65 74  tatic string Get
1f050 56 73 4b 65 79 4e 61 6d 65 28 0d 0a 20 20 20 20  VsKeyName(..    
1f060 20 20 20 20 20 20 20 20 56 65 72 73 69 6f 6e 20          Version 
1f070 76 73 56 65 72 73 69 6f 6e 0d 0a 20 20 20 20 20  vsVersion..     
1f080 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
1f090 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
1f0a0 20 72 65 74 75 72 6e 20 53 74 72 69 6e 67 2e 46   return String.F
1f0b0 6f 72 6d 61 74 28 22 53 6f 66 74 77 61 72 65 5c  ormat("Software\
1f0c0 5c 4d 69 63 72 6f 73 6f 66 74 5c 5c 56 69 73 75  \Microsoft\\Visu
1f0d0 61 6c 53 74 75 64 69 6f 5c 5c 7b 30 7d 22 2c 0d  alStudio\\{0}",.
1f0e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1f0f0 20 76 73 56 65 72 73 69 6f 6e 29 3b 0d 0a 20 20   vsVersion);..  
1f100 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
1f110 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
1f120 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f130 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f140 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f150 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
1f160 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 56 69        #region Vi
1f170 73 75 61 6c 20 53 74 75 64 69 6f 20 44 61 74 61  sual Studio Data
1f180 20 53 6f 75 72 63 65 20 48 61 6e 64 6c 69 6e 67   Source Handling
1f190 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
1f1a0 65 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 41 64  e static bool Ad
1f1b0 64 56 73 44 61 74 61 53 6f 75 72 63 65 28 0d 0a  dVsDataSource(..
1f1c0 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69              Regi
1f1d0 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c  stryKey rootKey,
1f1e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 56 65  ..            Ve
1f1f0 72 73 69 6f 6e 20 76 73 56 65 72 73 69 6f 6e 2c  rsion vsVersion,
1f200 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 47 75  ..            Gu
1f210 69 64 20 64 61 74 61 53 6f 75 72 63 65 49 64 2c  id dataSourceId,
1f220 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 47 75  ..            Gu
1f230 69 64 20 64 61 74 61 50 72 6f 76 69 64 65 72 49  id dataProviderI
1f240 64 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d,..            
1f250 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20  bool whatIf,..  
1f260 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76            bool v
1f270 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20  erbose,..       
1f280 20 20 20 20 20 72 65 66 20 73 74 72 69 6e 67 20       ref string 
1f290 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20  error..         
1f2a0 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d     )..        {.
1f2b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72  .            str
1f2c0 69 6e 67 20 6b 65 79 4e 61 6d 65 20 3d 20 47 65  ing keyName = Ge
1f2d0 74 56 73 4b 65 79 4e 61 6d 65 28 76 73 56 65 72  tVsKeyName(vsVer
1f2e0 73 69 6f 6e 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  sion);....      
1f2f0 20 20 20 20 20 20 75 73 69 6e 67 20 28 4d 6f 63        using (Moc
1f300 6b 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65 79  kRegistryKey key
1f310 20 3d 20 52 65 67 69 73 74 72 79 48 65 6c 70 65   = RegistryHelpe
1f320 72 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20  r.OpenSubKey(.. 
1f330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f340 20 20 20 72 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e     rootKey, keyN
1f350 61 6d 65 2c 20 66 61 6c 73 65 2c 20 77 68 61 74  ame, false, what
1f360 49 66 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a 20  If, verbose)).. 
1f370 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
1f380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
1f390 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a   (key == null)..
1f3a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f3b0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
1f3c0 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 53         error = S
1f3d0 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
1f3e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f3f0 20 20 20 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f         "could no
1f400 74 20 6f 70 65 6e 20 72 65 67 69 73 74 72 79 20  t open registry 
1f410 6b 65 79 3a 20 7b 30 7d 5c 5c 7b 31 7d 22 2c 0d  key: {0}\\{1}",.
1f420 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1f430 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79           rootKey
1f440 2c 20 6b 65 79 4e 61 6d 65 29 3b 0d 0a 0d 0a 20  , keyName);.... 
1f450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f460 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
1f470 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1f480 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
1f490 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 4d 6f         using (Mo
1f4a0 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 73 75  ckRegistryKey su
1f4b0 62 4b 65 79 20 3d 20 52 65 67 69 73 74 72 79 48  bKey = RegistryH
1f4c0 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62 4b 65 79  elper.OpenSubKey
1f4d0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
1f4e0 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 2c 20             key, 
1f4f0 22 44 61 74 61 53 6f 75 72 63 65 73 22 2c 20 74  "DataSources", t
1f500 72 75 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72  rue, whatIf, ver
1f510 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20  bose))..        
1f520 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
1f530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
1f540 66 20 28 73 75 62 4b 65 79 20 3d 3d 20 6e 75 6c  f (subKey == nul
1f550 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
1f560 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
1f570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f580 20 20 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e     error = Strin
1f590 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
1f5a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f5b0 20 20 20 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f         "could no
1f5c0 74 20 6f 70 65 6e 20 72 65 67 69 73 74 72 79 20  t open registry 
1f5d0 6b 65 79 3a 20 7b 30 7d 5c 5c 44 61 74 61 53 6f  key: {0}\\DataSo
1f5e0 75 72 63 65 73 22 2c 0d 0a 20 20 20 20 20 20 20  urces",..       
1f5f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f600 20 20 20 20 20 6b 65 79 29 3b 0d 0a 0d 0a 20 20       key);....  
1f610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f620 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
1f630 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se;..           
1f640 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
1f650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f660 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67    using (MockReg
1f670 69 73 74 72 79 4b 65 79 20 64 61 74 61 53 6f 75  istryKey dataSou
1f680 72 63 65 4b 65 79 20 3d 20 52 65 67 69 73 74 72  rceKey = Registr
1f690 79 48 65 6c 70 65 72 2e 43 72 65 61 74 65 53 75  yHelper.CreateSu
1f6a0 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20  bKey(..         
1f6b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f6c0 20 20 20 73 75 62 4b 65 79 2c 20 64 61 74 61 53     subKey, dataS
1f6d0 6f 75 72 63 65 49 64 2e 54 6f 53 74 72 69 6e 67  ourceId.ToString
1f6e0 28 56 73 49 64 46 6f 72 6d 61 74 29 2c 20 77 68  (VsIdFormat), wh
1f6f0 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20  atIf,..         
1f700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f710 20 20 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20     verbose))..  
1f720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f730 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
1f740 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
1f750 28 64 61 74 61 53 6f 75 72 63 65 4b 65 79 20 3d  (dataSourceKey =
1f760 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
1f770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f780 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1f790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f7a0 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46  error = String.F
1f7b0 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
1f7c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f7d0 20 20 20 20 20 20 20 20 22 63 6f 75 6c 64 20 6e          "could n
1f7e0 6f 74 20 63 72 65 61 74 65 20 72 65 67 69 73 74  ot create regist
1f7f0 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 7b 31 7d  ry key: {0}\\{1}
1f800 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
1f810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f820 20 20 20 20 6b 65 79 2c 20 64 61 74 61 53 6f 75      key, dataSou
1f830 72 63 65 49 64 2e 54 6f 53 74 72 69 6e 67 28 56  rceId.ToString(V
1f840 73 49 64 46 6f 72 6d 61 74 29 29 3b 0d 0a 0d 0a  sIdFormat));....
1f850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f860 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
1f870 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
1f880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f890 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
1f8a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f8b0 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 53  RegistryHelper.S
1f8c0 65 74 56 61 6c 75 65 28 0d 0a 20 20 20 20 20 20  etValue(..      
1f8d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f8e0 20 20 20 20 20 20 64 61 74 61 53 6f 75 72 63 65        dataSource
1f8f0 4b 65 79 2c 20 6e 75 6c 6c 2c 20 53 74 72 69 6e  Key, null, Strin
1f900 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
1f910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f920 20 20 20 20 20 20 20 22 7b 30 7d 20 44 61 74 61         "{0} Data
1f930 62 61 73 65 20 46 69 6c 65 22 2c 20 50 72 6f 6a  base File", Proj
1f940 65 63 74 4e 61 6d 65 29 2c 20 77 68 61 74 49 66  ectName), whatIf
1f950 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
1f960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76                 v
1f970 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20  erbose);....    
1f980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f990 20 20 20 20 52 65 67 69 73 74 72 79 48 65 6c 70      RegistryHelp
1f9a0 65 72 2e 43 72 65 61 74 65 53 75 62 4b 65 79 28  er.CreateSubKey(
1f9b0 64 61 74 61 53 6f 75 72 63 65 4b 65 79 2c 0d 0a  dataSourceKey,..
1f9c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f9d0 20 20 20 20 20 20 20 20 20 20 20 20 53 74 72 69              Stri
1f9e0 6e 67 2e 46 6f 72 6d 61 74 28 22 53 75 70 70 6f  ng.Format("Suppo
1f9f0 72 74 69 6e 67 50 72 6f 76 69 64 65 72 73 5c 5c  rtingProviders\\
1fa00 7b 30 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  {0}",..         
1fa10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fa20 20 20 20 64 61 74 61 50 72 6f 76 69 64 65 72 49     dataProviderI
1fa30 64 2e 54 6f 53 74 72 69 6e 67 28 56 73 49 64 46  d.ToString(VsIdF
1fa40 6f 72 6d 61 74 29 29 2c 20 77 68 61 74 49 66 2c  ormat)), whatIf,
1fa50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1fa60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76 65                ve
1fa70 72 62 6f 73 65 29 3b 0d 0a 20 20 20 20 20 20 20  rbose);..       
1fa80 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
1fa90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1faa0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
1fab0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1fac0 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20  return true;..  
1fad0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
1fae0 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
1faf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20  //////////....  
1fb30 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
1fb40 61 74 69 63 20 62 6f 6f 6c 20 52 65 6d 6f 76 65  atic bool Remove
1fb50 56 73 44 61 74 61 53 6f 75 72 63 65 28 0d 0a 20  VsDataSource(.. 
1fb60 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73             Regis
1fb70 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d  tryKey rootKey,.
1fb80 0a 20 20 20 20 20 20 20 20 20 20 20 20 56 65 72  .            Ver
1fb90 73 69 6f 6e 20 76 73 56 65 72 73 69 6f 6e 2c 0d  sion vsVersion,.
1fba0 0a 20 20 20 20 20 20 20 20 20 20 20 20 47 75 69  .            Gui
1fbb0 64 20 64 61 74 61 53 6f 75 72 63 65 49 64 2c 0d  d dataSourceId,.
1fbc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
1fbd0 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20  l whatIf,..     
1fbe0 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62         bool verb
1fbf0 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ose,..          
1fc00 20 20 72 65 66 20 73 74 72 69 6e 67 20 65 72 72    ref string err
1fc10 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  or..            
1fc20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
1fc30 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
1fc40 20 6b 65 79 4e 61 6d 65 20 3d 20 47 65 74 56 73   keyName = GetVs
1fc50 4b 65 79 4e 61 6d 65 28 76 73 56 65 72 73 69 6f  KeyName(vsVersio
1fc60 6e 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  n);....         
1fc70 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65     using (MockRe
1fc80 67 69 73 74 72 79 4b 65 79 20 6b 65 79 20 3d 20  gistryKey key = 
1fc90 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 4f  RegistryHelper.O
1fca0 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20  penSubKey(..    
1fcb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fcc0 72 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e 61 6d 65  rootKey, keyName
1fcd0 2c 20 66 61 6c 73 65 2c 20 77 68 61 74 49 66 2c  , false, whatIf,
1fce0 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20   verbose))..    
1fcf0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
1fd00 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6b             if (k
1fd10 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ey == null)..   
1fd20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
1fd30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fd40 20 20 20 20 65 72 72 6f 72 20 3d 20 53 74 72 69      error = Stri
1fd50 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
1fd60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fd70 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20 6f      "could not o
1fd80 70 65 6e 20 72 65 67 69 73 74 72 79 20 6b 65 79  pen registry key
1fd90 3a 20 7b 30 7d 5c 5c 7b 31 7d 22 2c 0d 0a 20 20  : {0}\\{1}",..  
1fda0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fdb0 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 6b        rootKey, k
1fdc0 65 79 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20  eyName);....    
1fdd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fde0 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20  return false;.. 
1fdf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
1fe00 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1fe10 20 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52      using (MockR
1fe20 65 67 69 73 74 72 79 4b 65 79 20 73 75 62 4b 65  egistryKey subKe
1fe30 79 20 3d 20 52 65 67 69 73 74 72 79 48 65 6c 70  y = RegistryHelp
1fe40 65 72 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a  er.OpenSubKey(..
1fe50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fe60 20 20 20 20 20 20 20 20 6b 65 79 2c 20 22 44 61          key, "Da
1fe70 74 61 53 6f 75 72 63 65 73 22 2c 20 74 72 75 65  taSources", true
1fe80 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73  , whatIf, verbos
1fe90 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e))..           
1fea0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1feb0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
1fec0 73 75 62 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d  subKey == null).
1fed0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1fee0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1fef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ff00 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46  error = String.F
1ff10 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
1ff20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ff30 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20 6f      "could not o
1ff40 70 65 6e 20 72 65 67 69 73 74 72 79 20 6b 65 79  pen registry key
1ff50 3a 20 7b 30 7d 5c 5c 44 61 74 61 53 6f 75 72 63  : {0}\\DataSourc
1ff60 65 73 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  es",..          
1ff70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ff80 20 20 6b 65 79 29 3b 0d 0a 0d 0a 20 20 20 20 20    key);....     
1ff90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ffa0 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
1ffb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1ffc0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
1ffd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52                 R
1ffe0 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 44 65  egistryHelper.De
1fff0 6c 65 74 65 53 75 62 4b 65 79 54 72 65 65 28 0d  leteSubKeyTree(.
20000 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
20010 20 20 20 20 20 20 20 20 20 73 75 62 4b 65 79 2c           subKey,
20020 20 64 61 74 61 53 6f 75 72 63 65 49 64 2e 54 6f   dataSourceId.To
20030 53 74 72 69 6e 67 28 56 73 49 64 46 6f 72 6d 61  String(VsIdForma
20040 74 29 2c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20  t), whatIf,..   
20050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20060 20 20 20 20 20 76 65 72 62 6f 73 65 29 3b 0d 0a       verbose);..
20070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20080 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
20090 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
200a0 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20  return true;..  
200b0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
200c0 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
200d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20  //////////....  
20110 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
20120 61 74 69 63 20 62 6f 6f 6c 20 50 72 6f 63 65 73  atic bool Proces
20130 73 56 73 44 61 74 61 53 6f 75 72 63 65 28 0d 0a  sVsDataSource(..
20140 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69              Regi
20150 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c  stryKey rootKey,
20160 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 56 65  ..            Ve
20170 72 73 69 6f 6e 20 76 73 56 65 72 73 69 6f 6e 2c  rsion vsVersion,
20180 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 47 75  ..            Gu
20190 69 64 20 70 61 63 6b 61 67 65 49 64 2c 20 2f 2a  id packageId, /*
201a0 20 4e 4f 54 20 55 53 45 44 20 2a 2f 0d 0a 20 20   NOT USED */..  
201b0 20 20 20 20 20 20 20 20 20 20 47 75 69 64 20 73            Guid s
201c0 65 72 76 69 63 65 49 64 2c 20 2f 2a 20 4e 4f 54  erviceId, /* NOT
201d0 20 55 53 45 44 20 2a 2f 0d 0a 20 20 20 20 20 20   USED */..      
201e0 20 20 20 20 20 20 47 75 69 64 20 64 61 74 61 53        Guid dataS
201f0 6f 75 72 63 65 49 64 2c 0d 0a 20 20 20 20 20 20  ourceId,..      
20200 20 20 20 20 20 20 47 75 69 64 20 64 61 74 61 50        Guid dataP
20210 72 6f 76 69 64 65 72 49 64 2c 0d 0a 20 20 20 20  roviderId,..    
20220 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 63          object c
20230 6c 69 65 6e 74 44 61 74 61 2c 0d 0a 20 20 20 20  lientData,..    
20240 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61          bool wha
20250 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf,..          
20260 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d    bool verbose,.
20270 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66  .            ref
20280 20 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20   string error.. 
20290 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
202a0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
202b0 20 20 20 20 20 41 6e 79 50 61 69 72 3c 73 74 72       AnyPair<str
202c0 69 6e 67 2c 20 62 6f 6f 6c 3e 20 70 61 69 72 20  ing, bool> pair 
202d0 3d 20 63 6c 69 65 6e 74 44 61 74 61 20 61 73 20  = clientData as 
202e0 41 6e 79 50 61 69 72 3c 73 74 72 69 6e 67 2c 20  AnyPair<string, 
202f0 62 6f 6f 6c 3e 3b 0d 0a 0d 0a 20 20 20 20 20 20  bool>;....      
20300 20 20 20 20 20 20 69 66 20 28 70 61 69 72 20 3d        if (pair =
20310 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
20320 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
20330 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
20340 22 69 6e 76 61 6c 69 64 20 56 53 20 63 61 6c 6c  "invalid VS call
20350 62 61 63 6b 20 64 61 74 61 22 3b 0d 0a 20 20 20  back data";..   
20360 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
20370 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  urn false;..    
20380 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
20390 20 20 20 20 20 20 20 20 20 69 66 20 28 70 61 69           if (pai
203a0 72 2e 59 29 0d 0a 20 20 20 20 20 20 20 20 20 20  r.Y)..          
203b0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
203c0 20 20 20 20 20 72 65 74 75 72 6e 20 41 64 64 56       return AddV
203d0 73 44 61 74 61 53 6f 75 72 63 65 28 0d 0a 20 20  sDataSource(..  
203e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
203f0 20 20 72 6f 6f 74 4b 65 79 2c 20 76 73 56 65 72    rootKey, vsVer
20400 73 69 6f 6e 2c 20 64 61 74 61 53 6f 75 72 63 65  sion, dataSource
20410 49 64 2c 20 64 61 74 61 50 72 6f 76 69 64 65 72  Id, dataProvider
20420 49 64 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  Id,..           
20430 20 20 20 20 20 20 20 20 20 77 68 61 74 49 66 2c           whatIf,
20440 20 76 65 72 62 6f 73 65 2c 20 72 65 66 20 65 72   verbose, ref er
20450 72 6f 72 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ror);..         
20460 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
20470 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20    else..        
20480 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
20490 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 52 65         return Re
204a0 6d 6f 76 65 56 73 44 61 74 61 53 6f 75 72 63 65  moveVsDataSource
204b0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
204c0 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20         rootKey, 
204d0 76 73 56 65 72 73 69 6f 6e 2c 20 64 61 74 61 53  vsVersion, dataS
204e0 6f 75 72 63 65 49 64 2c 20 77 68 61 74 49 66 2c  ourceId, whatIf,
204f0 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20   verbose,..     
20500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
20510 65 66 20 65 72 72 6f 72 29 3b 0d 0a 20 20 20 20  ef error);..    
20520 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
20530 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65     }..        #e
20540 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
20550 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
20560 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20  ///////////.... 
205a0 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 56         #region V
205b0 69 73 75 61 6c 20 53 74 75 64 69 6f 20 44 61 74  isual Studio Dat
205c0 61 20 50 72 6f 76 69 64 65 72 20 48 61 6e 64 6c  a Provider Handl
205d0 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 70 72 69  ing..        pri
205e0 76 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f 6c  vate static bool
205f0 20 41 64 64 56 73 44 61 74 61 50 72 6f 76 69 64   AddVsDataProvid
20600 65 72 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  er(..           
20610 20 52 65 67 69 73 74 72 79 4b 65 79 20 72 6f 6f   RegistryKey roo
20620 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20  tKey,..         
20630 20 20 20 56 65 72 73 69 6f 6e 20 76 73 56 65 72     Version vsVer
20640 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20  sion,..         
20650 20 20 20 47 75 69 64 20 73 65 72 76 69 63 65 49     Guid serviceI
20660 64 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d,..            
20670 47 75 69 64 20 64 61 74 61 50 72 6f 76 69 64 65  Guid dataProvide
20680 72 49 64 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  rId,..          
20690 20 20 73 74 72 69 6e 67 20 66 69 6c 65 4e 61 6d    string fileNam
206a0 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
206b0 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20  bool whatIf,..  
206c0 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76            bool v
206d0 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20  erbose,..       
206e0 20 20 20 20 20 72 65 66 20 73 74 72 69 6e 67 20       ref string 
206f0 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20  error..         
20700 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d     )..        {.
20710 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
20720 28 76 73 41 64 6f 4e 65 74 54 65 63 68 6e 6f 6c  (vsAdoNetTechnol
20730 6f 67 79 49 64 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  ogyId == null)..
20740 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
20750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
20760 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64 20  rror = "invalid 
20770 41 44 4f 2e 4e 45 54 20 74 65 63 68 6e 6f 6c 6f  ADO.NET technolo
20780 67 79 20 49 64 22 3b 0d 0a 20 20 20 20 20 20 20  gy Id";..       
20790 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
207a0 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
207b0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
207c0 20 20 20 20 20 73 74 72 69 6e 67 20 6b 65 79 4e       string keyN
207d0 61 6d 65 20 3d 20 47 65 74 56 73 4b 65 79 4e 61  ame = GetVsKeyNa
207e0 6d 65 28 76 73 56 65 72 73 69 6f 6e 29 3b 0d 0a  me(vsVersion);..
207f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 75 73  ..            us
20800 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72  ing (MockRegistr
20810 79 4b 65 79 20 6b 65 79 20 3d 20 52 65 67 69 73  yKey key = Regis
20820 74 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75  tryHelper.OpenSu
20830 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20  bKey(..         
20840 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b             rootK
20850 65 79 2c 20 6b 65 79 4e 61 6d 65 2c 20 66 61 6c  ey, keyName, fal
20860 73 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62  se, whatIf, verb
20870 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ose))..         
20880 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
20890 20 20 20 20 20 20 69 66 20 28 6b 65 79 20 3d 3d        if (key ==
208a0 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
208b0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
208c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
208d0 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f  rror = String.Fo
208e0 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
208f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
20900 63 6f 75 6c 64 20 6e 6f 74 20 6f 70 65 6e 20 72  could not open r
20910 65 67 69 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d  egistry key: {0}
20920 5c 5c 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20  \\{1}",..       
20930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20940 20 72 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e 61 6d   rootKey, keyNam
20950 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
20960 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
20970 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
20980 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
20990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 75                 u
209a0 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74  sing (MockRegist
209b0 72 79 4b 65 79 20 73 75 62 4b 65 79 20 3d 20 52  ryKey subKey = R
209c0 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 4f 70  egistryHelper.Op
209d0 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20  enSubKey(..     
209e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
209f0 20 20 20 6b 65 79 2c 20 22 44 61 74 61 50 72 6f     key, "DataPro
20a00 76 69 64 65 72 73 22 2c 20 74 72 75 65 2c 20 77  viders", true, w
20a10 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 29  hatIf, verbose))
20a20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
20a30 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
20a40 20 20 20 20 20 20 20 20 20 69 66 20 28 73 75 62           if (sub
20a50 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  Key == null)..  
20a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20a70 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
20a80 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
20a90 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d  or = String.Form
20aa0 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
20ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20ac0 20 22 63 6f 75 6c 64 20 6e 6f 74 20 6f 70 65 6e   "could not open
20ad0 20 72 65 67 69 73 74 72 79 20 6b 65 79 3a 20 7b   registry key: {
20ae0 30 7d 5c 5c 44 61 74 61 50 72 6f 76 69 64 65 72  0}\\DataProvider
20af0 73 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s",..           
20b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20b10 20 6b 65 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20   key);....      
20b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20b30 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
20b40 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
20b50 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
20b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 75 73                us
20b70 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72  ing (MockRegistr
20b80 79 4b 65 79 20 64 61 74 61 50 72 6f 76 69 64 65  yKey dataProvide
20b90 72 4b 65 79 20 3d 20 52 65 67 69 73 74 72 79 48  rKey = RegistryH
20ba0 65 6c 70 65 72 2e 43 72 65 61 74 65 53 75 62 4b  elper.CreateSubK
20bb0 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey(..           
20bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20bd0 20 73 75 62 4b 65 79 2c 20 64 61 74 61 50 72 6f   subKey, dataPro
20be0 76 69 64 65 72 49 64 2e 54 6f 53 74 72 69 6e 67  viderId.ToString
20bf0 28 56 73 49 64 46 6f 72 6d 61 74 29 2c 20 77 68  (VsIdFormat), wh
20c00 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20  atIf,..         
20c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20c20 20 20 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20     verbose))..  
20c30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20c40 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
20c50 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
20c60 28 64 61 74 61 50 72 6f 76 69 64 65 72 4b 65 79  (dataProviderKey
20c70 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
20c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20c90 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
20ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20cb0 20 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67    error = String
20cc0 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
20cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20ce0 20 20 20 20 20 20 20 20 20 20 22 63 6f 75 6c 64            "could
20cf0 20 6e 6f 74 20 63 72 65 61 74 65 20 72 65 67 69   not create regi
20d00 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 7b  stry key: {0}\\{
20d10 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  1}",..          
20d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20d30 20 20 20 20 20 20 6b 65 79 2c 20 64 61 74 61 50        key, dataP
20d40 72 6f 76 69 64 65 72 49 64 2e 54 6f 53 74 72 69  roviderId.ToStri
20d50 6e 67 28 56 73 49 64 46 6f 72 6d 61 74 29 29 3b  ng(VsIdFormat));
20d60 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
20d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20d80 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20  return false;.. 
20d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20da0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
20db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20dc0 20 20 20 20 52 65 67 69 73 74 72 79 48 65 6c 70      RegistryHelp
20dd0 65 72 2e 53 65 74 56 61 6c 75 65 28 0d 0a 20 20  er.SetValue(..  
20de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20df0 20 20 20 20 20 20 20 20 20 20 64 61 74 61 50 72            dataPr
20e00 6f 76 69 64 65 72 4b 65 79 2c 20 6e 75 6c 6c 2c  oviderKey, null,
20e10 20 44 65 73 63 72 69 70 74 69 6f 6e 2c 20 77 68   Description, wh
20e20 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20  atIf,..         
20e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20e40 20 20 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a     verbose);....
20e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20e60 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79          Registry
20e70 48 65 6c 70 65 72 2e 53 65 74 56 61 6c 75 65 28  Helper.SetValue(
20e80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
20e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 61                da
20ea0 74 61 50 72 6f 76 69 64 65 72 4b 65 79 2c 20 22  taProviderKey, "
20eb0 49 6e 76 61 72 69 61 6e 74 4e 61 6d 65 22 2c 20  InvariantName", 
20ec0 49 6e 76 61 72 69 61 6e 74 4e 61 6d 65 2c 0d 0a  InvariantName,..
20ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20ee0 20 20 20 20 20 20 20 20 20 20 20 20 77 68 61 74              what
20ef0 49 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d  If, verbose);...
20f00 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
20f10 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72           Registr
20f20 79 48 65 6c 70 65 72 2e 53 65 74 56 61 6c 75 65  yHelper.SetValue
20f30 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
20f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
20f50 61 74 61 50 72 6f 76 69 64 65 72 4b 65 79 2c 20  ataProviderKey, 
20f60 22 54 65 63 68 6e 6f 6c 6f 67 79 22 2c 0d 0a 20  "Technology",.. 
20f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20f80 20 20 20 20 20 20 20 20 20 20 20 28 28 47 75 69             ((Gui
20f90 64 29 76 73 41 64 6f 4e 65 74 54 65 63 68 6e 6f  d)vsAdoNetTechno
20fa0 6c 6f 67 79 49 64 29 2e 54 6f 53 74 72 69 6e 67  logyId).ToString
20fb0 28 56 73 49 64 46 6f 72 6d 61 74 29 2c 0d 0a 20  (VsIdFormat),.. 
20fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20fd0 20 20 20 20 20 20 20 20 20 20 20 77 68 61 74 49             whatI
20fe0 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a  f, verbose);....
20ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21000 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79          Registry
21010 48 65 6c 70 65 72 2e 53 65 74 56 61 6c 75 65 28  Helper.SetValue(
21020 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
21030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 61                da
21040 74 61 50 72 6f 76 69 64 65 72 4b 65 79 2c 20 22  taProviderKey, "
21050 43 6f 64 65 42 61 73 65 22 2c 20 66 69 6c 65 4e  CodeBase", fileN
21060 61 6d 65 2c 20 77 68 61 74 49 66 2c 0d 0a 20 20  ame, whatIf,..  
21070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21080 20 20 20 20 20 20 20 20 20 20 76 65 72 62 6f 73            verbos
21090 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
210a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52                 R
210b0 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 53 65  egistryHelper.Se
210c0 74 56 61 6c 75 65 28 0d 0a 20 20 20 20 20 20 20  tValue(..       
210d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
210e0 20 20 20 20 20 64 61 74 61 50 72 6f 76 69 64 65       dataProvide
210f0 72 4b 65 79 2c 20 22 46 61 63 74 6f 72 79 53 65  rKey, "FactorySe
21100 72 76 69 63 65 22 2c 0d 0a 20 20 20 20 20 20 20  rvice",..       
21110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21120 20 20 20 20 20 73 65 72 76 69 63 65 49 64 2e 54       serviceId.T
21130 6f 53 74 72 69 6e 67 28 56 73 49 64 46 6f 72 6d  oString(VsIdForm
21140 61 74 29 2c 20 77 68 61 74 49 66 2c 20 76 65 72  at), whatIf, ver
21150 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  bose);....      
21160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21170 20 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72    RegistryHelper
21180 2e 43 72 65 61 74 65 53 75 62 4b 65 79 28 64 61  .CreateSubKey(da
21190 74 61 50 72 6f 76 69 64 65 72 4b 65 79 2c 0d 0a  taProviderKey,..
211a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
211b0 20 20 20 20 20 20 20 20 20 20 20 20 22 53 75 70              "Sup
211c0 70 6f 72 74 65 64 4f 62 6a 65 63 74 73 5c 5c 44  portedObjects\\D
211d0 61 74 61 43 6f 6e 6e 65 63 74 69 6f 6e 55 49 43  ataConnectionUIC
211e0 6f 6e 74 72 6f 6c 22 2c 0d 0a 20 20 20 20 20 20  ontrol",..      
211f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21200 20 20 20 20 20 20 77 68 61 74 49 66 2c 20 76 65        whatIf, ve
21210 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  rbose);....     
21220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21230 20 20 20 52 65 67 69 73 74 72 79 48 65 6c 70 65     RegistryHelpe
21240 72 2e 43 72 65 61 74 65 53 75 62 4b 65 79 28 64  r.CreateSubKey(d
21250 61 74 61 50 72 6f 76 69 64 65 72 4b 65 79 2c 0d  ataProviderKey,.
21260 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
21270 20 20 20 20 20 20 20 20 20 20 20 20 20 22 53 75               "Su
21280 70 70 6f 72 74 65 64 4f 62 6a 65 63 74 73 5c 5c  pportedObjects\\
21290 44 61 74 61 43 6f 6e 6e 65 63 74 69 6f 6e 50 72  DataConnectionPr
212a0 6f 70 65 72 74 69 65 73 22 2c 0d 0a 20 20 20 20  operties",..    
212b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
212c0 20 20 20 20 20 20 20 20 77 68 61 74 49 66 2c 20          whatIf, 
212d0 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20  verbose);....   
212e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
212f0 20 20 20 20 20 52 65 67 69 73 74 72 79 48 65 6c       RegistryHel
21300 70 65 72 2e 43 72 65 61 74 65 53 75 62 4b 65 79  per.CreateSubKey
21310 28 64 61 74 61 50 72 6f 76 69 64 65 72 4b 65 79  (dataProviderKey
21320 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
21330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
21340 53 75 70 70 6f 72 74 65 64 4f 62 6a 65 63 74 73  SupportedObjects
21350 5c 5c 44 61 74 61 43 6f 6e 6e 65 63 74 69 6f 6e  \\DataConnection
21360 53 75 70 70 6f 72 74 22 2c 20 77 68 61 74 49 66  Support", whatIf
21370 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
21380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76                 v
21390 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20  erbose);....    
213a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
213b0 20 20 20 20 52 65 67 69 73 74 72 79 48 65 6c 70      RegistryHelp
213c0 65 72 2e 43 72 65 61 74 65 53 75 62 4b 65 79 28  er.CreateSubKey(
213d0 64 61 74 61 50 72 6f 76 69 64 65 72 4b 65 79 2c  dataProviderKey,
213e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
213f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 53                "S
21400 75 70 70 6f 72 74 65 64 4f 62 6a 65 63 74 73 5c  upportedObjects\
21410 5c 44 61 74 61 4f 62 6a 65 63 74 53 75 70 70 6f  \DataObjectSuppo
21420 72 74 22 2c 20 77 68 61 74 49 66 2c 0d 0a 20 20  rt", whatIf,..  
21430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21440 20 20 20 20 20 20 20 20 20 20 76 65 72 62 6f 73            verbos
21450 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
21460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52                 R
21470 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 43 72  egistryHelper.Cr
21480 65 61 74 65 53 75 62 4b 65 79 28 64 61 74 61 50  eateSubKey(dataP
21490 72 6f 76 69 64 65 72 4b 65 79 2c 0d 0a 20 20 20  roviderKey,..   
214a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
214b0 20 20 20 20 20 20 20 20 20 22 53 75 70 70 6f 72           "Suppor
214c0 74 65 64 4f 62 6a 65 63 74 73 5c 5c 44 61 74 61  tedObjects\\Data
214d0 56 69 65 77 53 75 70 70 6f 72 74 22 2c 20 77 68  ViewSupport", wh
214e0 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20  atIf,..         
214f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21500 20 20 20 76 65 72 62 6f 73 65 29 3b 0d 0a 20 20     verbose);..  
21510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21520 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
21530 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
21540 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
21550 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65       return true
21560 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  ;..        }....
21570 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
21580 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d  ///////////////.
215c0 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  ...        priva
215d0 74 65 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 52  te static bool R
215e0 65 6d 6f 76 65 56 73 44 61 74 61 50 72 6f 76 69  emoveVsDataProvi
215f0 64 65 72 28 0d 0a 20 20 20 20 20 20 20 20 20 20  der(..          
21600 20 20 52 65 67 69 73 74 72 79 4b 65 79 20 72 6f    RegistryKey ro
21610 6f 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20  otKey,..        
21620 20 20 20 20 56 65 72 73 69 6f 6e 20 76 73 56 65      Version vsVe
21630 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20  rsion,..        
21640 20 20 20 20 47 75 69 64 20 64 61 74 61 50 72 6f      Guid dataPro
21650 76 69 64 65 72 49 64 2c 0d 0a 20 20 20 20 20 20  viderId,..      
21660 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49        bool whatI
21670 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f,..            
21680 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a 20  bool verbose,.. 
21690 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20 73             ref s
216a0 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20  tring error..   
216b0 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
216c0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
216d0 20 20 20 73 74 72 69 6e 67 20 6b 65 79 4e 61 6d     string keyNam
216e0 65 20 3d 20 47 65 74 56 73 4b 65 79 4e 61 6d 65  e = GetVsKeyName
216f0 28 76 73 56 65 72 73 69 6f 6e 29 3b 0d 0a 0d 0a  (vsVersion);....
21700 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e              usin
21710 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b  g (MockRegistryK
21720 65 79 20 6b 65 79 20 3d 20 52 65 67 69 73 74 72  ey key = Registr
21730 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62 4b  yHelper.OpenSubK
21740 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey(..           
21750 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79           rootKey
21760 2c 20 6b 65 79 4e 61 6d 65 2c 20 66 61 6c 73 65  , keyName, false
21770 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73  , whatIf, verbos
21780 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e))..           
21790 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
217a0 20 20 20 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e      if (key == n
217b0 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
217c0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
217d0 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
217e0 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d  or = String.Form
217f0 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
21800 20 20 20 20 20 20 20 20 20 20 20 20 20 22 63 6f               "co
21810 75 6c 64 20 6e 6f 74 20 6f 70 65 6e 20 72 65 67  uld not open reg
21820 69 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c  istry key: {0}\\
21830 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  {1}",..         
21840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
21850 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e 61 6d 65 29  ootKey, keyName)
21860 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
21870 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
21880 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
21890 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
218a0 20 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69               usi
218b0 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79  ng (MockRegistry
218c0 4b 65 79 20 73 75 62 4b 65 79 20 3d 20 52 65 67  Key subKey = Reg
218d0 69 73 74 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e  istryHelper.Open
218e0 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20  SubKey(..       
218f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21900 20 6b 65 79 2c 20 22 44 61 74 61 50 72 6f 76 69   key, "DataProvi
21910 64 65 72 73 22 2c 20 74 72 75 65 2c 20 77 68 61  ders", true, wha
21920 74 49 66 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a  tIf, verbose))..
21930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21940 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
21950 20 20 20 20 20 20 20 69 66 20 28 73 75 62 4b 65         if (subKe
21960 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  y == null)..    
21970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21980 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
21990 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
219a0 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74   = String.Format
219b0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
219c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
219d0 63 6f 75 6c 64 20 6e 6f 74 20 6f 70 65 6e 20 72  could not open r
219e0 65 67 69 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d  egistry key: {0}
219f0 5c 5c 44 61 74 61 50 72 6f 76 69 64 65 72 73 22  \\DataProviders"
21a00 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
21a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b                 k
21a20 65 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ey);....        
21a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21a40 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20  return false;.. 
21a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21a60 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
21a70 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69              Regi
21a80 73 74 72 79 48 65 6c 70 65 72 2e 44 65 6c 65 74  stryHelper.Delet
21a90 65 53 75 62 4b 65 79 54 72 65 65 28 0d 0a 20 20  eSubKeyTree(..  
21aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21ab0 20 20 20 20 20 20 73 75 62 4b 65 79 2c 20 64 61        subKey, da
21ac0 74 61 50 72 6f 76 69 64 65 72 49 64 2e 54 6f 53  taProviderId.ToS
21ad0 74 72 69 6e 67 28 56 73 49 64 46 6f 72 6d 61 74  tring(VsIdFormat
21ae0 29 2c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20  ), whatIf,..    
21af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21b00 20 20 20 20 76 65 72 62 6f 73 65 29 3b 0d 0a 20      verbose);.. 
21b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
21b20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
21b30 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ...            r
21b40 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20  eturn true;..   
21b50 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
21b60 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
21b70 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20  /////////....   
21bb0 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61       private sta
21bc0 74 69 63 20 62 6f 6f 6c 20 50 72 6f 63 65 73 73  tic bool Process
21bd0 56 73 44 61 74 61 50 72 6f 76 69 64 65 72 28 0d  VsDataProvider(.
21be0 0a 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67  .            Reg
21bf0 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79  istryKey rootKey
21c00 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 56  ,..            V
21c10 65 72 73 69 6f 6e 20 76 73 56 65 72 73 69 6f 6e  ersion vsVersion
21c20 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 47  ,..            G
21c30 75 69 64 20 70 61 63 6b 61 67 65 49 64 2c 20 2f  uid packageId, /
21c40 2a 20 4e 4f 54 20 55 53 45 44 20 2a 2f 0d 0a 20  * NOT USED */.. 
21c50 20 20 20 20 20 20 20 20 20 20 20 47 75 69 64 20             Guid 
21c60 73 65 72 76 69 63 65 49 64 2c 0d 0a 20 20 20 20  serviceId,..    
21c70 20 20 20 20 20 20 20 20 47 75 69 64 20 64 61 74          Guid dat
21c80 61 53 6f 75 72 63 65 49 64 2c 20 2f 2a 20 4e 4f  aSourceId, /* NO
21c90 54 20 55 53 45 44 20 2a 2f 0d 0a 20 20 20 20 20  T USED */..     
21ca0 20 20 20 20 20 20 20 47 75 69 64 20 64 61 74 61         Guid data
21cb0 50 72 6f 76 69 64 65 72 49 64 2c 0d 0a 20 20 20  ProviderId,..   
21cc0 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20           object 
21cd0 63 6c 69 65 6e 74 44 61 74 61 2c 0d 0a 20 20 20  clientData,..   
21ce0 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68           bool wh
21cf0 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20  atIf,..         
21d00 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c     bool verbose,
21d10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
21d20 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a  f string error..
21d30 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
21d40 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
21d50 20 20 20 20 20 20 41 6e 79 50 61 69 72 3c 73 74        AnyPair<st
21d60 72 69 6e 67 2c 20 62 6f 6f 6c 3e 20 70 61 69 72  ring, bool> pair
21d70 20 3d 20 63 6c 69 65 6e 74 44 61 74 61 20 61 73   = clientData as
21d80 20 41 6e 79 50 61 69 72 3c 73 74 72 69 6e 67 2c   AnyPair<string,
21d90 20 62 6f 6f 6c 3e 3b 0d 0a 0d 0a 20 20 20 20 20   bool>;....     
21da0 20 20 20 20 20 20 20 69 66 20 28 70 61 69 72 20         if (pair 
21db0 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
21dc0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
21dd0 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
21de0 20 22 69 6e 76 61 6c 69 64 20 56 53 20 63 61 6c   "invalid VS cal
21df0 6c 62 61 63 6b 20 64 61 74 61 22 3b 0d 0a 20 20  lback data";..  
21e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
21e10 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
21e20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
21e30 20 20 20 20 20 20 20 20 20 20 69 66 20 28 70 61            if (pa
21e40 69 72 2e 59 29 0d 0a 20 20 20 20 20 20 20 20 20  ir.Y)..         
21e50 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
21e60 20 20 20 20 20 20 72 65 74 75 72 6e 20 41 64 64        return Add
21e70 56 73 44 61 74 61 50 72 6f 76 69 64 65 72 28 0d  VsDataProvider(.
21e80 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
21e90 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 76 73       rootKey, vs
21ea0 56 65 72 73 69 6f 6e 2c 20 73 65 72 76 69 63 65  Version, service
21eb0 49 64 2c 20 64 61 74 61 50 72 6f 76 69 64 65 72  Id, dataProvider
21ec0 49 64 2c 20 70 61 69 72 2e 58 2c 0d 0a 20 20 20  Id, pair.X,..   
21ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21ee0 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65   whatIf, verbose
21ef0 2c 20 72 65 66 20 65 72 72 6f 72 29 3b 0d 0a 20  , ref error);.. 
21f00 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
21f10 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a            else..
21f20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
21f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
21f40 65 74 75 72 6e 20 52 65 6d 6f 76 65 56 73 44 61  eturn RemoveVsDa
21f50 74 61 50 72 6f 76 69 64 65 72 28 0d 0a 20 20 20  taProvider(..   
21f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21f70 20 72 6f 6f 74 4b 65 79 2c 20 76 73 56 65 72 73   rootKey, vsVers
21f80 69 6f 6e 2c 20 64 61 74 61 50 72 6f 76 69 64 65  ion, dataProvide
21f90 72 49 64 2c 20 77 68 61 74 49 66 2c 20 76 65 72  rId, whatIf, ver
21fa0 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  bose,..         
21fb0 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20 65             ref e
21fc0 72 72 6f 72 29 3b 0d 0a 20 20 20 20 20 20 20 20  rror);..        
21fd0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d      }..        }
21fe0 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65  ..        #endre
21ff0 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
22000 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22010 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20  ///////....     
22050 20 20 20 23 72 65 67 69 6f 6e 20 56 69 73 75 61     #region Visua
22060 6c 20 53 74 75 64 69 6f 20 50 61 63 6b 61 67 65  l Studio Package
22070 20 48 61 6e 64 6c 69 6e 67 0d 0a 20 20 20 20 20   Handling..     
22080 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
22090 63 20 62 6f 6f 6c 20 41 64 64 56 73 50 61 63 6b  c bool AddVsPack
220a0 61 67 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  age(..          
220b0 20 20 52 65 67 69 73 74 72 79 4b 65 79 20 72 6f    RegistryKey ro
220c0 6f 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20  otKey,..        
220d0 20 20 20 20 56 65 72 73 69 6f 6e 20 76 73 56 65      Version vsVe
220e0 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20  rsion,..        
220f0 20 20 20 20 47 75 69 64 20 70 61 63 6b 61 67 65      Guid package
22100 49 64 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  Id,..           
22110 20 47 75 69 64 20 73 65 72 76 69 63 65 49 64 2c   Guid serviceId,
22120 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
22130 72 69 6e 67 20 66 69 6c 65 4e 61 6d 65 2c 0d 0a  ring fileName,..
22140 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
22150 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20   whatIf,..      
22160 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f        bool verbo
22170 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se,..           
22180 20 72 65 66 20 73 74 72 69 6e 67 20 65 72 72 6f   ref string erro
22190 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29  r..            )
221a0 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
221b0 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
221c0 6b 65 79 4e 61 6d 65 20 3d 20 47 65 74 56 73 4b  keyName = GetVsK
221d0 65 79 4e 61 6d 65 28 76 73 56 65 72 73 69 6f 6e  eyName(vsVersion
221e0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
221f0 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67    using (MockReg
22200 69 73 74 72 79 4b 65 79 20 6b 65 79 20 3d 20 52  istryKey key = R
22210 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 4f 70  egistryHelper.Op
22220 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20  enSubKey(..     
22230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
22240 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e 61 6d 65 2c  ootKey, keyName,
22250 20 66 61 6c 73 65 2c 20 77 68 61 74 49 66 2c 20   false, whatIf, 
22260 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20  verbose))..     
22270 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
22280 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6b 65            if (ke
22290 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  y == null)..    
222a0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
222b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
222c0 20 20 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e     error = Strin
222d0 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
222e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
222f0 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20 6f 70     "could not op
22300 65 6e 20 72 65 67 69 73 74 72 79 20 6b 65 79 3a  en registry key:
22310 20 7b 30 7d 5c 5c 7b 31 7d 22 2c 0d 0a 20 20 20   {0}\\{1}",..   
22320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22330 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 6b 65       rootKey, ke
22340 79 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  yName);....     
22350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
22360 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
22370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
22380 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
22390 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65     using (MockRe
223a0 67 69 73 74 72 79 4b 65 79 20 73 75 62 4b 65 79  gistryKey subKey
223b0 20 3d 20 52 65 67 69 73 74 72 79 48 65 6c 70 65   = RegistryHelpe
223c0 72 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20  r.OpenSubKey(.. 
223d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
223e0 20 20 20 20 20 20 20 6b 65 79 2c 20 22 50 61 63         key, "Pac
223f0 6b 61 67 65 73 22 2c 20 74 72 75 65 2c 20 77 68  kages", true, wh
22400 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 29 0d  atIf, verbose)).
22410 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
22420 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
22430 20 20 20 20 20 20 20 20 69 66 20 28 73 75 62 4b          if (subK
22440 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ey == null)..   
22450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22460 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
22470 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
22480 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  r = String.Forma
22490 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
224a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
224b0 22 63 6f 75 6c 64 20 6e 6f 74 20 6f 70 65 6e 20  "could not open 
224c0 72 65 67 69 73 74 72 79 20 6b 65 79 3a 20 7b 30  registry key: {0
224d0 7d 5c 5c 50 61 63 6b 61 67 65 73 22 2c 0d 0a 20  }\\Packages",.. 
224e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
224f0 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 29 3b             key);
22500 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
22510 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
22520 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
22530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
22540 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
22550 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 4d          using (M
22560 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 70  ockRegistryKey p
22570 61 63 6b 61 67 65 4b 65 79 20 3d 20 52 65 67 69  ackageKey = Regi
22580 73 74 72 79 48 65 6c 70 65 72 2e 43 72 65 61 74  stryHelper.Creat
22590 65 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20  eSubKey(..      
225a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
225b0 20 20 20 20 20 20 73 75 62 4b 65 79 2c 20 70 61        subKey, pa
225c0 63 6b 61 67 65 49 64 2e 54 6f 53 74 72 69 6e 67  ckageId.ToString
225d0 28 56 73 49 64 46 6f 72 6d 61 74 29 2c 20 77 68  (VsIdFormat), wh
225e0 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20  atIf,..         
225f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22600 20 20 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20     verbose))..  
22610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22620 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
22630 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
22640 28 70 61 63 6b 61 67 65 4b 65 79 20 3d 3d 20 6e  (packageKey == n
22650 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
22660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
22670 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
22680 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
22690 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d  or = String.Form
226a0 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
226b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
226c0 20 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20       "could not 
226d0 63 72 65 61 74 65 20 72 65 67 69 73 74 72 79 20  create registry 
226e0 6b 65 79 3a 20 7b 30 7d 5c 5c 7b 31 7d 22 2c 0d  key: {0}\\{1}",.
226f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
22700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22710 20 6b 65 79 2c 20 70 61 63 6b 61 67 65 49 64 2e   key, packageId.
22720 54 6f 53 74 72 69 6e 67 28 56 73 49 64 46 6f 72  ToString(VsIdFor
22730 6d 61 74 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  mat));....      
22740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22750 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
22760 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se;..           
22770 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
22780 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
22790 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74            Regist
227a0 72 79 48 65 6c 70 65 72 2e 53 65 74 56 61 6c 75  ryHelper.SetValu
227b0 65 28 70 61 63 6b 61 67 65 4b 65 79 2c 20 6e 75  e(packageKey, nu
227c0 6c 6c 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ll, String.Forma
227d0 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
227e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
227f0 22 7b 30 7d 20 44 65 73 69 67 6e 65 72 20 50 61  "{0} Designer Pa
22800 63 6b 61 67 65 22 2c 20 50 72 6f 6a 65 63 74 4e  ckage", ProjectN
22810 61 6d 65 29 2c 20 77 68 61 74 49 66 2c 0d 0a 20  ame), whatIf,.. 
22820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22830 20 20 20 20 20 20 20 20 20 20 20 76 65 72 62 6f             verbo
22840 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  se);....        
22850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22860 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 53  RegistryHelper.S
22870 65 74 56 61 6c 75 65 28 70 61 63 6b 61 67 65 4b  etValue(packageK
22880 65 79 2c 20 22 43 6c 61 73 73 22 2c 0d 0a 20 20  ey, "Class",..  
22890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
228a0 20 20 20 20 20 20 20 20 20 20 22 53 51 4c 69 74            "SQLit
228b0 65 2e 44 65 73 69 67 6e 65 72 2e 53 51 4c 69 74  e.Designer.SQLit
228c0 65 50 61 63 6b 61 67 65 22 2c 20 77 68 61 74 49  ePackage", whatI
228d0 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a  f, verbose);....
228e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
228f0 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79          Registry
22900 48 65 6c 70 65 72 2e 53 65 74 56 61 6c 75 65 28  Helper.SetValue(
22910 70 61 63 6b 61 67 65 4b 65 79 2c 20 22 43 6f 64  packageKey, "Cod
22920 65 42 61 73 65 22 2c 0d 0a 20 20 20 20 20 20 20  eBase",..       
22930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22940 20 20 20 20 20 66 69 6c 65 4e 61 6d 65 2c 20 77       fileName, w
22950 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 3b  hatIf, verbose);
22960 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
22970 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69              Regi
22980 73 74 72 79 48 65 6c 70 65 72 2e 53 65 74 56 61  stryHelper.SetVa
22990 6c 75 65 28 70 61 63 6b 61 67 65 4b 65 79 2c 20  lue(packageKey, 
229a0 22 49 44 22 2c 20 34 30 30 2c 20 77 68 61 74 49  "ID", 400, whatI
229b0 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f,..            
229c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
229d0 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20  verbose);....   
229e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
229f0 20 20 20 20 20 52 65 67 69 73 74 72 79 48 65 6c       RegistryHel
22a00 70 65 72 2e 53 65 74 56 61 6c 75 65 28 70 61 63  per.SetValue(pac
22a10 6b 61 67 65 4b 65 79 2c 20 22 49 6e 70 72 6f 63  kageKey, "Inproc
22a20 53 65 72 76 65 72 33 32 22 2c 0d 0a 20 20 20 20  Server32",..    
22a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22a40 20 20 20 20 20 20 20 20 50 61 74 68 2e 43 6f 6d          Path.Com
22a50 62 69 6e 65 28 45 6e 76 69 72 6f 6e 6d 65 6e 74  bine(Environment
22a60 2e 53 79 73 74 65 6d 44 69 72 65 63 74 6f 72 79  .SystemDirectory
22a70 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
22a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22a90 20 20 20 22 6d 73 63 6f 72 65 65 2e 64 6c 6c 22     "mscoree.dll"
22aa0 29 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f  ), whatIf, verbo
22ab0 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  se);....        
22ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22ad0 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 53  RegistryHelper.S
22ae0 65 74 56 61 6c 75 65 28 70 61 63 6b 61 67 65 4b  etValue(packageK
22af0 65 79 2c 20 22 43 6f 6d 70 61 6e 79 4e 61 6d 65  ey, "CompanyName
22b00 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
22b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22b20 22 68 74 74 70 3a 2f 2f 73 79 73 74 65 6d 2e 64  "http://system.d
22b30 61 74 61 2e 73 71 6c 69 74 65 2e 6f 72 67 2f 22  ata.sqlite.org/"
22b40 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73  , whatIf, verbos
22b50 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
22b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52                 R
22b70 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 53 65  egistryHelper.Se
22b80 74 56 61 6c 75 65 28 70 61 63 6b 61 67 65 4b 65  tValue(packageKe
22b90 79 2c 20 22 4d 69 6e 45 64 69 74 69 6f 6e 22 2c  y, "MinEdition",
22ba0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
22bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 73                "s
22bc0 74 61 6e 64 61 72 64 22 2c 20 77 68 61 74 49 66  tandard", whatIf
22bd0 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20  , verbose);.... 
22be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22bf0 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79 48         RegistryH
22c00 65 6c 70 65 72 2e 53 65 74 56 61 6c 75 65 28 70  elper.SetValue(p
22c10 61 63 6b 61 67 65 4b 65 79 2c 20 22 50 72 6f 64  ackageKey, "Prod
22c20 75 63 74 4e 61 6d 65 22 2c 0d 0a 20 20 20 20 20  uctName",..     
22c30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22c40 20 20 20 20 20 20 20 53 74 72 69 6e 67 2e 46 6f         String.Fo
22c50 72 6d 61 74 28 22 7b 30 7d 20 44 65 73 69 67 6e  rmat("{0} Design
22c60 65 72 20 50 61 63 6b 61 67 65 22 2c 20 50 72 6f  er Package", Pro
22c70 6a 65 63 74 4e 61 6d 65 29 2c 0d 0a 20 20 20 20  jectName),..    
22c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22c90 20 20 20 20 20 20 20 20 77 68 61 74 49 66 2c 20          whatIf, 
22ca0 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20  verbose);....   
22cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22cc0 20 20 20 20 20 52 65 67 69 73 74 72 79 48 65 6c       RegistryHel
22cd0 70 65 72 2e 53 65 74 56 61 6c 75 65 28 70 61 63  per.SetValue(pac
22ce0 6b 61 67 65 4b 65 79 2c 20 22 50 72 6f 64 75 63  kageKey, "Produc
22cf0 74 56 65 72 73 69 6f 6e 22 2c 0d 0a 20 20 20 20  tVersion",..    
22d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22d10 20 20 20 20 20 20 20 20 22 31 2e 30 22 2c 20 77          "1.0", w
22d20 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 3b  hatIf, verbose);
22d30 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
22d40 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e              usin
22d50 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b  g (MockRegistryK
22d60 65 79 20 74 6f 6f 6c 62 6f 78 4b 65 79 20 3d 20  ey toolboxKey = 
22d70 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 43  RegistryHelper.C
22d80 72 65 61 74 65 53 75 62 4b 65 79 28 0d 0a 20 20  reateSubKey(..  
22d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 61                pa
22db0 63 6b 61 67 65 4b 65 79 2c 20 22 54 6f 6f 6c 62  ckageKey, "Toolb
22dc0 6f 78 22 2c 20 77 68 61 74 49 66 2c 20 76 65 72  ox", whatIf, ver
22dd0 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20  bose))..        
22de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22df0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
22e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
22e10 66 20 28 74 6f 6f 6c 62 6f 78 4b 65 79 20 3d 3d  f (toolboxKey ==
22e20 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
22e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22e40 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
22e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22e60 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 53         error = S
22e70 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
22e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22ea0 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20 63 72     "could not cr
22eb0 65 61 74 65 20 72 65 67 69 73 74 72 79 20 6b 65  eate registry ke
22ec0 79 3a 20 7b 30 7d 5c 5c 54 6f 6f 6c 62 6f 78 22  y: {0}\\Toolbox"
22ed0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
22ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22ef0 20 20 20 20 20 20 20 70 61 63 6b 61 67 65 4b 65         packageKe
22f00 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
22f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22f20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
22f30 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lse;..          
22f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22f50 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
22f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22f70 20 20 20 52 65 67 69 73 74 72 79 48 65 6c 70 65     RegistryHelpe
22f80 72 2e 53 65 74 56 61 6c 75 65 28 0d 0a 20 20 20  r.SetValue(..   
22f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 6f 6f               too
22fb0 6c 62 6f 78 4b 65 79 2c 20 22 44 65 66 61 75 6c  lboxKey, "Defaul
22fc0 74 20 49 74 65 6d 73 22 2c 20 33 2c 20 77 68 61  t Items", 3, wha
22fd0 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf,..          
22fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22ff0 20 20 20 20 20 20 76 65 72 62 6f 73 65 29 3b 0d        verbose);.
23000 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
23010 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
23020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23030 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
23040 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
23050 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 4d          using (M
23060 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 73  ockRegistryKey s
23070 75 62 4b 65 79 20 3d 20 52 65 67 69 73 74 72 79  ubKey = Registry
23080 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62 4b 65  Helper.OpenSubKe
23090 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
230a0 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 2c              key,
230b0 20 22 4d 65 6e 75 73 22 2c 20 74 72 75 65 2c 20   "Menus", true, 
230c0 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29  whatIf, verbose)
230d0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
230e0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
230f0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73 75            if (su
23100 62 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  bKey == null).. 
23110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23120 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
23130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
23140 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72  ror = String.For
23150 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
23160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23170 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20 6f 70 65    "could not ope
23180 6e 20 72 65 67 69 73 74 72 79 20 6b 65 79 3a 20  n registry key: 
23190 7b 30 7d 5c 5c 4d 65 6e 75 73 22 2c 0d 0a 20 20  {0}\\Menus",..  
231a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
231b0 20 20 20 20 20 20 20 20 20 20 6b 65 79 29 3b 0d            key);.
231c0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
231d0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
231e0 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
231f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
23200 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
23210 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79 48         RegistryH
23220 65 6c 70 65 72 2e 53 65 74 56 61 6c 75 65 28 0d  elper.SetValue(.
23230 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
23240 20 20 20 20 20 20 20 20 20 73 75 62 4b 65 79 2c           subKey,
23250 20 70 61 63 6b 61 67 65 49 64 2e 54 6f 53 74 72   packageId.ToStr
23260 69 6e 67 28 56 73 49 64 46 6f 72 6d 61 74 29 2c  ing(VsIdFormat),
23270 20 22 2c 20 31 30 30 30 2c 20 33 22 2c 0d 0a 20   ", 1000, 3",.. 
23280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23290 20 20 20 20 20 20 20 77 68 61 74 49 66 2c 20 76         whatIf, v
232a0 65 72 62 6f 73 65 29 3b 0d 0a 20 20 20 20 20 20  erbose);..      
232b0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
232c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 75                 u
232d0 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74  sing (MockRegist
232e0 72 79 4b 65 79 20 73 75 62 4b 65 79 20 3d 20 52  ryKey subKey = R
232f0 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 4f 70  egistryHelper.Op
23300 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20  enSubKey(..     
23310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23320 20 20 20 6b 65 79 2c 20 22 53 65 72 76 69 63 65     key, "Service
23330 73 22 2c 20 74 72 75 65 2c 20 77 68 61 74 49 66  s", true, whatIf
23340 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20  , verbose))..   
23350 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
23360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23370 20 20 20 20 69 66 20 28 73 75 62 4b 65 79 20 3d      if (subKey =
23380 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
23390 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
233a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
233b0 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
233c0 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
233d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
233e0 20 20 20 20 20 20 20 20 20 20 20 20 22 63 6f 75              "cou
233f0 6c 64 20 6e 6f 74 20 6f 70 65 6e 20 72 65 67 69  ld not open regi
23400 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 53  stry key: {0}\\S
23410 65 72 76 69 63 65 73 22 2c 0d 0a 20 20 20 20 20  ervices",..     
23420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23430 20 20 20 20 20 20 20 6b 65 79 29 3b 0d 0a 0d 0a         key);....
23440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23450 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
23460 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
23470 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
23480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23490 20 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52      using (MockR
234a0 65 67 69 73 74 72 79 4b 65 79 20 73 65 72 76 69  egistryKey servi
234b0 63 65 4b 65 79 20 3d 20 52 65 67 69 73 74 72 79  ceKey = Registry
234c0 48 65 6c 70 65 72 2e 43 72 65 61 74 65 53 75 62  Helper.CreateSub
234d0 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  Key(..          
234e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
234f0 20 20 73 75 62 4b 65 79 2c 20 73 65 72 76 69 63    subKey, servic
23500 65 49 64 2e 54 6f 53 74 72 69 6e 67 28 56 73 49  eId.ToString(VsI
23510 64 46 6f 72 6d 61 74 29 2c 20 77 68 61 74 49 66  dFormat), whatIf
23520 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
23530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76                 v
23540 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20  erbose))..      
23550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
23560 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
23570 20 20 20 20 20 20 20 20 20 69 66 20 28 73 65 72           if (ser
23580 76 69 63 65 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29  viceKey == null)
23590 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
235a0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
235b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
235c0 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
235d0 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
235e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
235f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23600 20 22 63 6f 75 6c 64 20 6e 6f 74 20 63 72 65 61   "could not crea
23610 74 65 20 72 65 67 69 73 74 72 79 20 6b 65 79 3a  te registry key:
23620 20 7b 30 7d 5c 5c 7b 31 7d 22 2c 0d 0a 20 20 20   {0}\\{1}",..   
23630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23640 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79               key
23650 2c 20 73 65 72 76 69 63 65 49 64 2e 54 6f 53 74  , serviceId.ToSt
23660 72 69 6e 67 28 56 73 49 64 46 6f 72 6d 61 74 29  ring(VsIdFormat)
23670 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
23680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23690 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
236a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
236b0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
236c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
236d0 20 20 20 20 20 20 52 65 67 69 73 74 72 79 48 65        RegistryHe
236e0 6c 70 65 72 2e 53 65 74 56 61 6c 75 65 28 73 65  lper.SetValue(se
236f0 72 76 69 63 65 4b 65 79 2c 20 6e 75 6c 6c 2c 0d  rviceKey, null,.
23700 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
23710 20 20 20 20 20 20 20 20 20 20 20 20 20 70 61 63               pac
23720 6b 61 67 65 49 64 2e 54 6f 53 74 72 69 6e 67 28  kageId.ToString(
23730 56 73 49 64 46 6f 72 6d 61 74 29 2c 20 77 68 61  VsIdFormat), wha
23740 74 49 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a  tIf, verbose);..
23750 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
23760 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74            Regist
23770 72 79 48 65 6c 70 65 72 2e 53 65 74 56 61 6c 75  ryHelper.SetValu
23780 65 28 73 65 72 76 69 63 65 4b 65 79 2c 20 22 4e  e(serviceKey, "N
23790 61 6d 65 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  ame",..         
237a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
237b0 20 20 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74     String.Format
237c0 28 22 7b 30 7d 20 44 65 73 69 67 6e 65 72 20 53  ("{0} Designer S
237d0 65 72 76 69 63 65 22 2c 20 50 72 6f 6a 65 63 74  ervice", Project
237e0 4e 61 6d 65 29 2c 0d 0a 20 20 20 20 20 20 20 20  Name),..        
237f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23800 20 20 20 20 77 68 61 74 49 66 2c 20 76 65 72 62      whatIf, verb
23810 6f 73 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ose);..         
23820 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
23830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
23840 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
23850 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
23860 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20  turn true;..    
23870 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
23880 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
23890 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20  ////////....    
238d0 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74      private stat
238e0 69 63 20 62 6f 6f 6c 20 52 65 6d 6f 76 65 56 73  ic bool RemoveVs
238f0 50 61 63 6b 61 67 65 28 0d 0a 20 20 20 20 20 20  Package(..      
23900 20 20 20 20 20 20 52 65 67 69 73 74 72 79 4b 65        RegistryKe
23910 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 20  y rootKey,..    
23920 20 20 20 20 20 20 20 20 56 65 72 73 69 6f 6e 20          Version 
23930 76 73 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20  vsVersion,..    
23940 20 20 20 20 20 20 20 20 47 75 69 64 20 70 61 63          Guid pac
23950 6b 61 67 65 49 64 2c 0d 0a 20 20 20 20 20 20 20  kageId,..       
23960 20 20 20 20 20 47 75 69 64 20 73 65 72 76 69 63       Guid servic
23970 65 49 64 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  eId,..          
23980 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a    bool whatIf,..
23990 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
239a0 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20   verbose,..     
239b0 20 20 20 20 20 20 20 72 65 66 20 73 74 72 69 6e         ref strin
239c0 67 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20  g error..       
239d0 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
239e0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  {..            s
239f0 74 72 69 6e 67 20 6b 65 79 4e 61 6d 65 20 3d 20  tring keyName = 
23a00 47 65 74 56 73 4b 65 79 4e 61 6d 65 28 76 73 56  GetVsKeyName(vsV
23a10 65 72 73 69 6f 6e 29 3b 0d 0a 0d 0a 20 20 20 20  ersion);....    
23a20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 4d          using (M
23a30 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 6b  ockRegistryKey k
23a40 65 79 20 3d 20 52 65 67 69 73 74 72 79 48 65 6c  ey = RegistryHel
23a50 70 65 72 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d  per.OpenSubKey(.
23a60 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
23a70 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 6b 65       rootKey, ke
23a80 79 4e 61 6d 65 2c 20 66 61 6c 73 65 2c 20 77 68  yName, false, wh
23a90 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 29 0d  atIf, verbose)).
23aa0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
23ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23ac0 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29  if (key == null)
23ad0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
23ae0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
23af0 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
23b00 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
23b10 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
23b20 20 20 20 20 20 20 20 20 20 22 63 6f 75 6c 64 20           "could 
23b30 6e 6f 74 20 6f 70 65 6e 20 72 65 67 69 73 74 72  not open registr
23b40 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 7b 31 7d 22  y key: {0}\\{1}"
23b50 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
23b60 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b             rootK
23b70 65 79 2c 20 6b 65 79 4e 61 6d 65 29 3b 0d 0a 0d  ey, keyName);...
23b80 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
23b90 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
23ba0 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
23bb0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
23bc0 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28           using (
23bd0 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20  MockRegistryKey 
23be0 73 75 62 4b 65 79 20 3d 20 52 65 67 69 73 74 72  subKey = Registr
23bf0 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62 4b  yHelper.OpenSubK
23c00 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey(..           
23c10 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79               key
23c20 2c 20 22 50 61 63 6b 61 67 65 73 22 2c 20 74 72  , "Packages", tr
23c30 75 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62  ue, whatIf, verb
23c40 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ose))..         
23c50 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
23c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
23c70 20 28 73 75 62 4b 65 79 20 3d 3d 20 6e 75 6c 6c   (subKey == null
23c80 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
23c90 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
23ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23cb0 20 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67    error = String
23cc0 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
23cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23ce0 20 20 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74        "could not
23cf0 20 6f 70 65 6e 20 72 65 67 69 73 74 72 79 20 6b   open registry k
23d00 65 79 3a 20 7b 30 7d 5c 5c 50 61 63 6b 61 67 65  ey: {0}\\Package
23d10 73 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s",..           
23d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23d30 20 6b 65 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20   key);....      
23d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23d50 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
23d60 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
23d70 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
23d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65                Re
23d90 67 69 73 74 72 79 48 65 6c 70 65 72 2e 44 65 6c  gistryHelper.Del
23da0 65 74 65 53 75 62 4b 65 79 54 72 65 65 28 0d 0a  eteSubKeyTree(..
23db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23dc0 20 20 20 20 20 20 20 20 6b 65 79 2c 20 70 61 63          key, pac
23dd0 6b 61 67 65 49 64 2e 54 6f 53 74 72 69 6e 67 28  kageId.ToString(
23de0 56 73 49 64 46 6f 72 6d 61 74 29 2c 20 77 68 61  VsIdFormat), wha
23df0 74 49 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a  tIf, verbose);..
23e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23e10 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
23e20 20 20 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b       using (Mock
23e30 52 65 67 69 73 74 72 79 4b 65 79 20 73 75 62 4b  RegistryKey subK
23e40 65 79 20 3d 20 52 65 67 69 73 74 72 79 48 65 6c  ey = RegistryHel
23e50 70 65 72 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d  per.OpenSubKey(.
23e60 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
23e70 20 20 20 20 20 20 20 20 20 6b 65 79 2c 20 22 4d           key, "M
23e80 65 6e 75 73 22 2c 20 74 72 75 65 2c 20 77 68 61  enus", true, wha
23e90 74 49 66 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a  tIf, verbose))..
23ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23eb0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
23ec0 20 20 20 20 20 20 20 69 66 20 28 73 75 62 4b 65         if (subKe
23ed0 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  y == null)..    
23ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23ef0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
23f00 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
23f10 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74   = String.Format
23f20 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
23f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
23f40 63 6f 75 6c 64 20 6e 6f 74 20 6f 70 65 6e 20 72  could not open r
23f50 65 67 69 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d  egistry key: {0}
23f60 5c 5c 4d 65 6e 75 73 22 2c 0d 0a 20 20 20 20 20  \\Menus",..     
23f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23f80 20 20 20 20 20 20 20 6b 65 79 29 3b 0d 0a 0d 0a         key);....
23f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23fa0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
23fb0 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
23fc0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
23fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23fe0 20 20 20 20 52 65 67 69 73 74 72 79 48 65 6c 70      RegistryHelp
23ff0 65 72 2e 44 65 6c 65 74 65 56 61 6c 75 65 28 0d  er.DeleteValue(.
24000 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
24010 20 20 20 20 20 20 20 20 20 73 75 62 4b 65 79 2c           subKey,
24020 20 70 61 63 6b 61 67 65 49 64 2e 54 6f 53 74 72   packageId.ToStr
24030 69 6e 67 28 56 73 49 64 46 6f 72 6d 61 74 29 2c  ing(VsIdFormat),
24040 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20   whatIf,..      
24050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24060 20 20 76 65 72 62 6f 73 65 29 3b 0d 0a 20 20 20    verbose);..   
24070 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
24080 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
24090 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67    using (MockReg
240a0 69 73 74 72 79 4b 65 79 20 73 75 62 4b 65 79 20  istryKey subKey 
240b0 3d 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72  = RegistryHelper
240c0 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20  .OpenSubKey(..  
240d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
240e0 20 20 20 20 20 20 6b 65 79 2c 20 22 53 65 72 76        key, "Serv
240f0 69 63 65 73 22 2c 20 74 72 75 65 2c 20 77 68 61  ices", true, wha
24100 74 49 66 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a  tIf, verbose))..
24110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24120 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
24130 20 20 20 20 20 20 20 69 66 20 28 73 75 62 4b 65         if (subKe
24140 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  y == null)..    
24150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24160 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
24170 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
24180 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74   = String.Format
24190 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
241a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
241b0 63 6f 75 6c 64 20 6e 6f 74 20 6f 70 65 6e 20 72  could not open r
241c0 65 67 69 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d  egistry key: {0}
241d0 5c 5c 53 65 72 76 69 63 65 73 22 2c 0d 0a 20 20  \\Services",..  
241e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
241f0 20 20 20 20 20 20 20 20 20 20 6b 65 79 29 3b 0d            key);.
24200 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
24210 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
24220 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
24230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
24240 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
24250 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79 48         RegistryH
24260 65 6c 70 65 72 2e 44 65 6c 65 74 65 53 75 62 4b  elper.DeleteSubK
24270 65 79 54 72 65 65 28 0d 0a 20 20 20 20 20 20 20  eyTree(..       
24280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24290 20 73 75 62 4b 65 79 2c 20 73 65 72 76 69 63 65   subKey, service
242a0 49 64 2e 54 6f 53 74 72 69 6e 67 28 56 73 49 64  Id.ToString(VsId
242b0 46 6f 72 6d 61 74 29 2c 20 77 68 61 74 49 66 2c  Format), whatIf,
242c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
242d0 20 20 20 20 20 20 20 20 20 20 76 65 72 62 6f 73            verbos
242e0 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e);..           
242f0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
24300 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
24310 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65       return true
24320 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  ;..        }....
24330 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
24340 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d  ///////////////.
24380 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  ...        priva
24390 74 65 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 50  te static bool P
243a0 72 6f 63 65 73 73 56 73 50 61 63 6b 61 67 65 28  rocessVsPackage(
243b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 52 65  ..            Re
243c0 67 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65  gistryKey rootKe
243d0 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y,..            
243e0 56 65 72 73 69 6f 6e 20 76 73 56 65 72 73 69 6f  Version vsVersio
243f0 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n,..            
24400 47 75 69 64 20 70 61 63 6b 61 67 65 49 64 2c 0d  Guid packageId,.
24410 0a 20 20 20 20 20 20 20 20 20 20 20 20 47 75 69  .            Gui
24420 64 20 73 65 72 76 69 63 65 49 64 2c 0d 0a 20 20  d serviceId,..  
24430 20 20 20 20 20 20 20 20 20 20 47 75 69 64 20 64            Guid d
24440 61 74 61 53 6f 75 72 63 65 49 64 2c 0d 0a 20 20  ataSourceId,..  
24450 20 20 20 20 20 20 20 20 20 20 47 75 69 64 20 64            Guid d
24460 61 74 61 50 72 6f 76 69 64 65 72 49 64 2c 0d 0a  ataProviderId,..
24470 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65              obje
24480 63 74 20 63 6c 69 65 6e 74 44 61 74 61 2c 0d 0a  ct clientData,..
24490 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
244a0 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20   whatIf,..      
244b0 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f        bool verbo
244c0 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se,..           
244d0 20 72 65 66 20 73 74 72 69 6e 67 20 65 72 72 6f   ref string erro
244e0 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29  r..            )
244f0 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
24500 20 20 20 20 20 20 20 20 20 41 6e 79 50 61 69 72           AnyPair
24510 3c 73 74 72 69 6e 67 2c 20 62 6f 6f 6c 3e 20 70  <string, bool> p
24520 61 69 72 20 3d 20 63 6c 69 65 6e 74 44 61 74 61  air = clientData
24530 20 61 73 20 41 6e 79 50 61 69 72 3c 73 74 72 69   as AnyPair<stri
24540 6e 67 2c 20 62 6f 6f 6c 3e 3b 0d 0a 0d 0a 20 20  ng, bool>;....  
24550 20 20 20 20 20 20 20 20 20 20 69 66 20 28 70 61            if (pa
24560 69 72 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ir == null)..   
24570 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
24580 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
24590 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 56 53 20  r = "invalid VS 
245a0 63 61 6c 6c 62 61 63 6b 20 64 61 74 61 22 3b 0d  callback data";.
245b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
245c0 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
245d0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
245e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
245f0 28 70 61 69 72 2e 59 29 0d 0a 20 20 20 20 20 20  (pair.Y)..      
24600 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
24610 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
24620 41 64 64 56 73 50 61 63 6b 61 67 65 28 0d 0a 20  AddVsPackage(.. 
24630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24640 20 20 20 72 6f 6f 74 4b 65 79 2c 20 76 73 56 65     rootKey, vsVe
24650 72 73 69 6f 6e 2c 20 70 61 63 6b 61 67 65 49 64  rsion, packageId
24660 2c 20 73 65 72 76 69 63 65 49 64 2c 20 70 61 69  , serviceId, pai
24670 72 2e 58 2c 20 77 68 61 74 49 66 2c 0d 0a 20 20  r.X, whatIf,..  
24680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24690 20 20 76 65 72 62 6f 73 65 2c 20 72 65 66 20 65    verbose, ref e
246a0 72 72 6f 72 29 3b 0d 0a 20 20 20 20 20 20 20 20  rror);..        
246b0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
246c0 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20     else..       
246d0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
246e0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 52          return R
246f0 65 6d 6f 76 65 56 73 50 61 63 6b 61 67 65 28 0d  emoveVsPackage(.
24700 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
24710 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 76 73       rootKey, vs
24720 56 65 72 73 69 6f 6e 2c 20 70 61 63 6b 61 67 65  Version, package
24730 49 64 2c 20 73 65 72 76 69 63 65 49 64 2c 20 77  Id, serviceId, w
24740 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 2c 0d  hatIf, verbose,.
24750 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
24760 20 20 20 20 20 72 65 66 20 65 72 72 6f 72 29 3b       ref error);
24770 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
24780 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
24790 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
247a0 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
247b0 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  on....        //
247c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
247d0 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
24810 20 23 72 65 67 69 6f 6e 20 41 70 70 6c 69 63 61   #region Applica
24820 74 69 6f 6e 20 45 6e 74 72 79 20 50 6f 69 6e 74  tion Entry Point
24830 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
24840 65 20 73 74 61 74 69 63 20 69 6e 74 20 4d 61 69  e static int Mai
24850 6e 28 73 74 72 69 6e 67 5b 5d 20 61 72 67 73 29  n(string[] args)
24860 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
24870 20 20 20 20 20 20 20 20 20 43 6f 6e 66 69 67 75           Configu
24880 72 61 74 69 6f 6e 20 63 6f 6e 66 69 67 75 72 61  ration configura
24890 74 69 6f 6e 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20  tion = null;..  
248a0 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
248b0 20 65 72 72 6f 72 20 3d 20 6e 75 6c 6c 3b 0d 0a   error = null;..
248c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
248d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
248e0 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
24920 20 23 72 65 67 69 6f 6e 20 43 6f 6d 6d 61 6e 64   #region Command
24930 20 4c 69 6e 65 20 50 72 6f 63 65 73 73 69 6e 67   Line Processing
24940 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
24950 20 28 21 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e   (!Configuration
24960 2e 46 72 6f 6d 41 72 67 73 28 0d 0a 20 20 20 20  .FromArgs(..    
24970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24980 61 72 67 73 2c 20 74 72 75 65 2c 20 72 65 66 20  args, true, ref 
24990 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2c 20 72  configuration, r
249a0 65 66 20 65 72 72 6f 72 29 20 7c 7c 0d 0a 20 20  ef error) ||..  
249b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 21 43                !C
249c0 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 50 72 6f  onfiguration.Pro
249d0 63 65 73 73 28 0d 0a 20 20 20 20 20 20 20 20 20  cess(..         
249e0 20 20 20 20 20 20 20 20 20 20 20 61 72 67 73 2c             args,
249f0 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2c 20   configuration, 
24a00 74 72 75 65 2c 20 72 65 66 20 65 72 72 6f 72 29  true, ref error)
24a10 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
24a20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
24a30 20 20 54 72 61 63 65 4f 70 73 2e 53 68 6f 77 4d    TraceOps.ShowM
24a40 65 73 73 61 67 65 28 0d 0a 20 20 20 20 20 20 20  essage(..       
24a50 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
24a60 63 65 50 72 69 6f 72 69 74 79 2e 48 69 67 68 65  cePriority.Highe
24a70 73 74 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63  st, traceCallbac
24a80 6b 2c 20 74 68 69 73 41 73 73 65 6d 62 6c 79 2c  k, thisAssembly,
24a90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
24aa0 20 20 20 20 20 20 65 72 72 6f 72 2c 20 74 72 61        error, tra
24ab0 63 65 43 61 74 65 67 6f 72 79 2c 20 4d 65 73 73  ceCategory, Mess
24ac0 61 67 65 42 6f 78 42 75 74 74 6f 6e 73 2e 4f 4b  ageBoxButtons.OK
24ad0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
24ae0 20 20 20 20 20 20 20 4d 65 73 73 61 67 65 42 6f         MessageBo
24af0 78 49 63 6f 6e 2e 45 72 72 6f 72 29 3b 0d 0a 0d  xIcon.Error);...
24b00 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
24b10 20 72 65 74 75 72 6e 20 31 3b 0d 0a 20 20 20 20   return 1;..    
24b20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
24b30 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
24b40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a  ////////////....
24b80 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 69 74              Init
24b90 69 61 6c 69 7a 65 41 6c 6c 46 72 61 6d 65 77 6f  ializeAllFramewo
24ba0 72 6b 73 28 63 6f 6e 66 69 67 75 72 61 74 69 6f  rks(configuratio
24bb0 6e 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n);..           
24bc0 20 49 6e 69 74 69 61 6c 69 7a 65 41 6c 6c 56 73   InitializeAllVs
24bd0 56 65 72 73 69 6f 6e 73 28 63 6f 6e 66 69 67 75  Versions(configu
24be0 72 61 74 69 6f 6e 29 3b 0d 0a 20 20 20 20 20 20  ration);..      
24bf0 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
24c00 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
24c10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24c20 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
24c60 20 20 20 41 73 73 65 6d 62 6c 79 4e 61 6d 65 20     AssemblyName 
24c70 61 73 73 65 6d 62 6c 79 4e 61 6d 65 20 3d 20 41  assemblyName = A
24c80 73 73 65 6d 62 6c 79 4e 61 6d 65 2e 47 65 74 41  ssemblyName.GetA
24c90 73 73 65 6d 62 6c 79 4e 61 6d 65 28 0d 0a 20 20  ssemblyName(..  
24ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
24cb0 6e 66 69 67 75 72 61 74 69 6f 6e 2e 43 6f 72 65  nfiguration.Core
24cc0 46 69 6c 65 4e 61 6d 65 29 3b 20 2f 2a 20 74 68  FileName); /* th
24cd0 72 6f 77 20 2a 2f 0d 0a 0d 0a 20 20 20 20 20 20  row */....      
24ce0 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
24cf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20  /////////....   
24d30 20 20 20 20 20 20 20 20 20 41 6e 79 50 61 69 72           AnyPair
24d40 3c 73 74 72 69 6e 67 2c 20 62 6f 6f 6c 3e 20 64  <string, bool> d
24d50 69 72 65 63 74 6f 72 79 50 61 69 72 20 3d 20 6e  irectoryPair = n
24d60 65 77 20 41 6e 79 50 61 69 72 3c 73 74 72 69 6e  ew AnyPair<strin
24d70 67 2c 20 62 6f 6f 6c 3e 28 0d 0a 20 20 20 20 20  g, bool>(..     
24d80 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69             confi
24d90 67 75 72 61 74 69 6f 6e 2e 44 69 72 65 63 74 6f  guration.Directo
24da0 72 79 2c 20 63 6f 6e 66 69 67 75 72 61 74 69 6f  ry, configuratio
24db0 6e 2e 49 6e 73 74 61 6c 6c 29 3b 0d 0a 0d 0a 20  n.Install);.... 
24dc0 20 20 20 20 20 20 20 20 20 20 20 41 6e 79 50 61             AnyPa
24dd0 69 72 3c 73 74 72 69 6e 67 2c 20 62 6f 6f 6c 3e  ir<string, bool>
24de0 20 66 69 6c 65 4e 61 6d 65 50 61 69 72 20 3d 20   fileNamePair = 
24df0 6e 65 77 20 41 6e 79 50 61 69 72 3c 73 74 72 69  new AnyPair<stri
24e00 6e 67 2c 20 62 6f 6f 6c 3e 28 0d 0a 20 20 20 20  ng, bool>(..    
24e10 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66              conf
24e20 69 67 75 72 61 74 69 6f 6e 2e 44 65 73 69 67 6e  iguration.Design
24e30 65 72 46 69 6c 65 4e 61 6d 65 2c 20 63 6f 6e 66  erFileName, conf
24e40 69 67 75 72 61 74 69 6f 6e 2e 49 6e 73 74 61 6c  iguration.Instal
24e50 6c 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  l);....         
24e60 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
24e70 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
24eb0 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 2e 4e        #region .N
24ec0 45 54 20 47 41 43 20 49 6e 73 74 61 6c 6c 2f 52  ET GAC Install/R
24ed0 65 6d 6f 76 65 0d 0a 20 20 20 20 20 20 20 20 20  emove..         
24ee0 20 20 20 69 66 20 28 63 6f 6e 66 69 67 75 72 61     if (configura
24ef0 74 69 6f 6e 2e 48 61 73 46 6c 61 67 73 28 49 6e  tion.HasFlags(In
24f00 73 74 61 6c 6c 46 6c 61 67 73 2e 47 41 43 2c 20  stallFlags.GAC, 
24f10 74 72 75 65 29 29 0d 0a 20 20 20 20 20 20 20 20  true))..        
24f20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
24f30 20 20 20 20 20 20 20 50 75 62 6c 69 73 68 20 70         Publish p
24f40 75 62 6c 69 73 68 20 3d 20 6e 75 6c 6c 3b 0d 0a  ublish = null;..
24f50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
24f60 20 20 69 66 20 28 21 63 6f 6e 66 69 67 75 72 61    if (!configura
24f70 74 69 6f 6e 2e 57 68 61 74 49 66 29 0d 0a 20 20  tion.WhatIf)..  
24f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24f90 20 20 70 75 62 6c 69 73 68 20 3d 20 6e 65 77 20    publish = new 
24fa0 50 75 62 6c 69 73 68 28 29 3b 0d 0a 0d 0a 20 20  Publish();....  
24fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
24fc0 20 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e   (configuration.
24fd0 49 6e 73 74 61 6c 6c 29 0d 0a 20 20 20 20 20 20  Install)..      
24fe0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
24ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25000 20 69 66 20 28 21 63 6f 6e 66 69 67 75 72 61 74   if (!configurat
25010 69 6f 6e 2e 57 68 61 74 49 66 29 0d 0a 20 20 20  ion.WhatIf)..   
25020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25030 20 20 20 20 20 70 75 62 6c 69 73 68 2e 47 61 63       publish.Gac
25040 49 6e 73 74 61 6c 6c 28 63 6f 6e 66 69 67 75 72  Install(configur
25050 61 74 69 6f 6e 2e 43 6f 72 65 46 69 6c 65 4e 61  ation.CoreFileNa
25060 6d 65 29 3b 20 2f 2a 20 74 68 72 6f 77 20 2a 2f  me); /* throw */
25070 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
25080 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73          TraceOps
25090 2e 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20  .Trace(..       
250a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
250b0 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 48   TracePriority.H
250c0 69 67 68 65 73 74 2c 20 74 72 61 63 65 43 61 6c  ighest, traceCal
250d0 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f  lback, String.Fo
250e0 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
250f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
25100 47 61 63 49 6e 73 74 61 6c 6c 3a 20 61 73 73 65  GacInstall: asse
25110 6d 62 6c 79 50 61 74 68 20 3d 20 7b 30 7d 22 2c  mblyPath = {0}",
25120 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
25130 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73            ForDis
25140 70 6c 61 79 28 63 6f 6e 66 69 67 75 72 61 74 69  play(configurati
25150 6f 6e 2e 43 6f 72 65 46 69 6c 65 4e 61 6d 65 29  on.CoreFileName)
25160 29 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72 79  ), traceCategory
25170 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
25180 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21 63            if (!c
25190 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 57 68 61  onfiguration.Wha
251a0 74 49 66 29 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf)..          
251b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 75                pu
251c0 62 6c 69 73 68 2e 47 61 63 49 6e 73 74 61 6c 6c  blish.GacInstall
251d0 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 4c  (configuration.L
251e0 69 6e 71 46 69 6c 65 4e 61 6d 65 29 3b 20 2f 2a  inqFileName); /*
251f0 20 74 68 72 6f 77 20 2a 2f 0d 0a 0d 0a 20 20 20   throw */....   
25200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25210 20 54 72 61 63 65 4f 70 73 2e 54 72 61 63 65 28   TraceOps.Trace(
25220 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
25230 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 50            TraceP
25240 72 69 6f 72 69 74 79 2e 48 69 67 68 65 73 74 2c  riority.Highest,
25250 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20   traceCallback, 
25260 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
25270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25280 20 20 20 20 20 20 20 20 22 47 61 63 49 6e 73 74          "GacInst
25290 61 6c 6c 3a 20 61 73 73 65 6d 62 6c 79 50 61 74  all: assemblyPat
252a0 68 20 3d 20 7b 30 7d 22 2c 0d 0a 20 20 20 20 20  h = {0}",..     
252b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
252c0 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 63 6f     ForDisplay(co
252d0 6e 66 69 67 75 72 61 74 69 6f 6e 2e 4c 69 6e 71  nfiguration.Linq
252e0 46 69 6c 65 4e 61 6d 65 29 29 2c 20 74 72 61 63  FileName)), trac
252f0 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 20 20 20  eCategory);..   
25300 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
25310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25320 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20  else..          
25330 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
25340 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
25350 28 21 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e  (!configuration.
25360 57 68 61 74 49 66 29 0d 0a 20 20 20 20 20 20 20  WhatIf)..       
25370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25380 20 70 75 62 6c 69 73 68 2e 47 61 63 52 65 6d 6f   publish.GacRemo
25390 76 65 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  ve(configuration
253a0 2e 4c 69 6e 71 46 69 6c 65 4e 61 6d 65 29 3b 20  .LinqFileName); 
253b0 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 0d 0a 20  /* throw */.... 
253c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
253d0 20 20 20 54 72 61 63 65 4f 70 73 2e 54 72 61 63     TraceOps.Trac
253e0 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
253f0 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
25400 65 50 72 69 6f 72 69 74 79 2e 48 69 67 68 65 73  ePriority.Highes
25410 74 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b  t, traceCallback
25420 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  , String.Format(
25430 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
25440 20 20 20 20 20 20 20 20 20 20 22 47 61 63 52 65            "GacRe
25450 6d 6f 76 65 3a 20 61 73 73 65 6d 62 6c 79 50 61  move: assemblyPa
25460 74 68 20 3d 20 7b 30 7d 22 2c 0d 0a 20 20 20 20  th = {0}",..    
25470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25480 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 63      ForDisplay(c
25490 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 4c 69 6e  onfiguration.Lin
254a0 71 46 69 6c 65 4e 61 6d 65 29 29 2c 20 74 72 61  qFileName)), tra
254b0 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
254c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
254d0 20 20 20 20 69 66 20 28 21 63 6f 6e 66 69 67 75      if (!configu
254e0 72 61 74 69 6f 6e 2e 57 68 61 74 49 66 29 0d 0a  ration.WhatIf)..
254f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25500 20 20 20 20 20 20 20 20 70 75 62 6c 69 73 68 2e          publish.
25510 47 61 63 52 65 6d 6f 76 65 28 63 6f 6e 66 69 67  GacRemove(config
25520 75 72 61 74 69 6f 6e 2e 43 6f 72 65 46 69 6c 65  uration.CoreFile
25530 4e 61 6d 65 29 3b 20 2f 2a 20 74 68 72 6f 77 20  Name); /* throw 
25540 2a 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  */....          
25550 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f            TraceO
25560 70 73 2e 54 72 61 63 65 28 0d 0a 20 20 20 20 20  ps.Trace(..     
25570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25580 20 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79     TracePriority
25590 2e 48 69 67 68 65 73 74 2c 20 74 72 61 63 65 43  .Highest, traceC
255a0 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e  allback, String.
255b0 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
255c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
255d0 20 22 47 61 63 52 65 6d 6f 76 65 3a 20 61 73 73   "GacRemove: ass
255e0 65 6d 62 6c 79 50 61 74 68 20 3d 20 7b 30 7d 22  emblyPath = {0}"
255f0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
25600 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69             ForDi
25610 73 70 6c 61 79 28 63 6f 6e 66 69 67 75 72 61 74  splay(configurat
25620 69 6f 6e 2e 43 6f 72 65 46 69 6c 65 4e 61 6d 65  ion.CoreFileName
25630 29 29 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72  )), traceCategor
25640 79 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  y);..           
25650 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
25660 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
25670 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
25680 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
25690 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
256a0 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
256e0 23 72 65 67 69 6f 6e 20 2e 4e 45 54 20 41 73 73  #region .NET Ass
256f0 65 6d 62 6c 79 46 6f 6c 64 65 72 73 0d 0a 20 20  emblyFolders..  
25700 20 20 20 20 20 20 20 20 20 20 69 66 20 28 63 6f            if (co
25710 6e 66 69 67 75 72 61 74 69 6f 6e 2e 48 61 73 46  nfiguration.HasF
25720 6c 61 67 73 28 49 6e 73 74 61 6c 6c 46 6c 61 67  lags(InstallFlag
25730 73 2e 41 73 73 65 6d 62 6c 79 46 6f 6c 64 65 72  s.AssemblyFolder
25740 73 2c 20 74 72 75 65 29 29 0d 0a 20 20 20 20 20  s, true))..     
25750 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
25760 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21 46            if (!F
25770 6f 72 45 61 63 68 46 72 61 6d 65 77 6f 72 6b 52  orEachFrameworkR
25780 65 67 69 73 74 72 79 28 50 72 6f 63 65 73 73 41  egistry(ProcessA
25790 73 73 65 6d 62 6c 79 46 6f 6c 64 65 72 73 2c 0d  ssemblyFolders,.
257a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
257b0 20 20 20 20 20 20 20 20 20 64 69 72 65 63 74 6f           directo
257c0 72 79 50 61 69 72 2c 20 63 6f 6e 66 69 67 75 72  ryPair, configur
257d0 61 74 69 6f 6e 2e 57 68 61 74 49 66 2c 0d 0a 20  ation.WhatIf,.. 
257e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
257f0 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61         configura
25800 74 69 6f 6e 2e 56 65 72 62 6f 73 65 2c 20 72 65  tion.Verbose, re
25810 66 20 65 72 72 6f 72 29 29 0d 0a 20 20 20 20 20  f error))..     
25820 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
25830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25840 20 20 54 72 61 63 65 4f 70 73 2e 53 68 6f 77 4d    TraceOps.ShowM
25850 65 73 73 61 67 65 28 0d 0a 20 20 20 20 20 20 20  essage(..       
25860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25870 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 48   TracePriority.H
25880 69 67 68 65 73 74 2c 20 74 72 61 63 65 43 61 6c  ighest, traceCal
25890 6c 62 61 63 6b 2c 20 6e 75 6c 6c 2c 0d 0a 20 20  lback, null,..  
258a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
258b0 20 20 20 20 20 20 65 72 72 6f 72 2c 20 74 72 61        error, tra
258c0 63 65 43 61 74 65 67 6f 72 79 2c 20 4d 65 73 73  ceCategory, Mess
258d0 61 67 65 42 6f 78 42 75 74 74 6f 6e 73 2e 4f 4b  ageBoxButtons.OK
258e0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
258f0 20 20 20 20 20 20 20 20 20 20 20 4d 65 73 73 61             Messa
25900 67 65 42 6f 78 49 63 6f 6e 2e 45 72 72 6f 72 29  geBoxIcon.Error)
25910 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
25920 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
25930 31 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  1;..            
25940 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
25950 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
25960 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
25970 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
25980 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25990 2f 2f 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 0d  ///////////////.
259c0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  ...            #
259d0 72 65 67 69 6f 6e 20 2e 4e 45 54 20 44 62 50 72  region .NET DbPr
259e0 6f 76 69 64 65 72 46 61 63 74 6f 72 79 0d 0a 20  oviderFactory.. 
259f0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 63             if (c
25a00 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 48 61 73  onfiguration.Has
25a10 46 6c 61 67 73 28 49 6e 73 74 61 6c 6c 46 6c 61  Flags(InstallFla
25a20 67 73 2e 44 62 50 72 6f 76 69 64 65 72 46 61 63  gs.DbProviderFac
25a30 74 6f 72 79 2c 20 74 72 75 65 29 29 0d 0a 20 20  tory, true))..  
25a40 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
25a50 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
25a60 6c 20 73 61 76 65 64 20 3d 20 66 61 6c 73 65 3b  l saved = false;
25a70 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
25a80 20 20 20 20 69 66 20 28 21 46 6f 72 45 61 63 68      if (!ForEach
25a90 46 72 61 6d 65 77 6f 72 6b 43 6f 6e 66 69 67 28  FrameworkConfig(
25aa0 50 72 6f 63 65 73 73 44 62 50 72 6f 76 69 64 65  ProcessDbProvide
25ab0 72 46 61 63 74 6f 72 79 2c 0d 0a 20 20 20 20 20  rFactory,..     
25ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25ad0 20 20 20 49 6e 76 61 72 69 61 6e 74 4e 61 6d 65     InvariantName
25ae0 2c 20 50 72 6f 76 69 64 65 72 4e 61 6d 65 2c 20  , ProviderName, 
25af0 44 65 73 63 72 69 70 74 69 6f 6e 2c 0d 0a 20 20  Description,..  
25b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25b10 20 20 20 20 20 20 46 61 63 74 6f 72 79 54 79 70        FactoryTyp
25b20 65 4e 61 6d 65 2c 20 61 73 73 65 6d 62 6c 79 4e  eName, assemblyN
25b30 61 6d 65 2c 20 64 69 72 65 63 74 6f 72 79 50 61  ame, directoryPa
25b40 69 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ir,..           
25b50 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
25b60 66 69 67 75 72 61 74 69 6f 6e 2e 57 68 61 74 49  figuration.WhatI
25b70 66 2c 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  f, configuration
25b80 2e 56 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20  .Verbose,..     
25b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25ba0 20 20 20 72 65 66 20 73 61 76 65 64 2c 20 72 65     ref saved, re
25bb0 66 20 65 72 72 6f 72 29 29 0d 0a 20 20 20 20 20  f error))..     
25bc0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
25bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25be0 20 20 54 72 61 63 65 4f 70 73 2e 53 68 6f 77 4d    TraceOps.ShowM
25bf0 65 73 73 61 67 65 28 0d 0a 20 20 20 20 20 20 20  essage(..       
25c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25c10 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 48   TracePriority.H
25c20 69 67 68 65 73 74 2c 20 74 72 61 63 65 43 61 6c  ighest, traceCal
25c30 6c 62 61 63 6b 2c 20 6e 75 6c 6c 2c 0d 0a 20 20  lback, null,..  
25c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25c50 20 20 20 20 20 20 65 72 72 6f 72 2c 20 74 72 61        error, tra
25c60 63 65 43 61 74 65 67 6f 72 79 2c 20 4d 65 73 73  ceCategory, Mess
25c70 61 67 65 42 6f 78 42 75 74 74 6f 6e 73 2e 4f 4b  ageBoxButtons.OK
25c80 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
25c90 20 20 20 20 20 20 20 20 20 20 20 4d 65 73 73 61             Messa
25ca0 67 65 42 6f 78 49 63 6f 6e 2e 45 72 72 6f 72 29  geBoxIcon.Error)
25cb0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
25cc0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
25cd0 31 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  1;..            
25ce0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
25cf0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
25d00 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
25d10 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
25d20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25d30 2f 2f 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 0d  ///////////////.
25d60 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  ...            #
25d70 72 65 67 69 6f 6e 20 56 53 20 50 61 63 6b 61 67  region VS Packag
25d80 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  e..            i
25d90 66 20 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  f (configuration
25da0 2e 48 61 73 46 6c 61 67 73 28 49 6e 73 74 61 6c  .HasFlags(Instal
25db0 6c 46 6c 61 67 73 2e 56 73 50 61 63 6b 61 67 65  lFlags.VsPackage
25dc0 2c 20 74 72 75 65 29 29 0d 0a 20 20 20 20 20 20  , true))..      
25dd0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
25de0 20 20 20 20 20 20 20 20 20 69 66 20 28 21 46 6f           if (!Fo
25df0 72 45 61 63 68 56 73 56 65 72 73 69 6f 6e 52 65  rEachVsVersionRe
25e00 67 69 73 74 72 79 28 50 72 6f 63 65 73 73 56 73  gistry(ProcessVs
25e10 50 61 63 6b 61 67 65 2c 0d 0a 20 20 20 20 20 20  Package,..      
25e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25e30 20 20 28 47 75 69 64 29 76 73 50 61 63 6b 61 67    (Guid)vsPackag
25e40 65 49 64 2c 20 28 47 75 69 64 29 76 73 53 65 72  eId, (Guid)vsSer
25e50 76 69 63 65 49 64 2c 0d 0a 20 20 20 20 20 20 20  viceId,..       
25e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25e70 20 28 47 75 69 64 29 76 73 44 61 74 61 53 6f 75   (Guid)vsDataSou
25e80 72 63 65 73 49 64 2c 20 28 47 75 69 64 29 76 73  rcesId, (Guid)vs
25e90 44 61 74 61 50 72 6f 76 69 64 65 72 49 64 2c 0d  DataProviderId,.
25ea0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
25eb0 20 20 20 20 20 20 20 20 20 66 69 6c 65 4e 61 6d           fileNam
25ec0 65 50 61 69 72 2c 20 63 6f 6e 66 69 67 75 72 61  ePair, configura
25ed0 74 69 6f 6e 2e 57 68 61 74 49 66 2c 0d 0a 20 20  tion.WhatIf,..  
25ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25ef0 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74        configurat
25f00 69 6f 6e 2e 56 65 72 62 6f 73 65 2c 20 72 65 66  ion.Verbose, ref
25f10 20 65 72 72 6f 72 29 29 0d 0a 20 20 20 20 20 20   error))..      
25f20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
25f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25f40 20 54 72 61 63 65 4f 70 73 2e 53 68 6f 77 4d 65   TraceOps.ShowMe
25f50 73 73 61 67 65 28 0d 0a 20 20 20 20 20 20 20 20  ssage(..        
25f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25f70 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 48 69  TracePriority.Hi
25f80 67 68 65 73 74 2c 20 74 72 61 63 65 43 61 6c 6c  ghest, traceCall
25f90 62 61 63 6b 2c 20 6e 75 6c 6c 2c 0d 0a 20 20 20  back, null,..   
25fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25fb0 20 20 20 20 20 65 72 72 6f 72 2c 20 74 72 61 63       error, trac
25fc0 65 43 61 74 65 67 6f 72 79 2c 20 4d 65 73 73 61  eCategory, Messa
25fd0 67 65 42 6f 78 42 75 74 74 6f 6e 73 2e 4f 4b 2c  geBoxButtons.OK,
25fe0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
25ff0 20 20 20 20 20 20 20 20 20 20 4d 65 73 73 61 67            Messag
26000 65 42 6f 78 49 63 6f 6e 2e 45 72 72 6f 72 29 3b  eBoxIcon.Error);
26010 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
26020 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 31          return 1
26030 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
26040 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
26050 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
26060 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
26070 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
26080 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26090 2f 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 0d 0a  //////////////..
260c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 72  ..            #r
260d0 65 67 69 6f 6e 20 56 53 20 44 61 74 61 53 6f 75  egion VS DataSou
260e0 72 63 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  rce..           
260f0 20 69 66 20 28 63 6f 6e 66 69 67 75 72 61 74 69   if (configurati
26100 6f 6e 2e 48 61 73 46 6c 61 67 73 28 49 6e 73 74  on.HasFlags(Inst
26110 61 6c 6c 46 6c 61 67 73 2e 56 73 44 61 74 61 53  allFlags.VsDataS
26120 6f 75 72 63 65 2c 20 74 72 75 65 29 29 0d 0a 20  ource, true)).. 
26130 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
26140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
26150 20 28 21 46 6f 72 45 61 63 68 56 73 56 65 72 73   (!ForEachVsVers
26160 69 6f 6e 52 65 67 69 73 74 72 79 28 50 72 6f 63  ionRegistry(Proc
26170 65 73 73 56 73 44 61 74 61 53 6f 75 72 63 65 2c  essVsDataSource,
26180 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
26190 20 20 20 20 20 20 20 20 20 20 28 47 75 69 64 29            (Guid)
261a0 76 73 50 61 63 6b 61 67 65 49 64 2c 20 28 47 75  vsPackageId, (Gu
261b0 69 64 29 76 73 53 65 72 76 69 63 65 49 64 2c 0d  id)vsServiceId,.
261c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
261d0 20 20 20 20 20 20 20 20 20 28 47 75 69 64 29 76           (Guid)v
261e0 73 44 61 74 61 53 6f 75 72 63 65 73 49 64 2c 20  sDataSourcesId, 
261f0 28 47 75 69 64 29 76 73 44 61 74 61 50 72 6f 76  (Guid)vsDataProv
26200 69 64 65 72 49 64 2c 0d 0a 20 20 20 20 20 20 20  iderId,..       
26210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26220 20 66 69 6c 65 4e 61 6d 65 50 61 69 72 2c 20 63   fileNamePair, c
26230 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 57 68 61  onfiguration.Wha
26240 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf,..          
26250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
26260 6e 66 69 67 75 72 61 74 69 6f 6e 2e 56 65 72 62  nfiguration.Verb
26270 6f 73 65 2c 20 72 65 66 20 65 72 72 6f 72 29 29  ose, ref error))
26280 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
26290 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
262a0 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70           TraceOp
262b0 73 2e 53 68 6f 77 4d 65 73 73 61 67 65 28 0d 0a  s.ShowMessage(..
262c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
262d0 20 20 20 20 20 20 20 20 54 72 61 63 65 50 72 69          TracePri
262e0 6f 72 69 74 79 2e 48 69 67 68 65 73 74 2c 20 74  ority.Highest, t
262f0 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 6e 75  raceCallback, nu
26300 6c 6c 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll,..           
26310 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
26320 6f 72 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72  or, traceCategor
26330 79 2c 20 4d 65 73 73 61 67 65 42 6f 78 42 75 74  y, MessageBoxBut
26340 74 6f 6e 73 2e 4f 4b 2c 0d 0a 20 20 20 20 20 20  tons.OK,..      
26350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26360 20 20 4d 65 73 73 61 67 65 42 6f 78 49 63 6f 6e    MessageBoxIcon
26370 2e 45 72 72 6f 72 29 3b 0d 0a 0d 0a 20 20 20 20  .Error);....    
26380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26390 72 65 74 75 72 6e 20 31 3b 0d 0a 20 20 20 20 20  return 1;..     
263a0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
263b0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
263c0 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67           #endreg
263d0 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ion....         
263e0 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
263f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
26430 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 56 53        #region VS
26440 20 44 61 74 61 50 72 6f 76 69 64 65 72 0d 0a 20   DataProvider.. 
26450 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 63             if (c
26460 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 48 61 73  onfiguration.Has
26470 46 6c 61 67 73 28 49 6e 73 74 61 6c 6c 46 6c 61  Flags(InstallFla
26480 67 73 2e 56 73 44 61 74 61 50 72 6f 76 69 64 65  gs.VsDataProvide
26490 72 2c 20 74 72 75 65 29 29 0d 0a 20 20 20 20 20  r, true))..     
264a0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
264b0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21 46            if (!F
264c0 6f 72 45 61 63 68 56 73 56 65 72 73 69 6f 6e 52  orEachVsVersionR
264d0 65 67 69 73 74 72 79 28 50 72 6f 63 65 73 73 56  egistry(ProcessV
264e0 73 44 61 74 61 50 72 6f 76 69 64 65 72 2c 0d 0a  sDataProvider,..
264f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26500 20 20 20 20 20 20 20 20 28 47 75 69 64 29 76 73          (Guid)vs
26510 50 61 63 6b 61 67 65 49 64 2c 20 28 47 75 69 64  PackageId, (Guid
26520 29 76 73 53 65 72 76 69 63 65 49 64 2c 0d 0a 20  )vsServiceId,.. 
26530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26540 20 20 20 20 20 20 20 28 47 75 69 64 29 76 73 44         (Guid)vsD
26550 61 74 61 53 6f 75 72 63 65 73 49 64 2c 20 28 47  ataSourcesId, (G
26560 75 69 64 29 76 73 44 61 74 61 50 72 6f 76 69 64  uid)vsDataProvid
26570 65 72 49 64 2c 0d 0a 20 20 20 20 20 20 20 20 20  erId,..         
26580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66                 f
26590 69 6c 65 4e 61 6d 65 50 61 69 72 2c 20 63 6f 6e  ileNamePair, con
265a0 66 69 67 75 72 61 74 69 6f 6e 2e 57 68 61 74 49  figuration.WhatI
265b0 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f,..            
265c0 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66              conf
265d0 69 67 75 72 61 74 69 6f 6e 2e 56 65 72 62 6f 73  iguration.Verbos
265e0 65 2c 20 72 65 66 20 65 72 72 6f 72 29 29 0d 0a  e, ref error))..
265f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26600 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
26610 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e         TraceOps.
26620 53 68 6f 77 4d 65 73 73 61 67 65 28 0d 0a 20 20  ShowMessage(..  
26630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26640 20 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72        TracePrior
26650 69 74 79 2e 48 69 67 68 65 73 74 2c 20 74 72 61  ity.Highest, tra
26660 63 65 43 61 6c 6c 62 61 63 6b 2c 20 6e 75 6c 6c  ceCallback, null
26670 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
26680 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
26690 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 2c  , traceCategory,
266a0 20 4d 65 73 73 61 67 65 42 6f 78 42 75 74 74 6f   MessageBoxButto
266b0 6e 73 2e 4f 4b 2c 0d 0a 20 20 20 20 20 20 20 20  ns.OK,..        
266c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
266d0 4d 65 73 73 61 67 65 42 6f 78 49 63 6f 6e 2e 45  MessageBoxIcon.E
266e0 72 72 6f 72 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  rror);....      
266f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
26700 74 75 72 6e 20 31 3b 0d 0a 20 20 20 20 20 20 20  turn 1;..       
26710 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
26720 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
26730 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
26740 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n....           
26750 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
26760 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
267a0 20 20 20 20 54 72 61 63 65 4f 70 73 2e 54 72 61      TraceOps.Tra
267b0 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ce(..           
267c0 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69       TracePriori
267d0 74 79 2e 48 69 67 68 65 72 2c 20 74 72 61 63 65  ty.Higher, trace
267e0 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67  Callback, String
267f0 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
26800 20 20 20 20 20 20 20 20 20 20 22 73 75 62 4b 65            "subKe
26810 79 73 43 72 65 61 74 65 64 20 3d 20 7b 30 7d 2c  ysCreated = {0},
26820 20 73 75 62 4b 65 79 73 44 65 6c 65 74 65 64 20   subKeysDeleted 
26830 3d 20 7b 31 7d 2c 20 22 20 2b 0d 0a 20 20 20 20  = {1}, " +..    
26840 20 20 20 20 20 20 20 20 20 20 20 20 22 6b 65 79              "key
26850 56 61 6c 75 65 73 53 65 74 20 3d 20 7b 32 7d 2c  ValuesSet = {2},
26860 20 6b 65 79 56 61 6c 75 65 73 44 65 6c 65 74 65   keyValuesDelete
26870 64 20 3d 20 7b 33 7d 22 2c 0d 0a 20 20 20 20 20  d = {3}",..     
26880 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69             ForDi
26890 73 70 6c 61 79 28 52 65 67 69 73 74 72 79 48 65  splay(RegistryHe
268a0 6c 70 65 72 2e 53 75 62 4b 65 79 73 43 72 65 61  lper.SubKeysCrea
268b0 74 65 64 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  ted),..         
268c0 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61         ForDispla
268d0 79 28 52 65 67 69 73 74 72 79 48 65 6c 70 65 72  y(RegistryHelper
268e0 2e 53 75 62 4b 65 79 73 44 65 6c 65 74 65 64 29  .SubKeysDeleted)
268f0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
26900 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 52 65     ForDisplay(Re
26910 67 69 73 74 72 79 48 65 6c 70 65 72 2e 4b 65 79  gistryHelper.Key
26920 56 61 6c 75 65 73 53 65 74 29 2c 0d 0a 20 20 20  ValuesSet),..   
26930 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72               For
26940 44 69 73 70 6c 61 79 28 52 65 67 69 73 74 72 79  Display(Registry
26950 48 65 6c 70 65 72 2e 4b 65 79 56 61 6c 75 65 73  Helper.KeyValues
26960 44 65 6c 65 74 65 64 29 29 2c 0d 0a 20 20 20 20  Deleted)),..    
26970 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
26980 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
26990 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
269a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
269b0 2f 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 0d 0a  //////////////..
269e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
269f0 74 75 72 6e 20 30 3b 0d 0a 20 20 20 20 20 20 20  turn 0;..       
26a00 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64   }..        #end
26a10 72 65 67 69 6f 6e 0d 0a 20 20 20 20 7d 0d 0a 20  region..    }.. 
26a20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 7d     #endregion..}
26a30 0d 0a                                            ..