System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact 5e9ad12f73c852e9cd13344d7399f574d7d3f379:


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 5c 22 7b  er choice of \"{
1ea0: 30 7d 5c 22 2e 22 2c 20 72 65 73 75 6c 74 29 2c  0}\".", result),
1eb0: 20 63 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20   category);.... 
1ec0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ed0: 20 20 20 72 65 74 75 72 6e 20 72 65 73 75 6c 74     return result
1ee0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
1ef0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
1f00: 20 20 20 20 20 20 20 20 54 72 61 63 65 28 74 72          Trace(tr
1f10: 61 63 65 50 72 69 6f 72 69 74 79 2c 20 74 72 61  acePriority, tra
1f20: 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69  ceCallback, Stri
1f30: 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
1f40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f50: 22 44 65 66 61 75 6c 74 20 63 68 6f 69 63 65 20  "Default choice 
1f60: 6f 66 20 5c 22 7b 30 7d 5c 22 2e 22 2c 20 72 65  of \"{0}\".", re
1f70: 73 75 6c 74 29 2c 20 63 61 74 65 67 6f 72 79 29  sult), category)
1f80: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
1f90: 20 20 20 20 20 72 65 74 75 72 6e 20 72 65 73 75       return resu
1fa0: 6c 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  lt;..           
1fb0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
1fc0: 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
1fd0: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
1fe0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ff0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2000: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2010: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
2020: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65  .            #re
2030: 67 69 6f 6e 20 54 72 61 63 69 6e 67 20 53 75 70  gion Tracing Sup
2040: 70 6f 72 74 20 4d 65 74 68 6f 64 73 0d 0a 20 20  port Methods..  
2050: 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
2060: 20 73 74 61 74 69 63 20 6c 6f 6e 67 20 4e 65 78   static long Nex
2070: 74 49 64 28 29 0d 0a 20 20 20 20 20 20 20 20 20  tId()..         
2080: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
2090: 20 20 20 20 20 20 72 65 74 75 72 6e 20 49 6e 74        return Int
20a0: 65 72 6c 6f 63 6b 65 64 2e 49 6e 63 72 65 6d 65  erlocked.Increme
20b0: 6e 74 28 72 65 66 20 6e 65 78 74 49 64 29 3b 0d  nt(ref nextId);.
20c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
20d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
20e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2100: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2110: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2120: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
2130: 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 73   public static s
2140: 74 72 69 6e 67 20 54 69 6d 65 53 74 61 6d 70 28  tring TimeStamp(
2150: 44 61 74 65 54 69 6d 65 20 64 61 74 65 54 69 6d  DateTime dateTim
2160: 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e)..            
2170: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
2180: 20 20 20 72 65 74 75 72 6e 20 64 61 74 65 54 69     return dateTi
2190: 6d 65 2e 54 6f 53 74 72 69 6e 67 28 49 73 6f 38  me.ToString(Iso8
21a0: 36 30 31 44 61 74 65 54 69 6d 65 4f 75 74 70 75  601DateTimeOutpu
21b0: 74 46 6f 72 6d 61 74 29 3b 0d 0a 20 20 20 20 20  tFormat);..     
21c0: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
21d0: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
21e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2200: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2210: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
2220: 20 20 20 20 20 20 20 20 20 20 20 5b 4d 65 74 68             [Meth
2230: 6f 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49 6d 70  odImpl(MethodImp
2240: 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e  lOptions.NoInlin
2250: 69 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20 20 20  ing)]..         
2260: 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
2270: 63 20 73 74 72 69 6e 67 20 47 65 74 4d 65 74 68  c string GetMeth
2280: 6f 64 4e 61 6d 65 28 0d 0a 20 20 20 20 20 20 20  odName(..       
2290: 20 20 20 20 20 20 20 20 20 53 74 61 63 6b 54 72           StackTr
22a0: 61 63 65 20 73 74 61 63 6b 54 72 61 63 65 2c 0d  ace stackTrace,.
22b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
22c0: 20 69 6e 74 20 6c 65 76 65 6c 0d 0a 20 20 20 20   int level..    
22d0: 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
22e0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
22f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
2300: 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  y..             
2310: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
2320: 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
2330: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2340: 20 20 2f 2f 20 4e 4f 54 45 3a 20 49 66 20 61 20    // NOTE: If a 
2350: 76 61 6c 69 64 20 73 74 61 63 6b 20 74 72 61 63  valid stack trac
2360: 65 20 77 61 73 20 6e 6f 74 20 73 75 70 70 6c 69  e was not suppli
2370: 65 64 20 62 79 20 74 68 65 0d 0a 20 20 20 20 20  ed by the..     
2380: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
2390: 2f 20 20 20 20 20 20 20 63 61 6c 6c 65 72 2c 20  /       caller, 
23a0: 63 72 65 61 74 65 20 6f 6e 65 20 6e 6f 77 20 62  create one now b
23b0: 61 73 65 64 20 6f 6e 20 74 68 65 20 63 75 72 72  ased on the curr
23c0: 65 6e 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ent..           
23d0: 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
23e0: 20 20 65 78 65 63 75 74 69 6f 6e 20 73 74 61 63    execution stac
23f0: 6b 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  k...            
2400: 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
2410: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2420: 69 66 20 28 73 74 61 63 6b 54 72 61 63 65 20 3d  if (stackTrace =
2430: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
2440: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
2450: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2460: 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
2470: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2480: 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 47 72 61      // NOTE: Gra
2490: 62 20 74 68 65 20 63 75 72 72 65 6e 74 20 65 78  b the current ex
24a0: 65 63 75 74 69 6f 6e 20 73 74 61 63 6b 2e 0d 0a  ecution stack...
24b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24c0: 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
24d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24e0: 20 20 20 20 73 74 61 63 6b 54 72 61 63 65 20 3d      stackTrace =
24f0: 20 6e 65 77 20 53 74 61 63 6b 54 72 61 63 65 28   new StackTrace(
2500: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
2510: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
2520: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2530: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54            // NOT
2540: 45 3a 20 41 6c 77 61 79 73 20 73 6b 69 70 20 74  E: Always skip t
2550: 68 69 73 20 63 61 6c 6c 20 66 72 61 6d 65 20 77  his call frame w
2560: 68 65 6e 20 77 65 20 63 61 70 74 75 72 65 0d 0a  hen we capture..
2570: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2580: 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
2590: 20 74 68 65 20 73 74 61 63 6b 20 74 72 61 63 65   the stack trace
25a0: 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
25b0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
25c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25d0: 20 20 20 20 20 20 20 6c 65 76 65 6c 2b 2b 3b 0d         level++;.
25e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
25f0: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
2600: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
2610: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2620: 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 47        // NOTE: G
2630: 65 74 20 74 68 65 20 73 70 65 63 69 66 69 65 64  et the specified
2640: 20 73 74 61 63 6b 20 66 72 61 6d 65 20 28 61 6c   stack frame (al
2650: 77 61 79 73 20 61 64 64 20 6f 6e 65 20 74 6f 0d  ways add one to.
2660: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2670: 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 73 6b       //       sk
2680: 69 70 20 74 68 69 73 20 6d 65 74 68 6f 64 29 2e  ip this method).
2690: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
26a0: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
26b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 74                St
26c0: 61 63 6b 46 72 61 6d 65 20 73 74 61 63 6b 46 72  ackFrame stackFr
26d0: 61 6d 65 20 3d 20 73 74 61 63 6b 54 72 61 63 65  ame = stackTrace
26e0: 2e 47 65 74 46 72 61 6d 65 28 6c 65 76 65 6c 29  .GetFrame(level)
26f0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
2700: 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
2710: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2720: 20 2f 2f 20 4e 4f 54 45 3a 20 47 65 74 20 74 68   // NOTE: Get th
2730: 65 20 6d 65 74 68 6f 64 20 66 6f 72 20 74 68 65  e method for the
2740: 20 73 74 61 63 6b 20 66 72 61 6d 65 2e 0d 0a 20   stack frame... 
2750: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2760: 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
2770: 20 20 20 20 20 20 20 20 20 20 20 4d 65 74 68 6f             Metho
2780: 64 42 61 73 65 20 6d 65 74 68 6f 64 42 61 73 65  dBase methodBase
2790: 20 3d 20 73 74 61 63 6b 46 72 61 6d 65 2e 47 65   = stackFrame.Ge
27a0: 74 4d 65 74 68 6f 64 28 29 3b 0d 0a 0d 0a 20 20  tMethod();....  
27b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27c0: 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
27d0: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54            // NOT
27e0: 45 3a 20 47 65 74 20 74 68 65 20 74 79 70 65 20  E: Get the type 
27f0: 66 6f 72 20 74 68 65 20 6d 65 74 68 6f 64 2e 0d  for the method..
2800: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2810: 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
2820: 20 20 20 20 20 20 20 20 20 20 20 20 20 54 79 70               Typ
2830: 65 20 74 79 70 65 20 3d 20 6d 65 74 68 6f 64 42  e type = methodB
2840: 61 73 65 2e 44 65 63 6c 61 72 69 6e 67 54 79 70  ase.DeclaringTyp
2850: 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
2860: 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
2870: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2880: 20 20 2f 2f 20 4e 4f 54 45 3a 20 47 65 74 20 74    // NOTE: Get t
2890: 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 6d  he name of the m
28a0: 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20  ethod...        
28b0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
28c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28d0: 20 20 20 20 73 74 72 69 6e 67 20 6e 61 6d 65 20      string name 
28e0: 3d 20 6d 65 74 68 6f 64 42 61 73 65 2e 4e 61 6d  = methodBase.Nam
28f0: 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
2900: 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
2910: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2920: 20 20 2f 2f 20 4e 4f 54 45 3a 20 52 65 74 75 72    // NOTE: Retur
2930: 6e 20 74 68 65 20 70 72 6f 70 65 72 6c 79 20 66  n the properly f
2940: 6f 72 6d 61 74 74 65 64 20 72 65 73 75 6c 74 2e  ormatted result.
2950: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2960: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
2970: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
2980: 74 75 72 6e 20 53 74 72 69 6e 67 2e 46 6f 72 6d  turn String.Form
2990: 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
29a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 22 7b 30               "{0
29b0: 7d 7b 31 7d 7b 32 7d 22 2c 20 74 79 70 65 2e 4e  }{1}{2}", type.N
29c0: 61 6d 65 2c 20 54 79 70 65 2e 44 65 6c 69 6d 69  ame, Type.Delimi
29d0: 74 65 72 2c 20 6e 61 6d 65 29 3b 0d 0a 20 20 20  ter, name);..   
29e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
29f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a00: 63 61 74 63 68 0d 0a 20 20 20 20 20 20 20 20 20  catch..         
2a10: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
2a20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
2a30: 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20   do nothing...  
2a40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
2a50: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
2a60: 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d     return null;.
2a70: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
2a80: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2a90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2aa0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ab0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ac0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ad0: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
2ae0: 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 76   public static v
2af0: 6f 69 64 20 54 72 61 63 65 43 6f 72 65 28 0d 0a  oid TraceCore(..
2b00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b10: 73 74 72 69 6e 67 20 6d 65 73 73 61 67 65 2c 0d  string message,.
2b20: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2b30: 20 73 74 72 69 6e 67 20 63 61 74 65 67 6f 72 79   string category
2b40: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2b50: 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20    )..           
2b60: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
2b70: 20 20 20 20 6c 6f 63 6b 20 28 73 79 6e 63 52 6f      lock (syncRo
2b80: 6f 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ot)..           
2b90: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2ba0: 20 20 20 20 20 20 20 20 20 20 20 20 53 79 73 74              Syst
2bb0: 65 6d 2e 44 69 61 67 6e 6f 73 74 69 63 73 2e 54  em.Diagnostics.T
2bc0: 72 61 63 65 2e 57 72 69 74 65 4c 69 6e 65 28 6d  race.WriteLine(m
2bd0: 65 73 73 61 67 65 2c 20 63 61 74 65 67 6f 72 79  essage, category
2be0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
2bf0: 20 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44          System.D
2c00: 69 61 67 6e 6f 73 74 69 63 73 2e 54 72 61 63 65  iagnostics.Trace
2c10: 2e 46 6c 75 73 68 28 29 3b 0d 0a 20 20 20 20 20  .Flush();..     
2c20: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
2c30: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
2c40: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
2c50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
2c90: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 4d  ..            [M
2ca0: 65 74 68 6f 64 49 6d 70 6c 28 4d 65 74 68 6f 64  ethodImpl(Method
2cb0: 49 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e  ImplOptions.NoIn
2cc0: 6c 69 6e 69 6e 67 29 5d 0d 0a 20 20 20 20 20 20  lining)]..      
2cd0: 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61        public sta
2ce0: 74 69 63 20 73 74 72 69 6e 67 20 54 72 61 63 65  tic string Trace
2cf0: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
2d00: 20 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79     TracePriority
2d10: 20 74 72 61 63 65 50 72 69 6f 72 69 74 79 2c 0d   tracePriority,.
2d20: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2d30: 20 54 72 61 63 65 43 61 6c 6c 62 61 63 6b 20 74   TraceCallback t
2d40: 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20  raceCallback,.. 
2d50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 45                 E
2d60: 78 63 65 70 74 69 6f 6e 20 65 78 63 65 70 74 69  xception excepti
2d70: 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on,..           
2d80: 20 20 20 20 20 73 74 72 69 6e 67 20 63 61 74 65       string cate
2d90: 67 6f 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20  gory..          
2da0: 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
2db0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2dc0: 20 20 20 20 20 20 20 20 69 66 20 28 65 78 63 65          if (exce
2dd0: 70 74 69 6f 6e 20 21 3d 20 6e 75 6c 6c 29 0d 0a  ption != null)..
2de0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2df0: 20 20 20 20 72 65 74 75 72 6e 20 54 72 61 63 65      return Trace
2e00: 28 74 72 61 63 65 50 72 69 6f 72 69 74 79 2c 20  (tracePriority, 
2e10: 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 0d 0a  traceCallback,..
2e20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e30: 20 20 20 20 20 20 20 20 6e 65 77 20 53 74 61 63          new Stac
2e40: 6b 54 72 61 63 65 28 65 78 63 65 70 74 69 6f 6e  kTrace(exception
2e50: 2c 20 74 72 75 65 29 2c 20 30 2c 0d 0a 20 20 20  , true), 0,..   
2e60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e70: 20 20 20 20 20 65 78 63 65 70 74 69 6f 6e 2e 54       exception.T
2e80: 6f 53 74 72 69 6e 67 28 29 2c 20 63 61 74 65 67  oString(), categ
2e90: 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
2ea0: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
2eb0: 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20  null;..         
2ec0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
2ed0: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
2ee0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ef0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f10: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
2f20: 20 20 20 20 20 20 20 5b 4d 65 74 68 6f 64 49 6d         [MethodIm
2f30: 70 6c 28 4d 65 74 68 6f 64 49 6d 70 6c 4f 70 74  pl(MethodImplOpt
2f40: 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e 69 6e 67 29  ions.NoInlining)
2f50: 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ]..            p
2f60: 75 62 6c 69 63 20 73 74 61 74 69 63 20 73 74 72  ublic static str
2f70: 69 6e 67 20 54 72 61 63 65 28 0d 0a 20 20 20 20  ing Trace(..    
2f80: 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
2f90: 65 50 72 69 6f 72 69 74 79 20 74 72 61 63 65 50  ePriority traceP
2fa0: 72 69 6f 72 69 74 79 2c 0d 0a 20 20 20 20 20 20  riority,..      
2fb0: 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 43            TraceC
2fc0: 61 6c 6c 62 61 63 6b 20 74 72 61 63 65 43 61 6c  allback traceCal
2fd0: 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20  lback,..        
2fe0: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6d          string m
2ff0: 65 73 73 61 67 65 2c 0d 0a 20 20 20 20 20 20 20  essage,..       
3000: 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
3010: 63 61 74 65 67 6f 72 79 0d 0a 20 20 20 20 20 20  category..      
3020: 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
3030: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
3040: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
3050: 72 6e 20 54 72 61 63 65 28 0d 0a 20 20 20 20 20  rn Trace(..     
3060: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
3070: 72 61 63 65 50 72 69 6f 72 69 74 79 2c 20 74 72  racePriority, tr
3080: 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 6e 75 6c  aceCallback, nul
3090: 6c 2c 20 31 2c 20 6d 65 73 73 61 67 65 2c 20 63  l, 1, message, c
30a0: 61 74 65 67 6f 72 79 29 3b 0d 0a 20 20 20 20 20  ategory);..     
30b0: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
30c0: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
30d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3100: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
3110: 20 20 20 20 20 20 20 20 20 20 20 5b 4d 65 74 68             [Meth
3120: 6f 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49 6d 70  odImpl(MethodImp
3130: 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e  lOptions.NoInlin
3140: 69 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20 20 20  ing)]..         
3150: 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
3160: 63 20 73 74 72 69 6e 67 20 54 72 61 63 65 28 0d  c string Trace(.
3170: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
3180: 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 20 74   TracePriority t
3190: 72 61 63 65 50 72 69 6f 72 69 74 79 2c 0d 0a 20  racePriority,.. 
31a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
31b0: 72 61 63 65 43 61 6c 6c 62 61 63 6b 20 74 72 61  raceCallback tra
31c0: 63 65 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20  ceCallback,..   
31d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 53 74 61               Sta
31e0: 63 6b 54 72 61 63 65 20 73 74 61 63 6b 54 72 61  ckTrace stackTra
31f0: 63 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ce,..           
3200: 20 20 20 20 20 69 6e 74 20 6c 65 76 65 6c 2c 0d       int level,.
3210: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
3220: 20 73 74 72 69 6e 67 20 6d 65 73 73 61 67 65 2c   string message,
3230: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
3240: 20 20 73 74 72 69 6e 67 20 63 61 74 65 67 6f 72    string categor
3250: 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  y..             
3260: 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20     )..          
3270: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
3280: 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
3290: 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45           // NOTE
32a0: 3a 20 49 66 20 74 68 65 20 70 72 69 6f 72 69 74  : If the priorit
32b0: 79 20 6f 66 20 74 68 69 73 20 6d 65 73 73 61 67  y of this messag
32c0: 65 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20 77  e is less than w
32d0: 68 61 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20  hat..           
32e0: 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 77 65       //       we
32f0: 20 63 75 72 72 65 6e 74 6c 79 20 63 61 72 65 20   currently care 
3300: 61 62 6f 75 74 2c 20 6a 75 73 74 20 72 65 74 75  about, just retu
3310: 72 6e 20 6e 6f 77 2e 0d 0a 20 20 20 20 20 20 20  rn now...       
3320: 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
3330: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
3340: 28 74 72 61 63 65 50 72 69 6f 72 69 74 79 20 3c  (tracePriority <
3350: 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 29 0d   TracePriority).
3360: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
3370: 20 20 20 20 20 72 65 74 75 72 6e 20 6d 65 73 73       return mess
3380: 61 67 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  age;....        
3390: 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
33a0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e              // N
33b0: 4f 54 45 3a 20 41 6c 77 61 79 73 20 73 6b 69 70  OTE: Always skip
33c0: 20 74 68 69 73 20 63 61 6c 6c 20 66 72 61 6d 65   this call frame
33d0: 20 69 66 20 74 68 65 20 73 74 61 63 6b 20 74 72   if the stack tr
33e0: 61 63 65 20 69 73 0d 0a 20 20 20 20 20 20 20 20  ace is..        
33f0: 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
3400: 20 67 6f 69 6e 67 20 74 6f 20 62 65 20 63 61 70   going to be cap
3410: 74 75 72 65 64 20 62 79 20 47 65 74 4d 65 74 68  tured by GetMeth
3420: 6f 64 4e 61 6d 65 2e 0d 0a 20 20 20 20 20 20 20  odName...       
3430: 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
3440: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
3450: 28 73 74 61 63 6b 54 72 61 63 65 20 3d 3d 20 6e  (stackTrace == n
3460: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
3470: 20 20 20 20 20 20 20 20 20 20 6c 65 76 65 6c 2b            level+
3480: 2b 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  +;....          
3490: 20 20 20 20 20 20 69 66 20 28 74 72 61 63 65 43        if (traceC
34a0: 61 6c 6c 62 61 63 6b 20 3d 3d 20 6e 75 6c 6c 29  allback == null)
34b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
34c0: 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
34d0: 61 63 6b 20 3d 20 54 72 61 63 65 43 6f 72 65 3b  ack = TraceCore;
34e0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
34f0: 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63      traceCallbac
3500: 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  k(String.Format(
3510: 22 7b 30 7d 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20  "{0}: {1}",..   
3520: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3530: 20 47 65 74 4d 65 74 68 6f 64 4e 61 6d 65 28 73   GetMethodName(s
3540: 74 61 63 6b 54 72 61 63 65 2c 20 6c 65 76 65 6c  tackTrace, level
3550: 29 2c 20 6d 65 73 73 61 67 65 29 2c 20 63 61 74  ), message), cat
3560: 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
3570: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
3580: 6e 20 6d 65 73 73 61 67 65 3b 0d 0a 20 20 20 20  n message;..    
3590: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
35a0: 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
35b0: 6e 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  n..        }..  
35c0: 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
35d0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
35e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3600: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3610: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3620: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23  ///....        #
3630: 72 65 67 69 6f 6e 20 4d 6f 63 6b 52 65 67 69 73  region MockRegis
3640: 74 72 79 4b 65 79 20 43 6c 61 73 73 0d 0a 20 20  tryKey Class..  
3650: 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 65        private se
3660: 61 6c 65 64 20 63 6c 61 73 73 20 4d 6f 63 6b 52  aled class MockR
3670: 65 67 69 73 74 72 79 4b 65 79 20 3a 20 49 44 69  egistryKey : IDi
3680: 73 70 6f 73 61 62 6c 65 0d 0a 20 20 20 20 20 20  sposable..      
3690: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
36a0: 20 23 72 65 67 69 6f 6e 20 50 72 69 76 61 74 65   #region Private
36b0: 20 43 6f 6e 73 74 72 75 63 74 6f 72 73 0d 0a 20   Constructors.. 
36c0: 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
36d0: 74 65 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b  te MockRegistryK
36e0: 65 79 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ey()..          
36f0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
3700: 20 20 20 20 20 77 68 61 74 49 66 20 3d 20 74 72       whatIf = tr
3710: 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
3720: 20 20 20 20 20 72 65 61 64 4f 6e 6c 79 20 3d 20       readOnly = 
3730: 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  true;..         
3740: 20 20 20 20 20 20 20 73 61 66 65 20 3d 20 74 72         safe = tr
3750: 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
3760: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
3770: 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
3780: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
3790: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
37d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65  .            #re
37e0: 67 69 6f 6e 20 50 75 62 6c 69 63 20 43 6f 6e 73  gion Public Cons
37f0: 74 72 75 63 74 6f 72 73 0d 0a 20 20 20 20 20 20  tructors..      
3800: 20 20 20 20 20 20 70 75 62 6c 69 63 20 4d 6f 63        public Moc
3810: 6b 52 65 67 69 73 74 72 79 4b 65 79 28 0d 0a 20  kRegistryKey(.. 
3820: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52                 R
3830: 65 67 69 73 74 72 79 4b 65 79 20 6b 65 79 0d 0a  egistryKey key..
3840: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3850: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
3860: 20 20 20 3a 20 74 68 69 73 28 29 0d 0a 20 20 20     : this()..   
3870: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
3880: 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73              this
3890: 2e 6b 65 79 20 3d 20 6b 65 79 3b 0d 0a 20 20 20  .key = key;..   
38a0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
38b0: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
38c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
38d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
38e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
38f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
3900: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
3910: 6c 69 63 20 4d 6f 63 6b 52 65 67 69 73 74 72 79  lic MockRegistry
3920: 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  Key(..          
3930: 20 20 20 20 20 20 52 65 67 69 73 74 72 79 4b 65        RegistryKe
3940: 79 20 6b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20  y key,..        
3950: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 73          string s
3960: 75 62 4b 65 79 4e 61 6d 65 0d 0a 20 20 20 20 20  ubKeyName..     
3970: 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
3980: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3a 20                : 
3990: 74 68 69 73 28 6b 65 79 29 0d 0a 20 20 20 20 20  this(key)..     
39a0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
39b0: 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 73            this.s
39c0: 75 62 4b 65 79 4e 61 6d 65 20 3d 20 73 75 62 4b  ubKeyName = subK
39d0: 65 79 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20  eyName;..       
39e0: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
39f0: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
3a00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3a10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3a20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3a30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
3a40: 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
3a50: 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 28  MockRegistryKey(
3a60: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
3a70: 20 20 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65    RegistryKey ke
3a80: 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y,..            
3a90: 20 20 20 20 73 74 72 69 6e 67 20 73 75 62 4b 65      string subKe
3aa0: 79 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20  yName,..        
3ab0: 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61          bool wha
3ac0: 74 49 66 0d 0a 20 20 20 20 20 20 20 20 20 20 20  tIf..           
3ad0: 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
3ae0: 20 20 20 20 20 20 20 20 3a 20 74 68 69 73 28 6b          : this(k
3af0: 65 79 2c 20 73 75 62 4b 65 79 4e 61 6d 65 29 0d  ey, subKeyName).
3b00: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
3b10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3b20: 74 68 69 73 2e 77 68 61 74 49 66 20 3d 20 77 68  this.whatIf = wh
3b30: 61 74 49 66 3b 0d 0a 20 20 20 20 20 20 20 20 20  atIf;..         
3b40: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
3b50: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
3b60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3b70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3b80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3b90: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
3ba0: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 4d 6f         public Mo
3bb0: 63 6b 52 65 67 69 73 74 72 79 4b 65 79 28 0d 0a  ckRegistryKey(..
3bc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3bd0: 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65 79 2c  RegistryKey key,
3be0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
3bf0: 20 20 73 74 72 69 6e 67 20 73 75 62 4b 65 79 4e    string subKeyN
3c00: 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ame,..          
3c10: 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49        bool whatI
3c20: 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f,..            
3c30: 20 20 20 20 62 6f 6f 6c 20 72 65 61 64 4f 6e 6c      bool readOnl
3c40: 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  y..             
3c50: 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20     )..          
3c60: 20 20 20 20 20 20 3a 20 74 68 69 73 28 6b 65 79        : this(key
3c70: 2c 20 73 75 62 4b 65 79 4e 61 6d 65 2c 20 77 68  , subKeyName, wh
3c80: 61 74 49 66 29 0d 0a 20 20 20 20 20 20 20 20 20  atIf)..         
3c90: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
3ca0: 20 20 20 20 20 20 74 68 69 73 2e 72 65 61 64 4f        this.readO
3cb0: 6e 6c 79 20 3d 20 72 65 61 64 4f 6e 6c 79 3b 0d  nly = readOnly;.
3cc0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
3cd0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
3ce0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3cf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3d00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3d10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3d20: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
3d30: 20 70 75 62 6c 69 63 20 4d 6f 63 6b 52 65 67 69   public MockRegi
3d40: 73 74 72 79 4b 65 79 28 0d 0a 20 20 20 20 20 20  stryKey(..      
3d50: 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74            Regist
3d60: 72 79 4b 65 79 20 6b 65 79 2c 0d 0a 20 20 20 20  ryKey key,..    
3d70: 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
3d80: 6e 67 20 73 75 62 4b 65 79 4e 61 6d 65 2c 0d 0a  ng subKeyName,..
3d90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3da0: 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20  bool whatIf,..  
3db0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
3dc0: 6f 6c 20 72 65 61 64 4f 6e 6c 79 2c 0d 0a 20 20  ol readOnly,..  
3dd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
3de0: 6f 6c 20 73 61 66 65 0d 0a 20 20 20 20 20 20 20  ol safe..       
3df0: 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
3e00: 20 20 20 20 20 20 20 20 20 20 20 20 3a 20 74 68              : th
3e10: 69 73 28 6b 65 79 2c 20 73 75 62 4b 65 79 4e 61  is(key, subKeyNa
3e20: 6d 65 2c 20 77 68 61 74 49 66 2c 20 72 65 61 64  me, whatIf, read
3e30: 4f 6e 6c 79 29 0d 0a 20 20 20 20 20 20 20 20 20  Only)..         
3e40: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
3e50: 20 20 20 20 20 20 74 68 69 73 2e 73 61 66 65 20        this.safe 
3e60: 3d 20 73 61 66 65 3b 0d 0a 20 20 20 20 20 20 20  = safe;..       
3e70: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
3e80: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
3e90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3ea0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3eb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3ec0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
3ed0: 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
3ee0: 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 28  MockRegistryKey(
3ef0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
3f00: 20 20 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65    RegistryKey ke
3f10: 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y,..            
3f20: 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 0d      bool whatIf.
3f30: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
3f40: 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   )..            
3f50: 20 20 20 20 3a 20 74 68 69 73 28 6b 65 79 2c 20      : this(key, 
3f60: 6e 75 6c 6c 2c 20 77 68 61 74 49 66 29 0d 0a 20  null, whatIf).. 
3f70: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
3f80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
3f90: 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20   do nothing...  
3fa0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
3fb0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
3fc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3fd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3fe0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3ff0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
4000: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
4010: 62 6c 69 63 20 4d 6f 63 6b 52 65 67 69 73 74 72  blic MockRegistr
4020: 79 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20  yKey(..         
4030: 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79 4b         RegistryK
4040: 65 79 20 6b 65 79 2c 0d 0a 20 20 20 20 20 20 20  ey key,..       
4050: 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68           bool wh
4060: 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20  atIf,..         
4070: 20 20 20 20 20 20 20 62 6f 6f 6c 20 72 65 61 64         bool read
4080: 4f 6e 6c 79 0d 0a 20 20 20 20 20 20 20 20 20 20  Only..          
4090: 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
40a0: 20 20 20 20 20 20 20 20 20 3a 20 74 68 69 73 28           : this(
40b0: 6b 65 79 2c 20 6e 75 6c 6c 2c 20 77 68 61 74 49  key, null, whatI
40c0: 66 2c 20 72 65 61 64 4f 6e 6c 79 29 0d 0a 20 20  f, readOnly)..  
40d0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
40e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
40f0: 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20  do nothing...   
4100: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
4110: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
4120: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4130: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4140: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4150: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
4160: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
4170: 6c 69 63 20 4d 6f 63 6b 52 65 67 69 73 74 72 79  lic MockRegistry
4180: 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  Key(..          
4190: 20 20 20 20 20 20 52 65 67 69 73 74 72 79 4b 65        RegistryKe
41a0: 79 20 6b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20  y key,..        
41b0: 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61          bool wha
41c0: 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf,..          
41d0: 20 20 20 20 20 20 62 6f 6f 6c 20 72 65 61 64 4f        bool readO
41e0: 6e 6c 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  nly,..          
41f0: 20 20 20 20 20 20 62 6f 6f 6c 20 73 61 66 65 0d        bool safe.
4200: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
4210: 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   )..            
4220: 20 20 20 20 3a 20 74 68 69 73 28 6b 65 79 2c 20      : this(key, 
4230: 6e 75 6c 6c 2c 20 77 68 61 74 49 66 2c 20 72 65  null, whatIf, re
4240: 61 64 4f 6e 6c 79 2c 20 73 61 66 65 29 0d 0a 20  adOnly, safe).. 
4250: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
4260: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
4270: 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20   do nothing...  
4280: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
4290: 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67           #endreg
42a0: 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ion....         
42b0: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
42c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
42d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
42e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
42f0: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
4300: 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 75        #region Pu
4310: 62 6c 69 63 20 4d 65 74 68 6f 64 73 0d 0a 20 20  blic Methods..  
4320: 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
4330: 20 76 6f 69 64 20 43 6c 6f 73 65 28 29 0d 0a 20   void Close().. 
4340: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
4350: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
4360: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
4370: 20 20 2f 2f 20 4e 4f 54 45 3a 20 4e 6f 20 64 69    // NOTE: No di
4380: 73 70 6f 73 65 64 20 63 68 65 63 6b 20 68 65 72  sposed check her
4390: 65 20 62 65 63 61 75 73 65 20 63 61 6c 6c 69 6e  e because callin
43a0: 67 20 74 68 69 73 20 6d 65 74 68 6f 64 0d 0a 20  g this method.. 
43b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
43c0: 2f 20 20 20 20 20 20 20 73 68 6f 75 6c 64 20 62  /       should b
43d0: 65 20 6a 75 73 74 20 6c 69 6b 65 20 63 61 6c 6c  e just like call
43e0: 69 6e 67 20 44 69 73 70 6f 73 65 2e 0d 0a 20 20  ing Dispose...  
43f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
4400: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
4410: 20 20 44 69 73 70 6f 73 65 28 74 72 75 65 29 3b    Dispose(true);
4420: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
4430: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
4440: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4450: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4460: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4470: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4480: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
4490: 20 20 70 75 62 6c 69 63 20 4d 6f 63 6b 52 65 67    public MockReg
44a0: 69 73 74 72 79 4b 65 79 20 43 72 65 61 74 65 53  istryKey CreateS
44b0: 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20  ubKey(..        
44c0: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 73          string s
44d0: 75 62 4b 65 79 4e 61 6d 65 0d 0a 20 20 20 20 20  ubKeyName..     
44e0: 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
44f0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
4500: 20 20 20 20 20 20 20 20 20 20 20 20 20 43 68 65               Che
4510: 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 20  ckDisposed();.. 
4520: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43                 C
4530: 68 65 63 6b 52 65 61 64 4f 6e 6c 79 28 29 3b 0d  heckReadOnly();.
4540: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
4550: 20 20 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75     if (key == nu
4560: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
4570: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
4580: 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  null;....       
4590: 20 20 20 20 20 20 20 20 20 69 66 20 28 77 68 61           if (wha
45a0: 74 49 66 29 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf)..          
45b0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
45c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
45d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
45e0: 20 20 20 20 20 2f 2f 20 48 41 43 4b 3a 20 41 74       // HACK: At
45f0: 74 65 6d 70 74 20 74 6f 20 6f 70 65 6e 20 74 68  tempt to open th
4600: 65 20 73 70 65 63 69 66 69 65 64 20 73 75 62 2d  e specified sub-
4610: 6b 65 79 2e 20 20 49 66 20 74 68 69 73 0d 0a 20  key.  If this.. 
4620: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4630: 20 20 20 2f 2f 20 20 20 20 20 20 20 66 61 69 6c     //       fail
4640: 73 2c 20 77 65 20 77 69 6c 6c 20 73 69 6d 70 6c  s, we will simpl
4650: 79 20 72 65 74 75 72 6e 20 74 68 65 20 77 72 61  y return the wra
4660: 70 70 65 64 20 72 6f 6f 74 20 6b 65 79 0d 0a 20  pped root key.. 
4670: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4680: 20 20 20 2f 2f 20 20 20 20 20 20 20 69 74 73 65     //       itse
4690: 6c 66 20 73 69 6e 63 65 20 6e 6f 20 77 72 69 74  lf since no writ
46a0: 65 73 20 61 72 65 20 61 6c 6c 6f 77 65 64 20 69  es are allowed i
46b0: 6e 20 27 77 68 61 74 2d 69 66 27 0d 0a 20 20 20  n 'what-if'..   
46c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
46d0: 20 2f 2f 20 20 20 20 20 20 20 6d 6f 64 65 20 61   //       mode a
46e0: 6e 79 68 6f 77 2e 0d 0a 20 20 20 20 20 20 20 20  nyhow...        
46f0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
4700: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4710: 20 20 20 20 52 65 67 69 73 74 72 79 4b 65 79 20      RegistryKey 
4720: 73 75 62 4b 65 79 20 3d 20 6b 65 79 2e 4f 70 65  subKey = key.Ope
4730: 6e 53 75 62 4b 65 79 28 73 75 62 4b 65 79 4e 61  nSubKey(subKeyNa
4740: 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  me);....        
4750: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
4760: 72 6e 20 28 73 75 62 4b 65 79 20 21 3d 20 6e 75  rn (subKey != nu
4770: 6c 6c 29 20 3f 0d 0a 20 20 20 20 20 20 20 20 20  ll) ?..         
4780: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e                 n
4790: 65 77 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b  ew MockRegistryK
47a0: 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey(..           
47b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
47c0: 20 20 20 20 20 73 75 62 4b 65 79 2c 20 77 68 61       subKey, wha
47d0: 74 49 66 2c 20 72 65 61 64 4f 6e 6c 79 2c 20 73  tIf, readOnly, s
47e0: 61 66 65 29 20 3a 0d 0a 20 20 20 20 20 20 20 20  afe) :..        
47f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4800: 6e 65 77 20 4d 6f 63 6b 52 65 67 69 73 74 72 79  new MockRegistry
4810: 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  Key(..          
4820: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4830: 20 20 20 20 20 20 6b 65 79 2c 20 73 75 62 4b 65        key, subKe
4840: 79 4e 61 6d 65 2c 20 77 68 61 74 49 66 2c 20 72  yName, whatIf, r
4850: 65 61 64 4f 6e 6c 79 2c 20 73 61 66 65 29 3b 0d  eadOnly, safe);.
4860: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
4870: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
4880: 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20      else..      
4890: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
48a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
48b0: 20 72 65 74 75 72 6e 20 6e 65 77 20 4d 6f 63 6b   return new Mock
48c0: 52 65 67 69 73 74 72 79 4b 65 79 28 0d 0a 20 20  RegistryKey(..  
48d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
48e0: 20 20 20 20 20 20 6b 65 79 2e 43 72 65 61 74 65        key.Create
48f0: 53 75 62 4b 65 79 28 73 75 62 4b 65 79 4e 61 6d  SubKey(subKeyNam
4900: 65 29 2c 20 77 68 61 74 49 66 2c 20 72 65 61 64  e), whatIf, read
4910: 4f 6e 6c 79 2c 20 73 61 66 65 29 3b 0d 0a 20 20  Only, safe);..  
4920: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
4930: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
4940: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
4950: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4960: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4970: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4980: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4990: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
49a0: 20 70 75 62 6c 69 63 20 76 6f 69 64 20 44 65 6c   public void Del
49b0: 65 74 65 53 75 62 4b 65 79 28 0d 0a 20 20 20 20  eteSubKey(..    
49c0: 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
49d0: 6e 67 20 73 75 62 4b 65 79 4e 61 6d 65 0d 0a 20  ng subKeyName.. 
49e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29                 )
49f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
4a00: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
4a10: 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29   CheckDisposed()
4a20: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
4a30: 20 20 20 43 68 65 63 6b 52 65 61 64 4f 6e 6c 79     CheckReadOnly
4a40: 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ();....         
4a50: 20 20 20 20 20 20 20 69 66 20 28 6b 65 79 20 3d         if (key =
4a60: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
4a70: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
4a80: 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  urn;....        
4a90: 20 20 20 20 20 20 20 20 69 66 20 28 21 77 68 61          if (!wha
4aa0: 74 49 66 29 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf)..          
4ab0: 20 20 20 20 20 20 20 20 20 20 6b 65 79 2e 44 65            key.De
4ac0: 6c 65 74 65 53 75 62 4b 65 79 28 73 75 62 4b 65  leteSubKey(subKe
4ad0: 79 4e 61 6d 65 29 3b 0d 0a 20 20 20 20 20 20 20  yName);..       
4ae0: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
4af0: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
4b00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4b10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4b20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4b30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
4b40: 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
4b50: 76 6f 69 64 20 44 65 6c 65 74 65 53 75 62 4b 65  void DeleteSubKe
4b60: 79 54 72 65 65 28 0d 0a 20 20 20 20 20 20 20 20  yTree(..        
4b70: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 73          string s
4b80: 75 62 4b 65 79 4e 61 6d 65 0d 0a 20 20 20 20 20  ubKeyName..     
4b90: 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
4ba0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
4bb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 43 68 65               Che
4bc0: 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 20  ckDisposed();.. 
4bd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43                 C
4be0: 68 65 63 6b 52 65 61 64 4f 6e 6c 79 28 29 3b 0d  heckReadOnly();.
4bf0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
4c00: 20 20 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75     if (key == nu
4c10: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
4c20: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 3b           return;
4c30: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
4c40: 20 20 20 20 69 66 20 28 21 77 68 61 74 49 66 29      if (!whatIf)
4c50: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
4c60: 20 20 20 20 20 20 6b 65 79 2e 44 65 6c 65 74 65        key.Delete
4c70: 53 75 62 4b 65 79 54 72 65 65 28 73 75 62 4b 65  SubKeyTree(subKe
4c80: 79 4e 61 6d 65 29 3b 0d 0a 20 20 20 20 20 20 20  yName);..       
4c90: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
4ca0: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
4cb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4cc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4cd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4ce0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
4cf0: 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
4d00: 76 6f 69 64 20 44 65 6c 65 74 65 56 61 6c 75 65  void DeleteValue
4d10: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
4d20: 20 20 20 73 74 72 69 6e 67 20 6e 61 6d 65 0d 0a     string name..
4d30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4d40: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
4d50: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
4d60: 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28    CheckDisposed(
4d70: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
4d80: 20 20 20 20 43 68 65 63 6b 52 65 61 64 4f 6e 6c      CheckReadOnl
4d90: 79 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  y();....        
4da0: 20 20 20 20 20 20 20 20 69 66 20 28 6b 65 79 20          if (key 
4db0: 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
4dc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
4dd0: 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  turn;....       
4de0: 20 20 20 20 20 20 20 20 20 69 66 20 28 21 77 68           if (!wh
4df0: 61 74 49 66 29 0d 0a 20 20 20 20 20 20 20 20 20  atIf)..         
4e00: 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 2e 44             key.D
4e10: 65 6c 65 74 65 56 61 6c 75 65 28 6e 61 6d 65 29  eleteValue(name)
4e20: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
4e30: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
4e40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4e50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4e60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4e70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4e80: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
4e90: 20 20 20 70 75 62 6c 69 63 20 73 74 72 69 6e 67     public string
4ea0: 5b 5d 20 47 65 74 53 75 62 4b 65 79 4e 61 6d 65  [] GetSubKeyName
4eb0: 73 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s()..           
4ec0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
4ed0: 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65      CheckDispose
4ee0: 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  d();....        
4ef0: 20 20 20 20 20 20 20 20 69 66 20 28 6b 65 79 20          if (key 
4f00: 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
4f10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
4f20: 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20  turn null;....  
4f30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
4f40: 74 75 72 6e 20 6b 65 79 2e 47 65 74 53 75 62 4b  turn key.GetSubK
4f50: 65 79 4e 61 6d 65 73 28 29 3b 0d 0a 20 20 20 20  eyNames();..    
4f60: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
4f70: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
4f80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4f90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4fa0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4fb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
4fc0: 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
4fd0: 69 63 20 6f 62 6a 65 63 74 20 47 65 74 56 61 6c  ic object GetVal
4fe0: 75 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue(..           
4ff0: 20 20 20 20 20 73 74 72 69 6e 67 20 6e 61 6d 65       string name
5000: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
5010: 20 20 20 6f 62 6a 65 63 74 20 64 65 66 61 75 6c     object defaul
5020: 74 56 61 6c 75 65 0d 0a 20 20 20 20 20 20 20 20  tValue..        
5030: 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
5040: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
5050: 20 20 20 20 20 20 20 20 20 20 43 68 65 63 6b 44            CheckD
5060: 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20  isposed();....  
5070: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
5080: 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a   (key == null)..
5090: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
50a0: 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b      return null;
50b0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
50c0: 20 20 20 20 72 65 74 75 72 6e 20 6b 65 79 2e 47      return key.G
50d0: 65 74 56 61 6c 75 65 28 6e 61 6d 65 2c 20 64 65  etValue(name, de
50e0: 66 61 75 6c 74 56 61 6c 75 65 29 3b 0d 0a 20 20  faultValue);..  
50f0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
5100: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
5110: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5120: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5130: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5140: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
5150: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
5160: 62 6c 69 63 20 4d 6f 63 6b 52 65 67 69 73 74 72  blic MockRegistr
5170: 79 4b 65 79 20 4f 70 65 6e 53 75 62 4b 65 79 28  yKey OpenSubKey(
5180: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
5190: 20 20 73 74 72 69 6e 67 20 73 75 62 4b 65 79 4e    string subKeyN
51a0: 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ame..           
51b0: 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
51c0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
51d0: 20 20 20 20 20 20 20 43 68 65 63 6b 44 69 73 70         CheckDisp
51e0: 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20  osed();....     
51f0: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
5200: 6e 20 4f 70 65 6e 53 75 62 4b 65 79 28 73 75 62  n OpenSubKey(sub
5210: 4b 65 79 4e 61 6d 65 2c 20 66 61 6c 73 65 29 3b  KeyName, false);
5220: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
5230: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
5240: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5250: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5260: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5270: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5280: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
5290: 20 20 70 75 62 6c 69 63 20 4d 6f 63 6b 52 65 67    public MockReg
52a0: 69 73 74 72 79 4b 65 79 20 4f 70 65 6e 53 75 62  istryKey OpenSub
52b0: 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  Key(..          
52c0: 20 20 20 20 20 20 73 74 72 69 6e 67 20 73 75 62        string sub
52d0: 4b 65 79 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20  KeyName,..      
52e0: 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77            bool w
52f0: 72 69 74 61 62 6c 65 0d 0a 20 20 20 20 20 20 20  ritable..       
5300: 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
5310: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
5320: 20 20 20 20 20 20 20 20 20 20 20 43 68 65 63 6b             Check
5330: 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20  Disposed();.... 
5340: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
5350: 66 20 28 77 72 69 74 61 62 6c 65 29 0d 0a 20 20  f (writable)..  
5360: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5370: 20 20 43 68 65 63 6b 52 65 61 64 4f 6e 6c 79 28    CheckReadOnly(
5380: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
5390: 20 20 20 20 20 20 69 66 20 28 6b 65 79 20 3d 3d        if (key ==
53a0: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
53b0: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
53c0: 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20  rn null;....    
53d0: 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69              Regi
53e0: 73 74 72 79 4b 65 79 20 73 75 62 4b 65 79 20 3d  stryKey subKey =
53f0: 20 6b 65 79 2e 4f 70 65 6e 53 75 62 4b 65 79 28   key.OpenSubKey(
5400: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
5410: 20 20 20 20 20 20 73 75 62 4b 65 79 4e 61 6d 65        subKeyName
5420: 2c 20 77 68 61 74 49 66 20 3f 20 66 61 6c 73 65  , whatIf ? false
5430: 20 3a 20 77 72 69 74 61 62 6c 65 29 3b 0d 0a 0d   : writable);...
5440: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
5450: 20 72 65 74 75 72 6e 20 28 73 75 62 4b 65 79 20   return (subKey 
5460: 21 3d 20 6e 75 6c 6c 29 20 3f 0d 0a 20 20 20 20  != null) ?..    
5470: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5480: 6e 65 77 20 4d 6f 63 6b 52 65 67 69 73 74 72 79  new MockRegistry
5490: 4b 65 79 28 73 75 62 4b 65 79 2c 20 77 68 61 74  Key(subKey, what
54a0: 49 66 2c 20 72 65 61 64 4f 6e 6c 79 2c 20 73 61  If, readOnly, sa
54b0: 66 65 29 20 3a 20 6e 75 6c 6c 3b 0d 0a 20 20 20  fe) : null;..   
54c0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
54d0: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
54e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
54f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5500: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5510: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
5520: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
5530: 6c 69 63 20 76 6f 69 64 20 53 65 74 56 61 6c 75  lic void SetValu
5540: 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
5550: 20 20 20 20 73 74 72 69 6e 67 20 6e 61 6d 65 2c      string name,
5560: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
5570: 20 20 6f 62 6a 65 63 74 20 76 61 6c 75 65 0d 0a    object value..
5580: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5590: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
55a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
55b0: 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28    CheckDisposed(
55c0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
55d0: 20 20 20 20 43 68 65 63 6b 52 65 61 64 4f 6e 6c      CheckReadOnl
55e0: 79 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  y();....        
55f0: 20 20 20 20 20 20 20 20 69 66 20 28 6b 65 79 20          if (key 
5600: 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
5610: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
5620: 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  turn;....       
5630: 20 20 20 20 20 20 20 20 20 69 66 20 28 21 77 68           if (!wh
5640: 61 74 49 66 29 0d 0a 20 20 20 20 20 20 20 20 20  atIf)..         
5650: 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 2e 53             key.S
5660: 65 74 56 61 6c 75 65 28 6e 61 6d 65 2c 20 76 61  etValue(name, va
5670: 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  lue);..         
5680: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
5690: 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
56a0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
56b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
56c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
56d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
56e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
56f0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  ...            #
5700: 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20 50 72  region Public Pr
5710: 6f 70 65 72 74 69 65 73 0d 0a 20 20 20 20 20 20  operties..      
5720: 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 72        public str
5730: 69 6e 67 20 4e 61 6d 65 0d 0a 20 20 20 20 20 20  ing Name..      
5740: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
5750: 20 20 20 20 20 20 20 20 20 67 65 74 0d 0a 20 20           get..  
5760: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
5770: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
5780: 20 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73       CheckDispos
5790: 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ed();....       
57a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
57b0: 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  (key == null).. 
57c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
57d0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75         return nu
57e0: 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ll;....         
57f0: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
5800: 6e 20 21 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c  n !String.IsNull
5810: 4f 72 45 6d 70 74 79 28 73 75 62 4b 65 79 4e 61  OrEmpty(subKeyNa
5820: 6d 65 29 20 3f 0d 0a 20 20 20 20 20 20 20 20 20  me) ?..         
5830: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53                 S
5840: 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22 7b 30  tring.Format("{0
5850: 7d 5c 5c 7b 31 7d 22 2c 20 6b 65 79 2e 4e 61 6d  }\\{1}", key.Nam
5860: 65 2c 20 73 75 62 4b 65 79 4e 61 6d 65 29 20 3a  e, subKeyName) :
5870: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
5880: 20 20 20 20 20 20 20 20 20 20 6b 65 79 2e 4e 61            key.Na
5890: 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me;..           
58a0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
58b0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
58c0: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
58d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
58e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
58f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5900: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
5910: 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
5920: 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65 79 3b  RegistryKey key;
5930: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
5940: 62 6c 69 63 20 52 65 67 69 73 74 72 79 4b 65 79  blic RegistryKey
5950: 20 4b 65 79 0d 0a 20 20 20 20 20 20 20 20 20 20   Key..          
5960: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
5970: 20 20 20 20 20 67 65 74 20 7b 20 43 68 65 63 6b       get { Check
5980: 44 69 73 70 6f 73 65 64 28 29 3b 20 43 68 65 63  Disposed(); Chec
5990: 6b 53 61 66 65 28 29 3b 20 72 65 74 75 72 6e 20  kSafe(); return 
59a0: 6b 65 79 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  key; }..        
59b0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
59c0: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
59d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
59e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
59f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5a00: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
5a10: 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
5a20: 73 74 72 69 6e 67 20 73 75 62 4b 65 79 4e 61 6d  string subKeyNam
5a30: 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
5a40: 70 75 62 6c 69 63 20 73 74 72 69 6e 67 20 53 75  public string Su
5a50: 62 4b 65 79 4e 61 6d 65 0d 0a 20 20 20 20 20 20  bKeyName..      
5a60: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
5a70: 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 43           get { C
5a80: 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 20  heckDisposed(); 
5a90: 72 65 74 75 72 6e 20 73 75 62 4b 65 79 4e 61 6d  return subKeyNam
5aa0: 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  e; }..          
5ab0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
5ac0: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
5ad0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5ae0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5af0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5b00: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
5b10: 20 20 20 20 20 20 70 72 69 76 61 74 65 20 62 6f        private bo
5b20: 6f 6c 20 77 68 61 74 49 66 3b 0d 0a 20 20 20 20  ol whatIf;..    
5b30: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 62          public b
5b40: 6f 6f 6c 20 57 68 61 74 49 66 0d 0a 20 20 20 20  ool WhatIf..    
5b50: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
5b60: 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b             get {
5b70: 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29   CheckDisposed()
5b80: 3b 20 72 65 74 75 72 6e 20 77 68 61 74 49 66 3b  ; return whatIf;
5b90: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
5ba0: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
5bb0: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
5bc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5bd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5be0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5bf0: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
5c00: 20 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c      private bool
5c10: 20 72 65 61 64 4f 6e 6c 79 3b 0d 0a 20 20 20 20   readOnly;..    
5c20: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 62          public b
5c30: 6f 6f 6c 20 52 65 61 64 4f 6e 6c 79 0d 0a 20 20  ool ReadOnly..  
5c40: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
5c50: 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74               get
5c60: 20 7b 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64   { CheckDisposed
5c70: 28 29 3b 20 72 65 74 75 72 6e 20 72 65 61 64 4f  (); return readO
5c80: 6e 6c 79 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  nly; }..        
5c90: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
5ca0: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
5cb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5cc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5cd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5ce0: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
5cf0: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 62          public b
5d00: 6f 6f 6c 20 73 61 66 65 3b 0d 0a 20 20 20 20 20  ool safe;..     
5d10: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f         public bo
5d20: 6f 6c 20 53 61 66 65 0d 0a 20 20 20 20 20 20 20  ol Safe..       
5d30: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
5d40: 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 43 68          get { Ch
5d50: 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 20 72  eckDisposed(); r
5d60: 65 74 75 72 6e 20 73 61 66 65 3b 20 7d 0d 0a 20  eturn safe; }.. 
5d70: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
5d80: 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65            #endre
5d90: 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
5da0: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
5db0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5dc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5dd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5de0: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
5df0: 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50         #region P
5e00: 72 69 76 61 74 65 20 4d 65 74 68 6f 64 73 0d 0a  rivate Methods..
5e10: 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
5e20: 61 74 65 20 76 6f 69 64 20 43 68 65 63 6b 52 65  ate void CheckRe
5e30: 61 64 4f 6e 6c 79 28 29 0d 0a 20 20 20 20 20 20  adOnly()..      
5e40: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
5e50: 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
5e60: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
5e70: 4e 4f 54 45 3a 20 49 6e 20 22 72 65 61 64 2d 6f  NOTE: In "read-o
5e80: 6e 6c 79 22 20 6d 6f 64 65 2c 20 77 65 20 64 69  nly" mode, we di
5e90: 73 61 6c 6c 6f 77 20 61 6c 6c 20 77 72 69 74 65  sallow all write
5ea0: 20 61 63 63 65 73 73 2e 0d 0a 20 20 20 20 20 20   access...      
5eb0: 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
5ec0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
5ed0: 20 28 21 72 65 61 64 4f 6e 6c 79 29 0d 0a 20 20   (!readOnly)..  
5ee0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5ef0: 20 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20    return;....   
5f00: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72               thr
5f10: 6f 77 20 6e 65 77 20 49 6e 76 61 6c 69 64 4f 70  ow new InvalidOp
5f20: 65 72 61 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e  erationException
5f30: 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ();..           
5f40: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
5f50: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
5f60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5f70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5f80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5f90: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
5fa0: 20 20 20 20 20 70 72 69 76 61 74 65 20 76 6f 69       private voi
5fb0: 64 20 43 68 65 63 6b 53 61 66 65 28 29 0d 0a 20  d CheckSafe().. 
5fc0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
5fd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
5fe0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
5ff0: 20 20 2f 2f 20 4e 4f 54 45 3a 20 49 6e 20 22 73    // NOTE: In "s
6000: 61 66 65 22 20 6d 6f 64 65 2c 20 77 65 20 64 69  afe" mode, we di
6010: 73 61 6c 6c 6f 77 20 61 6c 6c 20 64 69 72 65 63  sallow all direc
6020: 74 20 61 63 63 65 73 73 20 74 6f 20 74 68 65 0d  t access to the.
6030: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
6040: 20 2f 2f 20 20 20 20 20 20 20 63 6f 6e 74 61 69   //       contai
6050: 6e 65 64 20 72 65 67 69 73 74 72 79 20 6b 65 79  ned registry key
6060: 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
6070: 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
6080: 20 20 20 20 20 20 20 69 66 20 28 21 73 61 66 65         if (!safe
6090: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
60a0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 3b 0d 0a         return;..
60b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
60c0: 20 20 74 68 72 6f 77 20 6e 65 77 20 49 6e 76 61    throw new Inva
60d0: 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45 78 63 65  lidOperationExce
60e0: 70 74 69 6f 6e 28 29 3b 0d 0a 20 20 20 20 20 20  ption();..      
60f0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
6100: 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
6110: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
6120: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6130: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6140: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6150: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6160: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
6170: 20 20 23 72 65 67 69 6f 6e 20 53 79 73 74 65 6d    #region System
6180: 2e 4f 62 6a 65 63 74 20 4f 76 65 72 72 69 64 65  .Object Override
6190: 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  s..            p
61a0: 75 62 6c 69 63 20 6f 76 65 72 72 69 64 65 20 73  ublic override s
61b0: 74 72 69 6e 67 20 54 6f 53 74 72 69 6e 67 28 29  tring ToString()
61c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
61d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
61e0: 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29   CheckDisposed()
61f0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
6200: 20 20 20 20 20 72 65 74 75 72 6e 20 74 68 69 73       return this
6210: 2e 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20  .Name;..        
6220: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
6230: 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
6240: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
6250: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6260: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6270: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6280: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6290: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
62a0: 23 72 65 67 69 6f 6e 20 49 6d 70 6c 69 63 69 74  #region Implicit
62b0: 20 43 6f 6e 76 65 72 73 69 6f 6e 20 4f 70 65 72   Conversion Oper
62c0: 61 74 6f 72 73 0d 0a 20 20 20 20 20 20 20 20 20  ators..         
62d0: 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
62e0: 20 20 20 2f 2f 20 42 55 47 42 55 47 3a 20 54 68     // BUGBUG: Th
62f0: 65 20 27 77 68 61 74 2d 69 66 27 20 6d 6f 64 65  e 'what-if' mode
6300: 20 73 65 74 74 69 6e 67 20 68 65 72 65 20 73 68   setting here sh
6310: 6f 75 6c 64 20 70 72 6f 62 61 62 6c 79 20 62 65  ould probably be
6320: 20 62 61 73 65 64 0d 0a 20 20 20 20 20 20 20 20   based..        
6330: 20 20 20 20 2f 2f 20 20 20 20 20 20 20 20 20 6f      //         o
6340: 6e 20 73 6f 6d 65 20 73 74 61 74 69 63 20 70 72  n some static pr
6350: 6f 70 65 72 74 79 2c 20 6e 6f 74 20 68 61 72 64  operty, not hard
6360: 2d 63 6f 64 65 64 20 74 6f 20 74 72 75 65 3f 0d  -coded to true?.
6370: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d  .            //.
6380: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
6390: 6c 69 63 20 73 74 61 74 69 63 20 69 6d 70 6c 69  lic static impli
63a0: 63 69 74 20 6f 70 65 72 61 74 6f 72 20 4d 6f 63  cit operator Moc
63b0: 6b 52 65 67 69 73 74 72 79 4b 65 79 28 0d 0a 20  kRegistryKey(.. 
63c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52                 R
63d0: 65 67 69 73 74 72 79 4b 65 79 20 6b 65 79 0d 0a  egistryKey key..
63e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
63f0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
6400: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
6410: 20 20 72 65 74 75 72 6e 20 6e 65 77 20 4d 6f 63    return new Moc
6420: 6b 52 65 67 69 73 74 72 79 4b 65 79 28 6b 65 79  kRegistryKey(key
6430: 2c 20 6e 75 6c 6c 2c 20 74 72 75 65 2c 20 66 61  , null, true, fa
6440: 6c 73 65 2c 20 66 61 6c 73 65 29 3b 0d 0a 20 20  lse, false);..  
6450: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
6460: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
6470: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6480: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6490: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
64a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
64b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
64c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
64d0: 20 42 55 47 42 55 47 3a 20 52 65 6d 6f 76 65 20   BUGBUG: Remove 
64e0: 6d 65 3f 20 20 54 68 69 73 20 73 68 6f 75 6c 64  me?  This should
64f0: 20 62 65 20 73 61 66 65 20 62 65 63 61 75 73 65   be safe because
6500: 20 69 6e 20 27 77 68 61 74 2d 69 66 27 0d 0a 20   in 'what-if'.. 
6510: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
6520: 20 20 20 20 20 20 6d 6f 64 65 20 61 6c 6c 20 6b        mode all k
6530: 65 79 73 20 61 72 65 20 6f 70 65 6e 65 64 20 72  eys are opened r
6540: 65 61 64 2d 6f 6e 6c 79 2e 0d 0a 20 20 20 20 20  ead-only...     
6550: 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
6560: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74         public st
6570: 61 74 69 63 20 69 6d 70 6c 69 63 69 74 20 6f 70  atic implicit op
6580: 65 72 61 74 6f 72 20 52 65 67 69 73 74 72 79 4b  erator RegistryK
6590: 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey(..           
65a0: 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72       MockRegistr
65b0: 79 4b 65 79 20 6b 65 79 0d 0a 20 20 20 20 20 20  yKey key..      
65c0: 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
65d0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
65e0: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
65f0: 72 6e 20 28 6b 65 79 20 21 3d 20 6e 75 6c 6c 29  rn (key != null)
6600: 20 3f 20 6b 65 79 2e 4b 65 79 20 3a 20 6e 75 6c   ? key.Key : nul
6610: 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l;..            
6620: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  }..            #
6630: 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
6640: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
6650: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6660: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6670: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6680: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
6690: 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67              #reg
66a0: 69 6f 6e 20 49 44 69 73 70 6f 73 61 62 6c 65 20  ion IDisposable 
66b0: 22 50 61 74 74 65 72 6e 22 20 4d 65 6d 62 65 72  "Pattern" Member
66c0: 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  s..            p
66d0: 72 69 76 61 74 65 20 62 6f 6f 6c 20 64 69 73 70  rivate bool disp
66e0: 6f 73 65 64 3b 0d 0a 20 20 20 20 20 20 20 20 20  osed;..         
66f0: 20 20 20 70 72 69 76 61 74 65 20 76 6f 69 64 20     private void 
6700: 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 20  CheckDisposed() 
6710: 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20  /* throw */..   
6720: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
6730: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
6740: 21 64 69 73 70 6f 73 65 64 29 0d 0a 20 20 20 20  !disposed)..    
6750: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6760: 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20  return;....     
6770: 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77             throw
6780: 20 6e 65 77 20 4f 62 6a 65 63 74 44 69 73 70 6f   new ObjectDispo
6790: 73 65 64 45 78 63 65 70 74 69 6f 6e 28 74 79 70  sedException(typ
67a0: 65 6f 66 28 4d 6f 63 6b 52 65 67 69 73 74 72 79  eof(MockRegistry
67b0: 4b 65 79 29 2e 4e 61 6d 65 29 3b 0d 0a 20 20 20  Key).Name);..   
67c0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
67d0: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
67e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
67f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6800: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6810: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
6820: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
6830: 76 61 74 65 20 2f 2a 20 70 72 6f 74 65 63 74 65  vate /* protecte
6840: 64 20 76 69 72 74 75 61 6c 20 2a 2f 20 76 6f 69  d virtual */ voi
6850: 64 20 44 69 73 70 6f 73 65 28 0d 0a 20 20 20 20  d Dispose(..    
6860: 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
6870: 20 64 69 73 70 6f 73 69 6e 67 0d 0a 20 20 20 20   disposing..    
6880: 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
6890: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
68a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
68b0: 20 28 21 64 69 73 70 6f 73 65 64 29 0d 0a 20 20   (!disposed)..  
68c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
68d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
68e0: 20 20 20 20 20 69 66 20 28 64 69 73 70 6f 73 69       if (disposi
68f0: 6e 67 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ng)..           
6900: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
6910: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6920: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
6930: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6940: 2f 2f 2f 2f 2f 2f 2f 2f 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 20 64 69 73 70 6f 73 65 20 6d 61 6e    // dispose man
6970: 61 67 65 64 20 72 65 73 6f 75 72 63 65 73 20 68  aged resources h
6980: 65 72 65 2e 2e 2e 0d 0a 20 20 20 20 20 20 20 20  ere.....        
6990: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
69a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
69b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
69c0: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
69d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
69e0: 69 66 20 28 6b 65 79 20 21 3d 20 6e 75 6c 6c 29  if (key != null)
69f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
6a00: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
6a10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6a20: 20 20 20 20 20 20 20 20 20 6b 65 79 2e 43 6c 6f           key.Clo
6a30: 73 65 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  se();..         
6a40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6a50: 20 20 20 6b 65 79 20 3d 20 6e 75 6c 6c 3b 0d 0a     key = null;..
6a60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6a70: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
6a80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
6a90: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
6aa0: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
6ab0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6ac0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
6ad0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6ae0: 20 20 20 20 2f 2f 20 72 65 6c 65 61 73 65 20 75      // release u
6af0: 6e 6d 61 6e 61 67 65 64 20 72 65 73 6f 75 72 63  nmanaged resourc
6b00: 65 73 20 68 65 72 65 2e 2e 2e 0d 0a 20 20 20 20  es here.....    
6b10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6b20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6b30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6b40: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
6b50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
6b60: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
6b70: 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 54        // NOTE: T
6b80: 68 69 73 20 6f 62 6a 65 63 74 20 69 73 20 6e 6f  his object is no
6b90: 77 20 64 69 73 70 6f 73 65 64 2e 0d 0a 20 20 20  w disposed...   
6ba0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6bb0: 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
6bc0: 20 20 20 20 20 20 20 20 20 64 69 73 70 6f 73 65           dispose
6bd0: 64 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20  d = true;..     
6be0: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
6bf0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
6c00: 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67           #endreg
6c10: 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ion....         
6c20: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
6c30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6c40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6c50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6c60: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
6c70: 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 49 44        #region ID
6c80: 69 73 70 6f 73 61 62 6c 65 20 4d 65 6d 62 65 72  isposable Member
6c90: 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  s..            p
6ca0: 75 62 6c 69 63 20 76 6f 69 64 20 44 69 73 70 6f  ublic void Dispo
6cb0: 73 65 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20  se()..          
6cc0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
6cd0: 20 20 20 20 20 44 69 73 70 6f 73 65 28 74 72 75       Dispose(tru
6ce0: 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e);..           
6cf0: 20 20 20 20 20 47 43 2e 53 75 70 70 72 65 73 73       GC.Suppress
6d00: 46 69 6e 61 6c 69 7a 65 28 74 68 69 73 29 3b 0d  Finalize(this);.
6d10: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
6d20: 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64              #end
6d30: 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
6d40: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
6d50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6d60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6d70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6d80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
6d90: 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e           #region
6da0: 20 44 65 73 74 72 75 63 74 6f 72 0d 0a 20 20 20   Destructor..   
6db0: 20 20 20 20 20 20 20 20 20 7e 4d 6f 63 6b 52 65           ~MockRe
6dc0: 67 69 73 74 72 79 4b 65 79 28 29 0d 0a 20 20 20  gistryKey()..   
6dd0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
6de0: 20 20 20 20 20 20 20 20 20 20 20 20 44 69 73 70              Disp
6df0: 6f 73 65 28 66 61 6c 73 65 29 3b 0d 0a 20 20 20  ose(false);..   
6e00: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
6e10: 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
6e20: 6f 6e 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20  on..        }.. 
6e30: 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
6e40: 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  n....        ///
6e50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6e60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6e70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6e80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6e90: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
6ea0: 23 72 65 67 69 6f 6e 20 52 65 67 69 73 74 72 79  #region Registry
6eb0: 48 65 6c 70 65 72 20 43 6c 61 73 73 0d 0a 20 20  Helper Class..  
6ec0: 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
6ed0: 61 74 69 63 20 63 6c 61 73 73 20 52 65 67 69 73  atic class Regis
6ee0: 74 72 79 48 65 6c 70 65 72 0d 0a 20 20 20 20 20  tryHelper..     
6ef0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
6f00: 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c 69 63    #region Public
6f10: 20 53 74 61 74 69 63 20 50 72 6f 70 65 72 74 69   Static Properti
6f20: 65 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  es..            
6f30: 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 69  private static i
6f40: 6e 74 20 73 75 62 4b 65 79 73 43 72 65 61 74 65  nt subKeysCreate
6f50: 64 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d;..            
6f60: 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 69 6e  public static in
6f70: 74 20 53 75 62 4b 65 79 73 43 72 65 61 74 65 64  t SubKeysCreated
6f80: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
6f90: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
6fa0: 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 73 75   get { return su
6fb0: 62 4b 65 79 73 43 72 65 61 74 65 64 3b 20 7d 0d  bKeysCreated; }.
6fc0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
6fd0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
6fe0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6ff0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7000: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7010: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7020: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
7030: 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
7040: 69 6e 74 20 73 75 62 4b 65 79 73 44 65 6c 65 74  int subKeysDelet
7050: 65 64 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ed;..           
7060: 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 69   public static i
7070: 6e 74 20 53 75 62 4b 65 79 73 44 65 6c 65 74 65  nt SubKeysDelete
7080: 64 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  d..            {
7090: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
70a0: 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 73    get { return s
70b0: 75 62 4b 65 79 73 44 65 6c 65 74 65 64 3b 20 7d  ubKeysDeleted; }
70c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
70d0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
70e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
70f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7100: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7110: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7120: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
7130: 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
7140: 20 69 6e 74 20 6b 65 79 56 61 6c 75 65 73 53 65   int keyValuesSe
7150: 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t;..            
7160: 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 69 6e  public static in
7170: 74 20 4b 65 79 56 61 6c 75 65 73 53 65 74 0d 0a  t KeyValuesSet..
7180: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
7190: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67                 g
71a0: 65 74 20 7b 20 72 65 74 75 72 6e 20 6b 65 79 56  et { return keyV
71b0: 61 6c 75 65 73 53 65 74 3b 20 7d 0d 0a 20 20 20  aluesSet; }..   
71c0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
71d0: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
71e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
71f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7200: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7210: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
7220: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
7230: 76 61 74 65 20 73 74 61 74 69 63 20 69 6e 74 20  vate static int 
7240: 6b 65 79 56 61 6c 75 65 73 44 65 6c 65 74 65 64  keyValuesDeleted
7250: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ;..            p
7260: 75 62 6c 69 63 20 73 74 61 74 69 63 20 69 6e 74  ublic static int
7270: 20 4b 65 79 56 61 6c 75 65 73 44 65 6c 65 74 65   KeyValuesDelete
7280: 64 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  d..            {
7290: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
72a0: 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 6b    get { return k
72b0: 65 79 56 61 6c 75 65 73 44 65 6c 65 74 65 64 3b  eyValuesDeleted;
72c0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
72d0: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  }..            #
72e0: 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
72f0: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
7300: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7310: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7320: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7330: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
7340: 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67              #reg
7350: 69 6f 6e 20 50 75 62 6c 69 63 20 53 74 61 74 69  ion Public Stati
7360: 63 20 4d 65 74 68 6f 64 73 0d 0a 20 20 20 20 20  c Methods..     
7370: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74         public st
7380: 61 74 69 63 20 52 65 67 69 73 74 72 79 4b 65 79  atic RegistryKey
7390: 20 47 65 74 52 6f 6f 74 4b 65 79 42 79 4e 61 6d   GetRootKeyByNam
73a0: 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
73b0: 20 20 20 20 73 74 72 69 6e 67 20 6b 65 79 4e 61      string keyNa
73c0: 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  me..            
73d0: 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20      )..         
73e0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
73f0: 20 20 20 20 20 20 69 66 20 28 53 74 72 69 6e 67        if (String
7400: 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 6b  .IsNullOrEmpty(k
7410: 65 79 4e 61 6d 65 29 29 0d 0a 20 20 20 20 20 20  eyName))..      
7420: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
7430: 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20  turn null;....  
7440: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 77                sw
7450: 69 74 63 68 20 28 6b 65 79 4e 61 6d 65 2e 54 6f  itch (keyName.To
7460: 55 70 70 65 72 49 6e 76 61 72 69 61 6e 74 28 29  UpperInvariant()
7470: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
7480: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
7490: 20 20 20 20 20 20 20 20 20 20 63 61 73 65 20 22            case "
74a0: 48 4b 43 52 22 3a 0d 0a 20 20 20 20 20 20 20 20  HKCR":..        
74b0: 20 20 20 20 20 20 20 20 20 20 20 20 63 61 73 65              case
74c0: 20 22 48 4b 45 59 5f 43 4c 41 53 53 45 53 5f 52   "HKEY_CLASSES_R
74d0: 4f 4f 54 22 3a 0d 0a 20 20 20 20 20 20 20 20 20  OOT":..         
74e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
74f0: 65 74 75 72 6e 20 52 65 67 69 73 74 72 79 2e 43  eturn Registry.C
7500: 6c 61 73 73 65 73 52 6f 6f 74 3b 0d 0a 20 20 20  lassesRoot;..   
7510: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7520: 20 63 61 73 65 20 22 48 4b 43 43 22 3a 0d 0a 20   case "HKCC":.. 
7530: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7540: 20 20 20 63 61 73 65 20 22 48 4b 45 59 5f 43 55     case "HKEY_CU
7550: 52 52 45 4e 54 5f 43 4f 4e 46 49 47 22 3a 0d 0a  RRENT_CONFIG":..
7560: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7570: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 52          return R
7580: 65 67 69 73 74 72 79 2e 43 75 72 72 65 6e 74 43  egistry.CurrentC
7590: 6f 6e 66 69 67 3b 0d 0a 20 20 20 20 20 20 20 20  onfig;..        
75a0: 20 20 20 20 20 20 20 20 20 20 20 20 63 61 73 65              case
75b0: 20 22 48 4b 43 55 22 3a 0d 0a 20 20 20 20 20 20   "HKCU":..      
75c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 61                ca
75d0: 73 65 20 22 48 4b 45 59 5f 43 55 52 52 45 4e 54  se "HKEY_CURRENT
75e0: 5f 55 53 45 52 22 3a 0d 0a 20 20 20 20 20 20 20  _USER":..       
75f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7600: 20 72 65 74 75 72 6e 20 52 65 67 69 73 74 72 79   return Registry
7610: 2e 43 75 72 72 65 6e 74 55 73 65 72 3b 0d 0a 20  .CurrentUser;.. 
7620: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7630: 20 20 20 63 61 73 65 20 22 48 4b 44 44 22 3a 0d     case "HKDD":.
7640: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
7650: 20 20 20 20 20 63 61 73 65 20 22 48 4b 45 59 5f       case "HKEY_
7660: 44 59 4e 5f 44 41 54 41 22 3a 0d 0a 20 20 20 20  DYN_DATA":..    
7670: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7680: 20 20 20 20 72 65 74 75 72 6e 20 52 65 67 69 73      return Regis
7690: 74 72 79 2e 44 79 6e 44 61 74 61 3b 0d 0a 20 20  try.DynData;..  
76a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
76b0: 20 20 63 61 73 65 20 22 48 4b 4c 4d 22 3a 0d 0a    case "HKLM":..
76c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
76d0: 20 20 20 20 63 61 73 65 20 22 48 4b 45 59 5f 4c      case "HKEY_L
76e0: 4f 43 41 4c 5f 4d 41 43 48 49 4e 45 22 3a 0d 0a  OCAL_MACHINE":..
76f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7700: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 52          return R
7710: 65 67 69 73 74 72 79 2e 4c 6f 63 61 6c 4d 61 63  egistry.LocalMac
7720: 68 69 6e 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  hine;..         
7730: 20 20 20 20 20 20 20 20 20 20 20 63 61 73 65 20             case 
7740: 22 48 4b 50 44 22 3a 0d 0a 20 20 20 20 20 20 20  "HKPD":..       
7750: 20 20 20 20 20 20 20 20 20 20 20 20 20 63 61 73               cas
7760: 65 20 22 48 4b 45 59 5f 50 45 52 46 4f 52 4d 41  e "HKEY_PERFORMA
7770: 4e 43 45 5f 44 41 54 41 22 3a 0d 0a 20 20 20 20  NCE_DATA":..    
7780: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7790: 20 20 20 20 72 65 74 75 72 6e 20 52 65 67 69 73      return Regis
77a0: 74 72 79 2e 50 65 72 66 6f 72 6d 61 6e 63 65 44  try.PerformanceD
77b0: 61 74 61 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ata;..          
77c0: 20 20 20 20 20 20 20 20 20 20 63 61 73 65 20 22            case "
77d0: 48 4b 55 22 3a 0d 0a 20 20 20 20 20 20 20 20 20  HKU":..         
77e0: 20 20 20 20 20 20 20 20 20 20 20 63 61 73 65 20             case 
77f0: 22 48 4b 45 59 5f 55 53 45 52 53 22 3a 0d 0a 20  "HKEY_USERS":.. 
7800: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7810: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 52 65         return Re
7820: 67 69 73 74 72 79 2e 55 73 65 72 73 3b 0d 0a 20  gistry.Users;.. 
7830: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
7840: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
7850: 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b      return null;
7860: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
7870: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
7880: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7890: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
78a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
78b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
78c0: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
78d0: 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20    public static 
78e0: 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20  MockRegistryKey 
78f0: 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20  OpenSubKey(..   
7900: 20 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63               Moc
7910: 6b 52 65 67 69 73 74 72 79 4b 65 79 20 72 6f 6f  kRegistryKey roo
7920: 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20  tKey,..         
7930: 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 73 75         string su
7940: 62 4b 65 79 4e 61 6d 65 2c 0d 0a 20 20 20 20 20  bKeyName,..     
7950: 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
7960: 77 72 69 74 61 62 6c 65 2c 0d 0a 20 20 20 20 20  writable,..     
7970: 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
7980: 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20  whatIf,..       
7990: 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65           bool ve
79a0: 72 62 6f 73 65 0d 0a 20 20 20 20 20 20 20 20 20  rbose..         
79b0: 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
79c0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
79d0: 20 20 20 20 20 20 20 20 20 69 66 20 28 72 6f 6f           if (roo
79e0: 74 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  tKey == null).. 
79f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7a00: 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d     return null;.
7a10: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
7a20: 20 20 20 69 66 20 28 76 65 72 62 6f 73 65 29 0d     if (verbose).
7a30: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
7a40: 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 54 72       TraceOps.Tr
7a50: 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ace(..          
7a60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 77 72                wr
7a70: 69 74 61 62 6c 65 20 3f 20 54 72 61 63 65 50 72  itable ? TracePr
7a80: 69 6f 72 69 74 79 2e 48 69 67 68 65 73 74 20 3a  iority.Highest :
7a90: 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 48   TracePriority.H
7aa0: 69 67 68 65 72 2c 0d 0a 20 20 20 20 20 20 20 20  igher,..        
7ab0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7ac0: 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53  traceCallback, S
7ad0: 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22 72 6f  tring.Format("ro
7ae0: 6f 74 4b 65 79 20 3d 20 7b 30 7d 2c 20 22 20 2b  otKey = {0}, " +
7af0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
7b00: 20 20 20 20 20 20 20 20 20 20 22 73 75 62 4b 65            "subKe
7b10: 79 4e 61 6d 65 20 3d 20 7b 31 7d 2c 20 77 72 69  yName = {1}, wri
7b20: 74 61 62 6c 65 20 3d 20 7b 32 7d 22 2c 20 46 6f  table = {2}", Fo
7b30: 72 44 69 73 70 6c 61 79 28 72 6f 6f 74 4b 65 79  rDisplay(rootKey
7b40: 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
7b50: 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44              ForD
7b60: 69 73 70 6c 61 79 28 73 75 62 4b 65 79 4e 61 6d  isplay(subKeyNam
7b70: 65 29 2c 20 77 72 69 74 61 62 6c 65 29 2c 20 74  e), writable), t
7b80: 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
7b90: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
7ba0: 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
7bb0: 20 20 20 20 20 20 2f 2f 20 48 41 43 4b 3a 20 41        // HACK: A
7bc0: 6c 77 61 79 73 20 66 6f 72 62 69 64 20 77 72 69  lways forbid wri
7bd0: 74 61 62 6c 65 20 61 63 63 65 73 73 20 77 68 65  table access whe
7be0: 6e 20 6f 70 65 72 61 74 69 6e 67 20 69 6e 0d 0a  n operating in..
7bf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7c00: 2f 2f 20 20 20 20 20 20 20 27 77 68 61 74 2d 69  //       'what-i
7c10: 66 27 20 6d 6f 64 65 2e 0d 0a 20 20 20 20 20 20  f' mode...      
7c20: 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
7c30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f                Mo
7c40: 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65  ckRegistryKey ke
7c50: 79 20 3d 20 72 6f 6f 74 4b 65 79 2e 4f 70 65 6e  y = rootKey.Open
7c60: 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20  SubKey(..       
7c70: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 75 62               sub
7c80: 4b 65 79 4e 61 6d 65 2c 20 77 68 61 74 49 66 20  KeyName, whatIf 
7c90: 3f 20 66 61 6c 73 65 20 3a 20 77 72 69 74 61 62  ? false : writab
7ca0: 6c 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  le);....        
7cb0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 28          return (
7cc0: 6b 65 79 20 21 3d 20 6e 75 6c 6c 29 20 3f 0d 0a  key != null) ?..
7cd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7ce0: 20 20 20 20 6e 65 77 20 4d 6f 63 6b 52 65 67 69      new MockRegi
7cf0: 73 74 72 79 4b 65 79 28 6b 65 79 2c 20 77 68 61  stryKey(key, wha
7d00: 74 49 66 2c 20 66 61 6c 73 65 2c 20 66 61 6c 73  tIf, false, fals
7d10: 65 29 20 3a 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20  e) : null;..    
7d20: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
7d30: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
7d40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7d50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7d60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7d70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
7d80: 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
7d90: 69 63 20 73 74 61 74 69 63 20 4d 6f 63 6b 52 65  ic static MockRe
7da0: 67 69 73 74 72 79 4b 65 79 20 43 72 65 61 74 65  gistryKey Create
7db0: 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20  SubKey(..       
7dc0: 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67           MockReg
7dd0: 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79  istryKey rootKey
7de0: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
7df0: 20 20 20 73 74 72 69 6e 67 20 73 75 62 4b 65 79     string subKey
7e00: 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  Name,..         
7e10: 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74         bool what
7e20: 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  If,..           
7e30: 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73       bool verbos
7e40: 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
7e50: 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20     )..          
7e60: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
7e70: 20 20 20 20 20 69 66 20 28 72 6f 6f 74 4b 65 79       if (rootKey
7e80: 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
7e90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
7ea0: 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20  eturn null;.... 
7eb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
7ec0: 66 20 28 76 65 72 62 6f 73 65 29 0d 0a 20 20 20  f (verbose)..   
7ed0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7ee0: 20 54 72 61 63 65 4f 70 73 2e 54 72 61 63 65 28   TraceOps.Trace(
7ef0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
7f00: 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 50            TraceP
7f10: 72 69 6f 72 69 74 79 2e 48 69 67 68 65 73 74 2c  riority.Highest,
7f20: 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20   traceCallback, 
7f30: 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
7f40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7f50: 20 20 20 20 20 20 20 20 22 72 6f 6f 74 4b 65 79          "rootKey
7f60: 20 3d 20 7b 30 7d 2c 20 73 75 62 4b 65 79 4e 61   = {0}, subKeyNa
7f70: 6d 65 20 3d 20 7b 31 7d 22 2c 20 46 6f 72 44 69  me = {1}", ForDi
7f80: 73 70 6c 61 79 28 72 6f 6f 74 4b 65 79 29 2c 0d  splay(rootKey),.
7f90: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
7fa0: 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70           ForDisp
7fb0: 6c 61 79 28 73 75 62 4b 65 79 4e 61 6d 65 29 29  lay(subKeyName))
7fc0: 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29  , traceCategory)
7fd0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
7fe0: 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20       try..      
7ff0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
8000: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8010: 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
8020: 20 20 20 20 20 20 20 20 20 2f 2f 20 48 41 43 4b           // HACK
8030: 3a 20 41 6c 77 61 79 73 20 6f 70 65 6e 20 61 20  : Always open a 
8040: 6b 65 79 2c 20 72 61 74 68 65 72 20 74 68 61 6e  key, rather than
8050: 20 63 72 65 61 74 69 6e 67 20 6f 6e 65 20 77 68   creating one wh
8060: 65 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  en..            
8070: 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
8080: 20 6f 70 65 72 61 74 69 6e 67 20 69 6e 20 27 77   operating in 'w
8090: 68 61 74 2d 69 66 27 20 6d 6f 64 65 2e 0d 0a 20  hat-if' mode... 
80a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
80b0: 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
80c0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 77             if (w
80d0: 68 61 74 49 66 29 0d 0a 20 20 20 20 20 20 20 20  hatIf)..        
80e0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
80f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8100: 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
8110: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8120: 20 20 20 2f 2f 20 48 41 43 4b 3a 20 41 74 74 65     // HACK: Atte
8130: 6d 70 74 20 74 6f 20 6f 70 65 6e 20 74 68 65 20  mpt to open the 
8140: 73 70 65 63 69 66 69 65 64 20 73 75 62 2d 6b 65  specified sub-ke
8150: 79 2e 20 20 49 66 0d 0a 20 20 20 20 20 20 20 20  y.  If..        
8160: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8170: 2f 2f 20 20 20 20 20 20 20 74 68 69 73 20 66 61  //       this fa
8180: 69 6c 73 2c 20 77 65 20 77 69 6c 6c 20 73 69 6d  ils, we will sim
8190: 70 6c 79 20 72 65 74 75 72 6e 20 74 68 65 20 72  ply return the r
81a0: 6f 6f 74 20 6b 65 79 0d 0a 20 20 20 20 20 20 20  oot key..       
81b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
81c0: 20 2f 2f 20 20 20 20 20 20 20 69 74 73 65 6c 66   //       itself
81d0: 20 73 69 6e 63 65 20 6e 6f 20 77 72 69 74 65 73   since no writes
81e0: 20 61 72 65 20 61 6c 6c 6f 77 65 64 20 69 6e 0d   are allowed in.
81f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
8200: 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
8210: 20 20 27 77 68 61 74 2d 69 66 27 20 6d 6f 64 65    'what-if' mode
8220: 20 61 6e 79 68 6f 77 2e 0d 0a 20 20 20 20 20 20   anyhow...      
8230: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8240: 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
8250: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f                Mo
8260: 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65  ckRegistryKey ke
8270: 79 20 3d 20 72 6f 6f 74 4b 65 79 2e 4f 70 65 6e  y = rootKey.Open
8280: 53 75 62 4b 65 79 28 73 75 62 4b 65 79 4e 61 6d  SubKey(subKeyNam
8290: 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
82a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
82b0: 65 74 75 72 6e 20 28 6b 65 79 20 21 3d 20 6e 75  eturn (key != nu
82c0: 6c 6c 29 20 3f 0d 0a 20 20 20 20 20 20 20 20 20  ll) ?..         
82d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
82e0: 20 20 20 6b 65 79 20 3a 20 6e 65 77 20 4d 6f 63     key : new Moc
82f0: 6b 52 65 67 69 73 74 72 79 4b 65 79 28 0d 0a 20  kRegistryKey(.. 
8300: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8310: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
8320: 6f 6f 74 4b 65 79 2c 20 73 75 62 4b 65 79 4e 61  ootKey, subKeyNa
8330: 6d 65 2c 20 74 72 75 65 2c 20 66 61 6c 73 65 2c  me, true, false,
8340: 20 66 61 6c 73 65 29 3b 0d 0a 20 20 20 20 20 20   false);..      
8350: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
8360: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
8370: 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20       else..     
8380: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
8390: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
83a0: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
83b0: 20 6e 65 77 20 4d 6f 63 6b 52 65 67 69 73 74 72   new MockRegistr
83c0: 79 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20  yKey(..         
83d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
83e0: 20 20 20 72 6f 6f 74 4b 65 79 2e 43 72 65 61 74     rootKey.Creat
83f0: 65 53 75 62 4b 65 79 28 73 75 62 4b 65 79 4e 61  eSubKey(subKeyNa
8400: 6d 65 29 2c 20 66 61 6c 73 65 2c 20 66 61 6c 73  me), false, fals
8410: 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
8420: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8430: 66 61 6c 73 65 29 3b 0d 0a 20 20 20 20 20 20 20  false);..       
8440: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
8450: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8460: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
8470: 20 20 20 66 69 6e 61 6c 6c 79 0d 0a 20 20 20 20     finally..    
8480: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
8490: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
84a0: 20 20 20 73 75 62 4b 65 79 73 43 72 65 61 74 65     subKeysCreate
84b0: 64 2b 2b 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  d++;..          
84c0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
84d0: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
84e0: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
84f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8500: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8510: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8520: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
8530: 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
8540: 73 74 61 74 69 63 20 76 6f 69 64 20 44 65 6c 65  static void Dele
8550: 74 65 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20  teSubKey(..     
8560: 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52             MockR
8570: 65 67 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b  egistryKey rootK
8580: 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey,..           
8590: 20 20 20 20 20 73 74 72 69 6e 67 20 73 75 62 4b       string subK
85a0: 65 79 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20  eyName,..       
85b0: 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68           bool wh
85c0: 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20  atIf,..         
85d0: 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62         bool verb
85e0: 6f 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ose..           
85f0: 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
8600: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
8610: 20 20 20 20 20 20 20 69 66 20 28 72 6f 6f 74 4b         if (rootK
8620: 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ey == null)..   
8630: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8640: 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20   return;....    
8650: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
8660: 76 65 72 62 6f 73 65 29 0d 0a 20 20 20 20 20 20  verbose)..      
8670: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
8680: 61 63 65 4f 70 73 2e 54 72 61 63 65 28 0d 0a 20  aceOps.Trace(.. 
8690: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
86a0: 20 20 20 20 20 20 20 54 72 61 63 65 50 72 69 6f         TracePrio
86b0: 72 69 74 79 2e 48 69 67 68 65 73 74 2c 20 74 72  rity.Highest, tr
86c0: 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72  aceCallback, Str
86d0: 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
86e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
86f0: 20 20 20 20 20 22 72 6f 6f 74 4b 65 79 20 3d 20       "rootKey = 
8700: 7b 30 7d 2c 20 73 75 62 4b 65 79 4e 61 6d 65 20  {0}, subKeyName 
8710: 3d 20 7b 31 7d 22 2c 20 46 6f 72 44 69 73 70 6c  = {1}", ForDispl
8720: 61 79 28 72 6f 6f 74 4b 65 79 29 2c 0d 0a 20 20  ay(rootKey),..  
8730: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8740: 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79        ForDisplay
8750: 28 73 75 62 4b 65 79 4e 61 6d 65 29 29 2c 20 74  (subKeyName)), t
8760: 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
8770: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8780: 20 20 69 66 20 28 21 77 68 61 74 49 66 29 0d 0a    if (!whatIf)..
8790: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
87a0: 20 20 20 20 72 6f 6f 74 4b 65 79 2e 44 65 6c 65      rootKey.Dele
87b0: 74 65 53 75 62 4b 65 79 28 73 75 62 4b 65 79 4e  teSubKey(subKeyN
87c0: 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ame);....       
87d0: 20 20 20 20 20 20 20 20 20 73 75 62 4b 65 79 73           subKeys
87e0: 44 65 6c 65 74 65 64 2b 2b 3b 0d 0a 20 20 20 20  Deleted++;..    
87f0: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
8800: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
8810: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8820: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8830: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8840: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
8850: 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
8860: 69 63 20 73 74 61 74 69 63 20 76 6f 69 64 20 44  ic static void D
8870: 65 6c 65 74 65 53 75 62 4b 65 79 54 72 65 65 28  eleteSubKeyTree(
8880: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8890: 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65    MockRegistryKe
88a0: 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 20  y rootKey,..    
88b0: 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
88c0: 6e 67 20 73 75 62 4b 65 79 4e 61 6d 65 2c 0d 0a  ng subKeyName,..
88d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
88e0: 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20  bool whatIf,..  
88f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
8900: 6f 6c 20 76 65 72 62 6f 73 65 0d 0a 20 20 20 20  ol verbose..    
8910: 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
8920: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
8930: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
8940: 20 28 72 6f 6f 74 4b 65 79 20 3d 3d 20 6e 75 6c   (rootKey == nul
8950: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
8960: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 3b 0d          return;.
8970: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
8980: 20 20 20 69 66 20 28 76 65 72 62 6f 73 65 29 0d     if (verbose).
8990: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
89a0: 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 54 72       TraceOps.Tr
89b0: 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ace(..          
89c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
89d0: 61 63 65 50 72 69 6f 72 69 74 79 2e 48 69 67 68  acePriority.High
89e0: 65 73 74 2c 20 74 72 61 63 65 43 61 6c 6c 62 61  est, traceCallba
89f0: 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ck, String.Forma
8a00: 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
8a10: 20 20 20 20 20 20 20 20 20 20 20 20 22 72 6f 6f              "roo
8a20: 74 4b 65 79 20 3d 20 7b 30 7d 2c 20 73 75 62 4b  tKey = {0}, subK
8a30: 65 79 4e 61 6d 65 20 3d 20 7b 31 7d 22 2c 20 46  eyName = {1}", F
8a40: 6f 72 44 69 73 70 6c 61 79 28 72 6f 6f 74 4b 65  orDisplay(rootKe
8a50: 79 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  y),..           
8a60: 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72               For
8a70: 44 69 73 70 6c 61 79 28 73 75 62 4b 65 79 4e 61  Display(subKeyNa
8a80: 6d 65 29 29 2c 20 74 72 61 63 65 43 61 74 65 67  me)), traceCateg
8a90: 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
8aa0: 20 20 20 20 20 20 20 20 20 69 66 20 28 21 77 68           if (!wh
8ab0: 61 74 49 66 29 0d 0a 20 20 20 20 20 20 20 20 20  atIf)..         
8ac0: 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b             rootK
8ad0: 65 79 2e 44 65 6c 65 74 65 53 75 62 4b 65 79 54  ey.DeleteSubKeyT
8ae0: 72 65 65 28 73 75 62 4b 65 79 4e 61 6d 65 29 3b  ree(subKeyName);
8af0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
8b00: 20 20 20 20 73 75 62 4b 65 79 73 44 65 6c 65 74      subKeysDelet
8b10: 65 64 2b 2b 3b 0d 0a 20 20 20 20 20 20 20 20 20  ed++;..         
8b20: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
8b30: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
8b40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8b50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8b60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8b70: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
8b80: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74         public st
8b90: 61 74 69 63 20 73 74 72 69 6e 67 5b 5d 20 47 65  atic string[] Ge
8ba0: 74 53 75 62 4b 65 79 4e 61 6d 65 73 28 0d 0a 20  tSubKeyNames(.. 
8bb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4d                 M
8bc0: 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 6b  ockRegistryKey k
8bd0: 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey,..           
8be0: 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66       bool whatIf
8bf0: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
8c00: 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 0d     bool verbose.
8c10: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
8c20: 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   )..            
8c30: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
8c40: 20 20 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75     if (key == nu
8c50: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
8c60: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
8c70: 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  null;....       
8c80: 20 20 20 20 20 20 20 20 20 69 66 20 28 76 65 72           if (ver
8c90: 62 6f 73 65 29 0d 0a 20 20 20 20 20 20 20 20 20  bose)..         
8ca0: 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
8cb0: 4f 70 73 2e 54 72 61 63 65 28 0d 0a 20 20 20 20  Ops.Trace(..    
8cc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8cd0: 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69 74      TracePriorit
8ce0: 79 2e 48 69 67 68 2c 20 74 72 61 63 65 43 61 6c  y.High, traceCal
8cf0: 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f  lback, String.Fo
8d00: 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
8d10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
8d20: 6b 65 79 20 3d 20 7b 30 7d 22 2c 20 46 6f 72 44  key = {0}", ForD
8d30: 69 73 70 6c 61 79 28 6b 65 79 29 29 2c 20 74 72  isplay(key)), tr
8d40: 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
8d50: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
8d60: 20 72 65 74 75 72 6e 20 6b 65 79 2e 47 65 74 53   return key.GetS
8d70: 75 62 4b 65 79 4e 61 6d 65 73 28 29 3b 0d 0a 20  ubKeyNames();.. 
8d80: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
8d90: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
8da0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8db0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8dc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8dd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
8de0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
8df0: 75 62 6c 69 63 20 73 74 61 74 69 63 20 6f 62 6a  ublic static obj
8e00: 65 63 74 20 47 65 74 56 61 6c 75 65 28 0d 0a 20  ect GetValue(.. 
8e10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4d                 M
8e20: 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 6b  ockRegistryKey k
8e30: 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey,..           
8e40: 20 20 20 20 20 73 74 72 69 6e 67 20 6e 61 6d 65       string name
8e50: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
8e60: 20 20 20 6f 62 6a 65 63 74 20 64 65 66 61 75 6c     object defaul
8e70: 74 56 61 6c 75 65 2c 0d 0a 20 20 20 20 20 20 20  tValue,..       
8e80: 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68           bool wh
8e90: 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20  atIf,..         
8ea0: 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62         bool verb
8eb0: 6f 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ose..           
8ec0: 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
8ed0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
8ee0: 20 20 20 20 20 20 20 69 66 20 28 6b 65 79 20 3d         if (key =
8ef0: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
8f00: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
8f10: 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20  urn null;....   
8f20: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
8f30: 28 76 65 72 62 6f 73 65 29 0d 0a 20 20 20 20 20  (verbose)..     
8f40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
8f50: 72 61 63 65 4f 70 73 2e 54 72 61 63 65 28 0d 0a  raceOps.Trace(..
8f60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8f70: 20 20 20 20 20 20 20 20 54 72 61 63 65 50 72 69          TracePri
8f80: 6f 72 69 74 79 2e 48 69 67 68 2c 20 74 72 61 63  ority.High, trac
8f90: 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e  eCallback, Strin
8fa0: 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
8fb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8fc0: 20 20 20 22 6b 65 79 20 3d 20 7b 30 7d 2c 20 6e     "key = {0}, n
8fd0: 61 6d 65 20 3d 20 7b 31 7d 2c 20 64 65 66 61 75  ame = {1}, defau
8fe0: 6c 74 56 61 6c 75 65 20 3d 20 7b 32 7d 22 2c 0d  ltValue = {2}",.
8ff0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
9000: 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70           ForDisp
9010: 6c 61 79 28 6b 65 79 29 2c 20 46 6f 72 44 69 73  lay(key), ForDis
9020: 70 6c 61 79 28 6e 61 6d 65 29 2c 0d 0a 20 20 20  play(name),..   
9030: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9040: 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28       ForDisplay(
9050: 64 65 66 61 75 6c 74 56 61 6c 75 65 29 29 2c 20  defaultValue)), 
9060: 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
9070: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
9080: 20 20 20 72 65 74 75 72 6e 20 6b 65 79 2e 47 65     return key.Ge
9090: 74 56 61 6c 75 65 28 6e 61 6d 65 2c 20 64 65 66  tValue(name, def
90a0: 61 75 6c 74 56 61 6c 75 65 29 3b 0d 0a 20 20 20  aultValue);..   
90b0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
90c0: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
90d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
90e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
90f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9100: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
9110: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
9120: 6c 69 63 20 73 74 61 74 69 63 20 76 6f 69 64 20  lic static void 
9130: 53 65 74 56 61 6c 75 65 28 0d 0a 20 20 20 20 20  SetValue(..     
9140: 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52             MockR
9150: 65 67 69 73 74 72 79 4b 65 79 20 6b 65 79 2c 0d  egistryKey key,.
9160: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
9170: 20 73 74 72 69 6e 67 20 6e 61 6d 65 2c 0d 0a 20   string name,.. 
9180: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f                 o
9190: 62 6a 65 63 74 20 76 61 6c 75 65 2c 0d 0a 20 20  bject value,..  
91a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
91b0: 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20  ol whatIf,..    
91c0: 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
91d0: 20 76 65 72 62 6f 73 65 0d 0a 20 20 20 20 20 20   verbose..      
91e0: 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
91f0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
9200: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
9210: 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  key == null)..  
9220: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9230: 20 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20    return;....   
9240: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
9250: 28 76 65 72 62 6f 73 65 29 0d 0a 20 20 20 20 20  (verbose)..     
9260: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
9270: 72 61 63 65 4f 70 73 2e 54 72 61 63 65 28 0d 0a  raceOps.Trace(..
9280: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9290: 20 20 20 20 20 20 20 20 54 72 61 63 65 50 72 69          TracePri
92a0: 6f 72 69 74 79 2e 48 69 67 68 65 73 74 2c 20 74  ority.Highest, t
92b0: 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74  raceCallback, St
92c0: 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
92d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
92e0: 20 20 20 20 20 20 22 6b 65 79 20 3d 20 7b 30 7d        "key = {0}
92f0: 2c 20 6e 61 6d 65 20 3d 20 7b 31 7d 2c 20 76 61  , name = {1}, va
9300: 6c 75 65 20 3d 20 7b 32 7d 22 2c 20 46 6f 72 44  lue = {2}", ForD
9310: 69 73 70 6c 61 79 28 6b 65 79 29 2c 0d 0a 20 20  isplay(key),..  
9320: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9330: 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79        ForDisplay
9340: 28 6e 61 6d 65 29 2c 20 46 6f 72 44 69 73 70 6c  (name), ForDispl
9350: 61 79 28 76 61 6c 75 65 29 29 2c 20 74 72 61 63  ay(value)), trac
9360: 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
9370: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
9380: 66 20 28 21 77 68 61 74 49 66 29 0d 0a 20 20 20  f (!whatIf)..   
9390: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
93a0: 20 6b 65 79 2e 53 65 74 56 61 6c 75 65 28 6e 61   key.SetValue(na
93b0: 6d 65 2c 20 76 61 6c 75 65 29 3b 0d 0a 0d 0a 20  me, value);.... 
93c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b                 k
93d0: 65 79 56 61 6c 75 65 73 53 65 74 2b 2b 3b 0d 0a  eyValuesSet++;..
93e0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
93f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
9400: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9410: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9420: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9430: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9440: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
9450: 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 76 6f  public static vo
9460: 69 64 20 44 65 6c 65 74 65 56 61 6c 75 65 28 0d  id DeleteValue(.
9470: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
9480: 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79   MockRegistryKey
9490: 20 6b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20   key,..         
94a0: 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6e 61         string na
94b0: 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me,..           
94c0: 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66       bool whatIf
94d0: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
94e0: 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 0d     bool verbose.
94f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
9500: 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   )..            
9510: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
9520: 20 20 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75     if (key == nu
9530: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
9540: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 3b           return;
9550: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
9560: 20 20 20 20 69 66 20 28 76 65 72 62 6f 73 65 29      if (verbose)
9570: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
9580: 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 54        TraceOps.T
9590: 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20  race(..         
95a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
95b0: 72 61 63 65 50 72 69 6f 72 69 74 79 2e 48 69 67  racePriority.Hig
95c0: 68 65 73 74 2c 20 74 72 61 63 65 43 61 6c 6c 62  hest, traceCallb
95d0: 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d  ack, String.Form
95e0: 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
95f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 22 6b 65               "ke
9600: 79 20 3d 20 7b 30 7d 2c 20 6e 61 6d 65 20 3d 20  y = {0}, name = 
9610: 7b 31 7d 22 2c 20 46 6f 72 44 69 73 70 6c 61 79  {1}", ForDisplay
9620: 28 6b 65 79 29 2c 0d 0a 20 20 20 20 20 20 20 20  (key),..        
9630: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9640: 46 6f 72 44 69 73 70 6c 61 79 28 6e 61 6d 65 29  ForDisplay(name)
9650: 29 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72 79  ), traceCategory
9660: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
9670: 20 20 20 20 20 20 69 66 20 28 21 77 68 61 74 49        if (!whatI
9680: 66 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f)..            
9690: 20 20 20 20 20 20 20 20 6b 65 79 2e 44 65 6c 65          key.Dele
96a0: 74 65 56 61 6c 75 65 28 6e 61 6d 65 29 3b 0d 0a  teValue(name);..
96b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
96c0: 20 20 6b 65 79 56 61 6c 75 65 73 44 65 6c 65 74    keyValuesDelet
96d0: 65 64 2b 2b 3b 0d 0a 20 20 20 20 20 20 20 20 20  ed++;..         
96e0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
96f0: 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 20 20    #endregion..  
9700: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
9710: 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
9720: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
9730: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9740: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9750: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9760: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
9770: 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f  ..        #regio
9780: 6e 20 53 74 72 69 6e 67 4c 69 73 74 20 43 6c 61  n StringList Cla
9790: 73 73 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  ss..        priv
97a0: 61 74 65 20 73 65 61 6c 65 64 20 63 6c 61 73 73  ate sealed class
97b0: 20 53 74 72 69 6e 67 4c 69 73 74 20 3a 20 4c 69   StringList : Li
97c0: 73 74 3c 73 74 72 69 6e 67 3e 0d 0a 20 20 20 20  st<string>..    
97d0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
97e0: 20 20 20 70 75 62 6c 69 63 20 53 74 72 69 6e 67     public String
97f0: 4c 69 73 74 28 29 0d 0a 20 20 20 20 20 20 20 20  List()..        
9800: 20 20 20 20 20 20 20 20 3a 20 62 61 73 65 28 29          : base()
9810: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
9820: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
9830: 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d   // do nothing..
9840: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
9850: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
9860: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9870: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9880: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9890: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
98a0: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
98b0: 20 70 75 62 6c 69 63 20 53 74 72 69 6e 67 4c 69   public StringLi
98c0: 73 74 28 49 45 6e 75 6d 65 72 61 62 6c 65 3c 73  st(IEnumerable<s
98d0: 74 72 69 6e 67 3e 20 63 6f 6c 6c 65 63 74 69 6f  tring> collectio
98e0: 6e 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n)..            
98f0: 20 20 20 20 3a 20 62 61 73 65 28 63 6f 6c 6c 65      : base(colle
9900: 63 74 69 6f 6e 29 0d 0a 20 20 20 20 20 20 20 20  ction)..        
9910: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
9920: 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74         // do not
9930: 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 20  hing...         
9940: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d     }..        }.
9950: 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67  .        #endreg
9960: 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  ion....        /
9970: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9980: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9990: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
99a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
99b0: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
99c0: 20 20 23 72 65 67 69 6f 6e 20 53 74 72 69 6e 67    #region String
99d0: 44 69 63 74 69 6f 6e 61 72 79 20 43 6c 61 73 73  Dictionary Class
99e0: 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
99f0: 65 20 73 65 61 6c 65 64 20 63 6c 61 73 73 20 53  e sealed class S
9a00: 74 72 69 6e 67 44 69 63 74 69 6f 6e 61 72 79 20  tringDictionary 
9a10: 3a 20 44 69 63 74 69 6f 6e 61 72 79 3c 73 74 72  : Dictionary<str
9a20: 69 6e 67 2c 20 73 74 72 69 6e 67 3e 0d 0a 20 20  ing, string>..  
9a30: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
9a40: 20 20 20 20 20 70 75 62 6c 69 63 20 53 74 72 69       public Stri
9a50: 6e 67 44 69 63 74 69 6f 6e 61 72 79 28 29 0d 0a  ngDictionary()..
9a60: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
9a70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
9a80: 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20  / do nothing... 
9a90: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
9aa0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
9ab0: 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
9ac0: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
9ad0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9ae0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9af0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9b00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
9b10: 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f  ..        #regio
9b20: 6e 20 56 65 72 73 69 6f 6e 4c 69 73 74 20 43 6c  n VersionList Cl
9b30: 61 73 73 0d 0a 20 20 20 20 20 20 20 20 70 72 69  ass..        pri
9b40: 76 61 74 65 20 73 65 61 6c 65 64 20 63 6c 61 73  vate sealed clas
9b50: 73 20 56 65 72 73 69 6f 6e 4c 69 73 74 20 3a 20  s VersionList : 
9b60: 4c 69 73 74 3c 56 65 72 73 69 6f 6e 3e 0d 0a 20  List<Version>.. 
9b70: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
9b80: 20 20 20 20 20 20 70 75 62 6c 69 63 20 56 65 72        public Ver
9b90: 73 69 6f 6e 4c 69 73 74 28 29 0d 0a 20 20 20 20  sionList()..    
9ba0: 20 20 20 20 20 20 20 20 20 20 20 20 3a 20 62 61              : ba
9bb0: 73 65 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20  se()..          
9bc0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
9bd0: 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69       // do nothi
9be0: 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ng...           
9bf0: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
9c00: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
9c10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9c20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9c30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9c40: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
9c50: 20 20 20 20 20 70 75 62 6c 69 63 20 56 65 72 73       public Vers
9c60: 69 6f 6e 4c 69 73 74 28 49 45 6e 75 6d 65 72 61  ionList(IEnumera
9c70: 62 6c 65 3c 56 65 72 73 69 6f 6e 3e 20 63 6f 6c  ble<Version> col
9c80: 6c 65 63 74 69 6f 6e 29 0d 0a 20 20 20 20 20 20  lection)..      
9c90: 20 20 20 20 20 20 20 20 20 20 3a 20 62 61 73 65            : base
9ca0: 28 63 6f 6c 6c 65 63 74 69 6f 6e 29 0d 0a 20 20  (collection)..  
9cb0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
9cc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
9cd0: 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20  do nothing...   
9ce0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
9cf0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23      }..        #
9d00: 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
9d10: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
9d20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9d30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9d40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9d50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
9d60: 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
9d70: 56 65 72 73 69 6f 6e 4d 61 70 20 43 6c 61 73 73  VersionMap Class
9d80: 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
9d90: 65 20 73 65 61 6c 65 64 20 63 6c 61 73 73 20 56  e sealed class V
9da0: 65 72 73 69 6f 6e 4d 61 70 20 3a 20 44 69 63 74  ersionMap : Dict
9db0: 69 6f 6e 61 72 79 3c 73 74 72 69 6e 67 2c 20 56  ionary<string, V
9dc0: 65 72 73 69 6f 6e 4c 69 73 74 3e 0d 0a 20 20 20  ersionList>..   
9dd0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
9de0: 20 20 20 20 70 75 62 6c 69 63 20 56 65 72 73 69      public Versi
9df0: 6f 6e 4d 61 70 28 29 0d 0a 20 20 20 20 20 20 20  onMap()..       
9e00: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
9e10: 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f          // do no
9e20: 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20  thing...        
9e30: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d      }..        }
9e40: 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65  ..        #endre
9e50: 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
9e60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9e70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9e80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9e90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9ea0: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
9eb0: 20 20 20 23 72 65 67 69 6f 6e 20 43 6f 6e 66 69     #region Confi
9ec0: 67 75 72 61 74 69 6f 6e 20 43 6c 61 73 73 0d 0a  guration Class..
9ed0: 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
9ee0: 73 65 61 6c 65 64 20 63 6c 61 73 73 20 43 6f 6e  sealed class Con
9ef0: 66 69 67 75 72 61 74 69 6f 6e 0d 0a 20 20 20 20  figuration..    
9f00: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
9f10: 20 20 20 23 72 65 67 69 6f 6e 20 50 72 69 76 61     #region Priva
9f20: 74 65 20 43 6f 6e 73 74 61 6e 74 73 0d 0a 20 20  te Constants..  
9f30: 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
9f40: 65 20 63 6f 6e 73 74 20 63 68 61 72 20 53 77 69  e const char Swi
9f50: 74 63 68 20 3d 20 27 2d 27 3b 0d 0a 20 20 20 20  tch = '-';..    
9f60: 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
9f70: 63 6f 6e 73 74 20 63 68 61 72 20 41 6c 74 53 77  const char AltSw
9f80: 69 74 63 68 20 3d 20 27 2f 27 3b 0d 0a 0d 0a 20  itch = '/';.... 
9f90: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
9fa0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9fb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9fc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9fd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
9fe0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
9ff0: 69 76 61 74 65 20 73 74 61 74 69 63 20 72 65 61  ivate static rea
a000: 64 6f 6e 6c 79 20 63 68 61 72 5b 5d 20 53 77 69  donly char[] Swi
a010: 74 63 68 43 68 61 72 73 20 3d 20 7b 0d 0a 20 20  tchChars = {..  
a020: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 77                Sw
a030: 69 74 63 68 2c 20 41 6c 74 53 77 69 74 63 68 0d  itch, AltSwitch.
a040: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 3b 0d  .            };.
a050: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e  .            #en
a060: 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
a070: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
a080: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a090: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a0a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a0b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
a0c0: 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f            #regio
a0d0: 6e 20 50 72 69 76 61 74 65 20 43 6f 6e 73 74 72  n Private Constr
a0e0: 75 63 74 6f 72 73 0d 0a 20 20 20 20 20 20 20 20  uctors..        
a0f0: 20 20 20 20 70 72 69 76 61 74 65 20 43 6f 6e 66      private Conf
a100: 69 67 75 72 61 74 69 6f 6e 28 0d 0a 20 20 20 20  iguration(..    
a110: 20 20 20 20 20 20 20 20 20 20 20 20 41 73 73 65              Asse
a120: 6d 62 6c 79 20 61 73 73 65 6d 62 6c 79 2c 0d 0a  mbly assembly,..
a130: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a140: 73 74 72 69 6e 67 20 6c 6f 67 46 69 6c 65 4e 61  string logFileNa
a150: 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me,..           
a160: 20 20 20 20 20 73 74 72 69 6e 67 20 64 69 72 65       string dire
a170: 63 74 6f 72 79 2c 0d 0a 20 20 20 20 20 20 20 20  ctory,..        
a180: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 63          string c
a190: 6f 72 65 46 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20  oreFileName,..  
a1a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
a1b0: 72 69 6e 67 20 6c 69 6e 71 46 69 6c 65 4e 61 6d  ring linqFileNam
a1c0: 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
a1d0: 20 20 20 20 73 74 72 69 6e 67 20 64 65 73 69 67      string desig
a1e0: 6e 65 72 46 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20  nerFileName,..  
a1f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
a200: 72 69 6e 67 20 74 72 61 63 65 46 6f 72 6d 61 74  ring traceFormat
a210: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
a220: 20 20 20 49 6e 73 74 61 6c 6c 46 6c 61 67 73 20     InstallFlags 
a230: 69 6e 73 74 61 6c 6c 46 6c 61 67 73 2c 0d 0a 20  installFlags,.. 
a240: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
a250: 72 61 63 65 50 72 69 6f 72 69 74 79 20 74 72 61  racePriority tra
a260: 63 65 50 72 69 6f 72 69 74 79 2c 0d 0a 20 20 20  cePriority,..   
a270: 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
a280: 6c 20 69 6e 73 74 61 6c 6c 2c 0d 0a 20 20 20 20  l install,..    
a290: 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
a2a0: 20 6e 6f 44 65 73 6b 74 6f 70 2c 0d 0a 20 20 20   noDesktop,..   
a2b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
a2c0: 6c 20 6e 6f 43 6f 6d 70 61 63 74 2c 0d 0a 20 20  l noCompact,..  
a2d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
a2e0: 6f 6c 20 6e 6f 4e 65 74 46 78 32 30 2c 0d 0a 20  ol noNetFx20,.. 
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 4e 65 74 46 78 34 30 2c 0d 0a  ool noNetFx40,..
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 56 73 32 30 30 38 2c 0d 0a  bool noVs2008,..
a330: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a340: 62 6f 6f 6c 20 6e 6f 56 73 32 30 31 30 2c 0d 0a  bool noVs2010,..
a350: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a360: 62 6f 6f 6c 20 6e 6f 54 72 61 63 65 2c 0d 0a 20  bool noTrace,.. 
a370: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
a380: 6f 6f 6c 20 6e 6f 43 6f 6e 73 6f 6c 65 2c 0d 0a  ool noConsole,..
a390: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a3a0: 62 6f 6f 6c 20 6e 6f 4c 6f 67 2c 0d 0a 20 20 20  bool noLog,..   
a3b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
a3c0: 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20  l whatIf,..     
a3d0: 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
a3e0: 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20  verbose,..      
a3f0: 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 63            bool c
a400: 6f 6e 66 69 72 6d 0d 0a 20 20 20 20 20 20 20 20  onfirm..        
a410: 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
a420: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
a430: 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 61            this.a
a440: 73 73 65 6d 62 6c 79 20 3d 20 61 73 73 65 6d 62  ssembly = assemb
a450: 6c 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ly;..           
a460: 20 20 20 20 20 74 68 69 73 2e 6c 6f 67 46 69 6c       this.logFil
a470: 65 4e 61 6d 65 20 3d 20 6c 6f 67 46 69 6c 65 4e  eName = logFileN
a480: 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ame;..          
a490: 20 20 20 20 20 20 74 68 69 73 2e 64 69 72 65 63        this.direc
a4a0: 74 6f 72 79 20 3d 20 64 69 72 65 63 74 6f 72 79  tory = directory
a4b0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
a4c0: 20 20 20 74 68 69 73 2e 63 6f 72 65 46 69 6c 65     this.coreFile
a4d0: 4e 61 6d 65 20 3d 20 63 6f 72 65 46 69 6c 65 4e  Name = coreFileN
a4e0: 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ame;..          
a4f0: 20 20 20 20 20 20 74 68 69 73 2e 6c 69 6e 71 46        this.linqF
a500: 69 6c 65 4e 61 6d 65 20 3d 20 6c 69 6e 71 46 69  ileName = linqFi
a510: 6c 65 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20  leName;..       
a520: 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 64 65           this.de
a530: 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 20 3d  signerFileName =
a540: 20 64 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d   designerFileNam
a550: 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
a560: 20 20 20 20 74 68 69 73 2e 74 72 61 63 65 46 6f      this.traceFo
a570: 72 6d 61 74 20 3d 20 74 72 61 63 65 46 6f 72 6d  rmat = traceForm
a580: 61 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at;..           
a590: 20 20 20 20 20 74 68 69 73 2e 69 6e 73 74 61 6c       this.instal
a5a0: 6c 46 6c 61 67 73 20 3d 20 69 6e 73 74 61 6c 6c  lFlags = install
a5b0: 46 6c 61 67 73 3b 0d 0a 20 20 20 20 20 20 20 20  Flags;..        
a5c0: 20 20 20 20 20 20 20 20 74 68 69 73 2e 74 72 61          this.tra
a5d0: 63 65 50 72 69 6f 72 69 74 79 20 3d 20 74 72 61  cePriority = tra
a5e0: 63 65 50 72 69 6f 72 69 74 79 3b 0d 0a 20 20 20  cePriority;..   
a5f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69               thi
a600: 73 2e 69 6e 73 74 61 6c 6c 20 3d 20 69 6e 73 74  s.install = inst
a610: 61 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  all;..          
a620: 20 20 20 20 20 20 74 68 69 73 2e 6e 6f 44 65 73        this.noDes
a630: 6b 74 6f 70 20 3d 20 6e 6f 44 65 73 6b 74 6f 70  ktop = noDesktop
a640: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
a650: 20 20 20 74 68 69 73 2e 6e 6f 43 6f 6d 70 61 63     this.noCompac
a660: 74 20 3d 20 6e 6f 43 6f 6d 70 61 63 74 3b 0d 0a  t = noCompact;..
a670: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a680: 74 68 69 73 2e 6e 6f 4e 65 74 46 78 32 30 20 3d  this.noNetFx20 =
a690: 20 6e 6f 4e 65 74 46 78 32 30 3b 0d 0a 20 20 20   noNetFx20;..   
a6a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69               thi
a6b0: 73 2e 6e 6f 4e 65 74 46 78 34 30 20 3d 20 6e 6f  s.noNetFx40 = no
a6c0: 4e 65 74 46 78 34 30 3b 0d 0a 20 20 20 20 20 20  NetFx40;..      
a6d0: 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 6e            this.n
a6e0: 6f 56 73 32 30 30 38 20 3d 20 6e 6f 56 73 32 30  oVs2008 = noVs20
a6f0: 30 38 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  08;..           
a700: 20 20 20 20 20 74 68 69 73 2e 6e 6f 56 73 32 30       this.noVs20
a710: 31 30 20 3d 20 6e 6f 56 73 32 30 31 30 3b 0d 0a  10 = noVs2010;..
a720: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a730: 74 68 69 73 2e 6e 6f 54 72 61 63 65 20 3d 20 6e  this.noTrace = n
a740: 6f 54 72 61 63 65 3b 0d 0a 20 20 20 20 20 20 20  oTrace;..       
a750: 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 6e 6f           this.no
a760: 43 6f 6e 73 6f 6c 65 20 3d 20 6e 6f 43 6f 6e 73  Console = noCons
a770: 6f 6c 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ole;..          
a780: 20 20 20 20 20 20 74 68 69 73 2e 6e 6f 4c 6f 67        this.noLog
a790: 20 3d 20 6e 6f 4c 6f 67 3b 0d 0a 20 20 20 20 20   = noLog;..     
a7a0: 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e             this.
a7b0: 77 68 61 74 49 66 20 3d 20 77 68 61 74 49 66 3b  whatIf = whatIf;
a7c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
a7d0: 20 20 74 68 69 73 2e 76 65 72 62 6f 73 65 20 3d    this.verbose =
a7e0: 20 76 65 72 62 6f 73 65 3b 0d 0a 20 20 20 20 20   verbose;..     
a7f0: 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e             this.
a800: 63 6f 6e 66 69 72 6d 20 3d 20 63 6f 6e 66 69 72  confirm = confir
a810: 6d 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  m;..            
a820: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  }..            #
a830: 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
a840: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
a850: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a860: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a870: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a880: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
a890: 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67              #reg
a8a0: 69 6f 6e 20 50 72 69 76 61 74 65 20 53 74 61 74  ion Private Stat
a8b0: 69 63 20 4d 65 74 68 6f 64 73 0d 0a 20 20 20 20  ic Methods..    
a8c0: 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
a8d0: 73 74 61 74 69 63 20 76 6f 69 64 20 47 65 74 44  static void GetD
a8e0: 65 66 61 75 6c 74 46 69 6c 65 4e 61 6d 65 73 28  efaultFileNames(
a8f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
a900: 20 20 72 65 66 20 73 74 72 69 6e 67 20 64 69 72    ref string dir
a910: 65 63 74 6f 72 79 2c 0d 0a 20 20 20 20 20 20 20  ectory,..       
a920: 20 20 20 20 20 20 20 20 20 72 65 66 20 73 74 72           ref str
a930: 69 6e 67 20 63 6f 72 65 46 69 6c 65 4e 61 6d 65  ing coreFileName
a940: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
a950: 20 20 20 72 65 66 20 73 74 72 69 6e 67 20 6c 69     ref string li
a960: 6e 71 46 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20  nqFileName,..   
a970: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66               ref
a980: 20 73 74 72 69 6e 67 20 64 65 73 69 67 6e 65 72   string designer
a990: 46 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20  FileName..      
a9a0: 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
a9b0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
a9c0: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
a9d0: 74 68 69 73 41 73 73 65 6d 62 6c 79 20 3d 3d 20  thisAssembly == 
a9e0: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
a9f0: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
aa00: 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  n;....          
aa10: 20 20 20 20 20 20 64 69 72 65 63 74 6f 72 79 20        directory 
aa20: 3d 20 50 61 74 68 2e 47 65 74 44 69 72 65 63 74  = Path.GetDirect
aa30: 6f 72 79 4e 61 6d 65 28 74 68 69 73 41 73 73 65  oryName(thisAsse
aa40: 6d 62 6c 79 2e 4c 6f 63 61 74 69 6f 6e 29 3b 0d  mbly.Location);.
aa50: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
aa60: 20 20 20 69 66 20 28 53 74 72 69 6e 67 2e 49 73     if (String.Is
aa70: 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 64 69 72 65  NullOrEmpty(dire
aa80: 63 74 6f 72 79 29 29 0d 0a 20 20 20 20 20 20 20  ctory))..       
aa90: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
aaa0: 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  urn;....        
aab0: 20 20 20 20 20 20 20 20 63 6f 72 65 46 69 6c 65          coreFile
aac0: 4e 61 6d 65 20 3d 20 50 61 74 68 2e 43 6f 6d 62  Name = Path.Comb
aad0: 69 6e 65 28 64 69 72 65 63 74 6f 72 79 2c 0d 0a  ine(directory,..
aae0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
aaf0: 20 20 20 20 49 6e 73 74 61 6c 6c 65 72 2e 43 6f      Installer.Co
ab00: 72 65 46 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a  reFileName);....
ab10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ab20: 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 20 3d 20 50  linqFileName = P
ab30: 61 74 68 2e 43 6f 6d 62 69 6e 65 28 64 69 72 65  ath.Combine(dire
ab40: 63 74 6f 72 79 2c 0d 0a 20 20 20 20 20 20 20 20  ctory,..        
ab50: 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 73 74              Inst
ab60: 61 6c 6c 65 72 2e 4c 69 6e 71 46 69 6c 65 4e 61  aller.LinqFileNa
ab70: 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  me);....        
ab80: 20 20 20 20 20 20 20 20 64 65 73 69 67 6e 65 72          designer
ab90: 46 69 6c 65 4e 61 6d 65 20 3d 20 50 61 74 68 2e  FileName = Path.
aba0: 43 6f 6d 62 69 6e 65 28 64 69 72 65 63 74 6f 72  Combine(director
abb0: 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y,..            
abc0: 20 20 20 20 20 20 20 20 49 6e 73 74 61 6c 6c 65          Installe
abd0: 72 2e 44 65 73 69 67 6e 65 72 46 69 6c 65 4e 61  r.DesignerFileNa
abe0: 6d 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  me);..          
abf0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
ac00: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
ac10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ac20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ac30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ac40: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
ac50: 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
ac60: 61 74 69 63 20 62 6f 6f 6c 20 43 68 65 63 6b 4f  atic bool CheckO
ac70: 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20  ption(..        
ac80: 20 20 20 20 20 20 20 20 72 65 66 20 73 74 72 69          ref stri
ac90: 6e 67 20 61 72 67 0d 0a 20 20 20 20 20 20 20 20  ng arg..        
aca0: 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
acb0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
acc0: 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
acd0: 20 72 65 73 75 6c 74 20 3d 20 61 72 67 3b 0d 0a   result = arg;..
ace0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
acf0: 20 20 69 66 20 28 21 53 74 72 69 6e 67 2e 49 73    if (!String.Is
ad00: 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 72 65 73 75  NullOrEmpty(resu
ad10: 6c 74 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  lt))..          
ad20: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
ad30: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
ad40: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
ad50: 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 52 65       // NOTE: Re
ad60: 6d 6f 76 65 20 61 6c 6c 20 6c 65 61 64 69 6e 67  move all leading
ad70: 20 73 77 69 74 63 68 20 63 68 61 72 73 2e 0d 0a   switch chars...
ad80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ad90: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
ada0: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75              resu
adb0: 6c 74 20 3d 20 72 65 73 75 6c 74 2e 54 72 69 6d  lt = result.Trim
adc0: 53 74 61 72 74 28 53 77 69 74 63 68 43 68 61 72  Start(SwitchChar
add0: 73 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  s);....         
ade0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
adf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ae00: 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 48 6f 77 20     // NOTE: How 
ae10: 6d 61 6e 79 20 63 68 61 72 73 20 77 65 72 65 20  many chars were 
ae20: 72 65 6d 6f 76 65 64 3f 0d 0a 20 20 20 20 20 20  removed?..      
ae30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
ae40: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
ae50: 20 20 20 20 20 20 69 6e 74 20 63 6f 75 6e 74 20        int count 
ae60: 3d 20 61 72 67 2e 4c 65 6e 67 74 68 20 2d 20 72  = arg.Length - r
ae70: 65 73 75 6c 74 2e 4c 65 6e 67 74 68 3b 0d 0a 0d  esult.Length;...
ae80: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
ae90: 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
aea0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
aeb0: 4e 4f 54 45 3a 20 57 61 73 20 74 68 65 72 65 20  NOTE: Was there 
aec0: 61 74 20 6c 65 61 73 74 20 6f 6e 65 3f 0d 0a 20  at least one?.. 
aed0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
aee0: 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
aef0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 63             if (c
af00: 6f 75 6e 74 20 3e 20 30 29 0d 0a 20 20 20 20 20  ount > 0)..     
af10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
af20: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
af30: 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
af40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
af50: 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 4f        // NOTE: O
af60: 6b 2c 20 72 65 70 6c 61 63 65 20 74 68 65 69 72  k, replace their
af70: 20 6f 72 69 67 69 6e 61 6c 0d 0a 20 20 20 20 20   original..     
af80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
af90: 20 20 20 2f 2f 20 20 20 20 20 20 20 61 72 67 75     //       argu
afa0: 6d 65 6e 74 2e 0d 0a 20 20 20 20 20 20 20 20 20  ment...         
afb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
afc0: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
afd0: 20 20 20 20 20 20 20 20 20 20 20 61 72 67 20 3d             arg =
afe0: 20 72 65 73 75 6c 74 3b 0d 0a 0d 0a 20 20 20 20   result;....    
aff0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b000: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
b010: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b020: 2f 2f 20 4e 4f 54 45 3a 20 59 65 73 2c 20 74 68  // NOTE: Yes, th
b030: 69 73 20 69 73 20 61 20 73 77 69 74 63 68 2e 0d  is is a switch..
b040: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
b050: 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
b060: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b070: 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65       return true
b080: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
b090: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
b0a0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
b0b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
b0c0: 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
b0d0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
b0e0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
b0f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b100: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b110: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b120: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
b130: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
b140: 69 76 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f  ivate static boo
b150: 6c 20 4d 61 74 63 68 4f 70 74 69 6f 6e 28 0d 0a  l MatchOption(..
b160: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b170: 73 74 72 69 6e 67 20 61 72 67 2c 0d 0a 20 20 20  string arg,..   
b180: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72               str
b190: 69 6e 67 20 6f 70 74 69 6f 6e 0d 0a 20 20 20 20  ing option..    
b1a0: 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
b1b0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
b1c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
b1d0: 20 28 28 61 72 67 20 3d 3d 20 6e 75 6c 6c 29 20   ((arg == null) 
b1e0: 7c 7c 20 28 6f 70 74 69 6f 6e 20 3d 3d 20 6e 75  || (option == nu
b1f0: 6c 6c 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ll))..          
b200: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
b210: 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20   false;....     
b220: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
b230: 6e 20 53 74 72 69 6e 67 2e 43 6f 6d 70 61 72 65  n String.Compare
b240: 28 61 72 67 2c 20 30 2c 20 6f 70 74 69 6f 6e 2c  (arg, 0, option,
b250: 20 30 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20   0,..           
b260: 20 20 20 20 20 20 20 20 20 61 72 67 2e 4c 65 6e           arg.Len
b270: 67 74 68 2c 20 53 74 72 69 6e 67 43 6f 6d 70 61  gth, StringCompa
b280: 72 69 73 6f 6e 2e 4f 72 64 69 6e 61 6c 49 67 6e  rison.OrdinalIgn
b290: 6f 72 65 43 61 73 65 29 20 3d 3d 20 30 3b 0d 0a  oreCase) == 0;..
b2a0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
b2b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
b2c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b2d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b2e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b2f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b300: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
b310: 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 62  private static b
b320: 6f 6f 6c 3f 20 50 61 72 73 65 42 6f 6f 6c 65 61  ool? ParseBoolea
b330: 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n(..            
b340: 20 20 20 20 73 74 72 69 6e 67 20 74 65 78 74 0d      string text.
b350: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
b360: 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   )..            
b370: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
b380: 20 20 20 69 66 20 28 21 53 74 72 69 6e 67 2e 49     if (!String.I
b390: 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 74 65 78  sNullOrEmpty(tex
b3a0: 74 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  t))..           
b3b0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
b3c0: 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
b3d0: 20 76 61 6c 75 65 3b 0d 0a 0d 0a 20 20 20 20 20   value;....     
b3e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
b3f0: 66 20 28 62 6f 6f 6c 2e 54 72 79 50 61 72 73 65  f (bool.TryParse
b400: 28 74 65 78 74 2c 20 6f 75 74 20 76 61 6c 75 65  (text, out value
b410: 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
b420: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
b430: 72 6e 20 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20  rn value;..     
b440: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
b450: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b460: 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 20 20  return null;..  
b470: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
b480: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
b490: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b4a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b4b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b4c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
b4d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
b4e0: 69 76 61 74 65 20 73 74 61 74 69 63 20 6f 62 6a  ivate static obj
b4f0: 65 63 74 20 50 61 72 73 65 45 6e 75 6d 28 0d 0a  ect ParseEnum(..
b500: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b510: 54 79 70 65 20 65 6e 75 6d 54 79 70 65 2c 0d 0a  Type enumType,..
b520: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b530: 73 74 72 69 6e 67 20 74 65 78 74 2c 0d 0a 20 20  string text,..  
b540: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
b550: 6f 6c 20 6e 6f 43 61 73 65 0d 0a 20 20 20 20 20  ol noCase..     
b560: 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
b570: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
b580: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
b590: 28 28 65 6e 75 6d 54 79 70 65 20 3d 3d 20 6e 75  ((enumType == nu
b5a0: 6c 6c 29 20 7c 7c 20 21 65 6e 75 6d 54 79 70 65  ll) || !enumType
b5b0: 2e 49 73 45 6e 75 6d 29 0d 0a 20 20 20 20 20 20  .IsEnum)..      
b5c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
b5d0: 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20  turn null;....  
b5e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
b5f0: 20 28 21 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c   (!String.IsNull
b600: 4f 72 45 6d 70 74 79 28 74 65 78 74 29 29 0d 0a  OrEmpty(text))..
b610: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b620: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
b630: 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20         try..    
b640: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b650: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
b660: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
b670: 6e 20 45 6e 75 6d 2e 50 61 72 73 65 28 65 6e 75  n Enum.Parse(enu
b680: 6d 54 79 70 65 2c 20 74 65 78 74 2c 20 6e 6f 43  mType, text, noC
b690: 61 73 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ase);..         
b6a0: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
b6b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b6c0: 20 20 63 61 74 63 68 0d 0a 20 20 20 20 20 20 20    catch..       
b6d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
b6e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b6f0: 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f          // do no
b700: 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20  thing...        
b710: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
b720: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
b730: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
b740: 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b      return null;
b750: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
b760: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e  .            #en
b770: 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
b780: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
b790: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b7a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b7b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b7c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
b7d0: 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f            #regio
b7e0: 6e 20 50 75 62 6c 69 63 20 53 74 61 74 69 63 20  n Public Static 
b7f0: 4d 65 74 68 6f 64 73 0d 0a 20 20 20 20 20 20 20  Methods..       
b800: 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74       public stat
b810: 69 63 20 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e  ic Configuration
b820: 20 43 72 65 61 74 65 44 65 66 61 75 6c 74 28 29   CreateDefault()
b830: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
b840: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
b850: 20 73 74 72 69 6e 67 20 64 69 72 65 63 74 6f 72   string director
b860: 79 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20  y = null;..     
b870: 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
b880: 67 20 63 6f 72 65 46 69 6c 65 4e 61 6d 65 20 3d  g coreFileName =
b890: 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20   null;..        
b8a0: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6c          string l
b8b0: 69 6e 71 46 69 6c 65 4e 61 6d 65 20 3d 20 6e 75  inqFileName = nu
b8c0: 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll;..           
b8d0: 20 20 20 20 20 73 74 72 69 6e 67 20 64 65 73 69       string desi
b8e0: 67 6e 65 72 46 69 6c 65 4e 61 6d 65 20 3d 20 6e  gnerFileName = n
b8f0: 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ull;....        
b900: 20 20 20 20 20 20 20 20 47 65 74 44 65 66 61 75          GetDefau
b910: 6c 74 46 69 6c 65 4e 61 6d 65 73 28 0d 0a 20 20  ltFileNames(..  
b920: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b930: 20 20 72 65 66 20 64 69 72 65 63 74 6f 72 79 2c    ref directory,
b940: 20 72 65 66 20 63 6f 72 65 46 69 6c 65 4e 61 6d   ref coreFileNam
b950: 65 2c 20 72 65 66 20 6c 69 6e 71 46 69 6c 65 4e  e, ref linqFileN
b960: 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ame,..          
b970: 20 20 20 20 20 20 20 20 20 20 72 65 66 20 64 65            ref de
b980: 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 29 3b  signerFileName);
b990: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
b9a0: 20 20 20 20 72 65 74 75 72 6e 20 6e 65 77 20 43      return new C
b9b0: 6f 6e 66 69 67 75 72 61 74 69 6f 6e 28 74 68 69  onfiguration(thi
b9c0: 73 41 73 73 65 6d 62 6c 79 2c 20 6e 75 6c 6c 2c  sAssembly, null,
b9d0: 20 64 69 72 65 63 74 6f 72 79 2c 0d 0a 20 20 20   directory,..   
b9e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b9f0: 20 63 6f 72 65 46 69 6c 65 4e 61 6d 65 2c 20 6c   coreFileName, l
ba00: 69 6e 71 46 69 6c 65 4e 61 6d 65 2c 20 64 65 73  inqFileName, des
ba10: 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 2c 0d 0a  ignerFileName,..
ba20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ba30: 20 20 20 20 54 72 61 63 65 4f 70 73 2e 54 72 61      TraceOps.Tra
ba40: 63 65 46 6f 72 6d 61 74 2c 20 49 6e 73 74 61 6c  ceFormat, Instal
ba50: 6c 46 6c 61 67 73 2e 44 65 66 61 75 6c 74 2c 0d  lFlags.Default,.
ba60: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
ba70: 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69       TracePriori
ba80: 74 79 2e 44 65 66 61 75 6c 74 2c 20 74 72 75 65  ty.Default, true
ba90: 2c 20 66 61 6c 73 65 2c 20 74 72 75 65 2c 20 66  , false, true, f
baa0: 61 6c 73 65 2c 20 66 61 6c 73 65 2c 0d 0a 20 20  alse, false,..  
bab0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bac0: 20 20 66 61 6c 73 65 2c 20 66 61 6c 73 65 2c 20    false, false, 
bad0: 66 61 6c 73 65 2c 20 66 61 6c 73 65 2c 20 66 61  false, false, fa
bae0: 6c 73 65 2c 20 74 72 75 65 2c 20 74 72 75 65 2c  lse, true, true,
baf0: 20 66 61 6c 73 65 29 3b 0d 0a 20 20 20 20 20 20   false);..      
bb00: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
bb10: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
bb20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bb30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bb40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bb50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
bb60: 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
bb70: 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 46 72 6f   static bool Fro
bb80: 6d 41 72 67 73 28 0d 0a 20 20 20 20 20 20 20 20  mArgs(..        
bb90: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 5b 5d          string[]
bba0: 20 61 72 67 73 2c 0d 0a 20 20 20 20 20 20 20 20   args,..        
bbb0: 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 73 74 72          bool str
bbc0: 69 63 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ict,..          
bbd0: 20 20 20 20 20 20 72 65 66 20 43 6f 6e 66 69 67        ref Config
bbe0: 75 72 61 74 69 6f 6e 20 63 6f 6e 66 69 67 75 72  uration configur
bbf0: 61 74 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20  ation,..        
bc00: 20 20 20 20 20 20 20 20 72 65 66 20 73 74 72 69          ref stri
bc10: 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20  ng error..      
bc20: 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
bc30: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
bc40: 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79 0d              try.
bc50: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
bc60: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
bc70: 20 20 20 20 20 20 20 20 69 66 20 28 61 72 67 73          if (args
bc80: 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
bc90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bca0: 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d     return true;.
bcb0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
bcc0: 20 20 20 20 20 20 20 69 66 20 28 63 6f 6e 66 69         if (confi
bcd0: 67 75 72 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c  guration == null
bce0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
bcf0: 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69             confi
bd00: 67 75 72 61 74 69 6f 6e 20 3d 20 43 6f 6e 66 69  guration = Confi
bd10: 67 75 72 61 74 69 6f 6e 2e 43 72 65 61 74 65 44  guration.CreateD
bd20: 65 66 61 75 6c 74 28 29 3b 0d 0a 0d 0a 20 20 20  efault();....   
bd30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bd40: 20 69 6e 74 20 6c 65 6e 67 74 68 20 3d 20 61 72   int length = ar
bd50: 67 73 2e 4c 65 6e 67 74 68 3b 0d 0a 0d 0a 20 20  gs.Length;....  
bd60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bd70: 20 20 66 6f 72 20 28 69 6e 74 20 69 6e 64 65 78    for (int index
bd80: 20 3d 20 30 3b 20 69 6e 64 65 78 20 3c 20 6c 65   = 0; index < le
bd90: 6e 67 74 68 3b 20 69 6e 64 65 78 2b 2b 29 0d 0a  ngth; index++)..
bda0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bdb0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
bdc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
bdd0: 74 72 69 6e 67 20 61 72 67 20 3d 20 61 72 67 73  tring arg = args
bde0: 5b 69 6e 64 65 78 5d 3b 0d 0a 0d 0a 20 20 20 20  [index];....    
bdf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
be00: 20 20 20 20 69 66 20 28 53 74 72 69 6e 67 2e 49      if (String.I
be10: 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 61 72 67  sNullOrEmpty(arg
be20: 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
be30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
be40: 63 6f 6e 74 69 6e 75 65 3b 0d 0a 0d 0a 20 20 20  continue;....   
be50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
be60: 20 20 20 20 20 73 74 72 69 6e 67 20 6e 65 77 41       string newA
be70: 72 67 20 3d 20 61 72 67 3b 0d 0a 0d 0a 20 20 20  rg = arg;....   
be80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
be90: 20 20 20 20 20 69 66 20 28 43 68 65 63 6b 4f 70       if (CheckOp
bea0: 74 69 6f 6e 28 72 65 66 20 6e 65 77 41 72 67 29  tion(ref newArg)
beb0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
bec0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
bed0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bee0: 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
bef0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bf00: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54            // NOT
bf10: 45 3a 20 41 6c 6c 20 74 68 65 20 73 75 70 70 6f  E: All the suppo
bf20: 72 74 65 64 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e  rted command lin
bf30: 65 20 6f 70 74 69 6f 6e 73 20 6d 75 73 74 0d 0a  e options must..
bf40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bf50: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
bf60: 20 20 20 20 20 68 61 76 65 20 61 20 76 61 6c 75       have a valu
bf70: 65 3b 20 74 68 65 72 65 66 6f 72 65 2c 20 61 74  e; therefore, at
bf80: 74 65 6d 70 74 20 74 6f 20 61 64 76 61 6e 63 65  tempt to advance
bf90: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
bfa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
bfb0: 20 20 20 20 20 20 20 74 6f 20 69 74 20 6e 6f 77         to it now
bfc0: 2e 20 20 49 66 20 77 65 20 66 61 69 6c 2c 20 77  .  If we fail, w
bfd0: 65 20 61 72 65 20 64 6f 6e 65 2e 0d 0a 20 20 20  e are done...   
bfe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bff0: 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
c000: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c010: 20 20 20 20 20 20 20 20 20 69 6e 64 65 78 2b 2b           index++
c020: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
c030: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c040: 20 69 66 20 28 69 6e 64 65 78 20 3e 3d 20 6c 65   if (index >= le
c050: 6e 67 74 68 29 0d 0a 20 20 20 20 20 20 20 20 20  ngth)..         
c060: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c070: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
c080: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c090: 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72        error = Tr
c0a0: 61 63 65 4f 70 73 2e 54 72 61 63 65 28 0d 0a 20  aceOps.Trace(.. 
c0b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c0c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c0d0: 20 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79     TracePriority
c0e0: 2e 4c 6f 77 65 73 74 2c 0d 0a 20 20 20 20 20 20  .Lowest,..      
c0f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c100: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
c110: 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72  aceCallback, Str
c120: 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
c130: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c140: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c150: 20 22 4d 69 73 73 69 6e 67 20 76 61 6c 75 65 20   "Missing value 
c160: 66 6f 72 20 6f 70 74 69 6f 6e 3a 20 7b 30 7d 22  for option: {0}"
c170: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
c180: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c190: 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61         ForDispla
c1a0: 79 28 61 72 67 29 29 2c 20 74 72 61 63 65 43 61  y(arg)), traceCa
c1b0: 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
c1c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c1d0: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
c1e0: 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20  strict)..       
c1f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c200: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
c210: 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20  urn false;....  
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 62 72                br
c240: 65 61 6b 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  eak;..          
c250: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c260: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
c270: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c280: 20 20 20 2f 2f 0d 0a 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 20 20 2f 2f 20 4e 4f 54 45 3a 20 47 72 61 62     // NOTE: Grab
c2b0: 20 74 68 65 20 74 65 78 74 75 61 6c 20 76 61 6c   the textual val
c2c0: 75 65 20 6f 66 20 74 68 69 73 20 63 6f 6d 6d 61  ue of this comma
c2d0: 6e 64 20 6c 69 6e 65 0d 0a 20 20 20 20 20 20 20  nd line..       
c2e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c2f0: 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6f 70       //       op
c300: 74 69 6f 6e 2e 0d 0a 20 20 20 20 20 20 20 20 20  tion...         
c310: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c320: 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
c330: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c340: 20 20 20 73 74 72 69 6e 67 20 74 65 78 74 20 3d     string text =
c350: 20 61 72 67 73 5b 69 6e 64 65 78 5d 3b 0d 0a 0d   args[index];...
c360: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
c370: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
c380: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
c390: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
c3a0: 4e 4f 54 45 3a 20 46 69 67 75 72 65 20 6f 75 74  NOTE: Figure out
c3b0: 20 77 68 69 63 68 20 63 6f 6d 6d 61 6e 64 20 6c   which command l
c3c0: 69 6e 65 20 6f 70 74 69 6f 6e 20 74 68 69 73 20  ine option this 
c3d0: 69 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  is..            
c3e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c3f0: 2f 2f 20 20 20 20 20 20 20 28 62 61 73 65 64 20  //       (based 
c400: 6f 6e 20 61 20 70 61 72 74 69 61 6c 20 6e 61 6d  on a partial nam
c410: 65 20 6d 61 74 63 68 29 20 61 6e 64 20 74 68 65  e match) and the
c420: 6e 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20  n try..         
c430: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c440: 20 20 20 2f 2f 20 20 20 20 20 20 20 74 6f 20 69     //       to i
c450: 6e 74 65 72 70 72 65 74 20 74 68 65 20 74 65 78  nterpret the tex
c460: 74 75 61 6c 20 76 61 6c 75 65 20 61 73 20 74 68  tual value as th
c470: 65 20 63 6f 72 72 65 63 74 0d 0a 20 20 20 20 20  e correct..     
c480: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c490: 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
c4a0: 74 79 70 65 2e 0d 0a 20 20 20 20 20 20 20 20 20  type...         
c4b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c4c0: 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
c4d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c4e0: 20 20 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69     if (MatchOpti
c4f0: 6f 6e 28 6e 65 77 41 72 67 2c 20 22 73 74 72 69  on(newArg, "stri
c500: 63 74 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ct"))..         
c510: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c520: 20 20 20 7b 0d 0a 20 20 20 20 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 62 6f 6f 6c 3f 20 76 61 6c 75        bool? valu
c550: 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e  e = ParseBoolean
c560: 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20  (text);....     
c570: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c580: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76             if (v
c590: 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  alue == null).. 
c5a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c5b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
c5c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
c5d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c5e0: 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72        error = Tr
c5f0: 61 63 65 4f 70 73 2e 54 72 61 63 65 28 0d 0a 20  aceOps.Trace(.. 
c600: 20 20 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 20 20 20 20 20 54 72 61 63 65 50 72 69 6f         TracePrio
c630: 72 69 74 79 2e 4c 6f 77 65 73 74 2c 0d 0a 20 20  rity.Lowest,..  
c640: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c650: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c660: 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
c670: 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d  ack, String.Form
c680: 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
c690: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c6a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 22 49 6e               "In
c6b0: 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61  valid {0} boolea
c6c0: 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a  n value: {1}",..
c6d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c6e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c6f0: 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c          ForDispl
c700: 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69 73 70  ay(arg), ForDisp
c710: 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20 20 20  lay(text)),..   
c720: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c730: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c740: 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
c750: 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
c760: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c770: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
c780: 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20  strict)..       
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 20 20 20 20 20 20 20 20                  
c7b0: 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
c7c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
c7d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c7e0: 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d        continue;.
c7f0: 0a 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 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
c820: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c830: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
c840: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c850: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54            // NOT
c860: 45 3a 20 41 6c 6c 6f 77 20 74 68 65 20 63 6f 6d  E: Allow the com
c870: 6d 61 6e 64 20 6c 69 6e 65 20 61 72 67 75 6d 65  mand line argume
c880: 6e 74 73 20 74 6f 20 6f 76 65 72 72 69 64 65 0d  nts to override.
c890: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
c8a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c8b0: 20 2f 2f 20 20 20 20 20 20 20 74 68 65 20 22 73   //       the "s
c8c0: 74 72 69 63 74 6e 65 73 73 22 20 73 65 74 74 69  trictness" setti
c8d0: 6e 67 20 70 72 6f 76 69 64 65 64 20 62 79 20 6f  ng provided by o
c8e0: 75 72 20 63 61 6c 6c 65 72 2e 0d 0a 20 20 20 20  ur caller...    
c8f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c900: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
c910: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c920: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c930: 73 74 72 69 63 74 20 3d 20 28 62 6f 6f 6c 29 76  strict = (bool)v
c940: 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alue;..         
c950: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c960: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
c970: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c980: 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68    else if (Match
c990: 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22  Option(newArg, "
c9a0: 6c 6f 67 46 69 6c 65 4e 61 6d 65 22 29 29 0d 0a  logFileName"))..
c9b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c9c0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
c9d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c9e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
c9f0: 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6c 6f 67  onfiguration.log
ca00: 46 69 6c 65 4e 61 6d 65 20 3d 20 74 65 78 74 3b  FileName = text;
ca10: 0d 0a 20 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 7d 0d                }.
ca30: 0a 20 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 65 6c 73               els
ca50: 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f  e if (MatchOptio
ca60: 6e 28 6e 65 77 41 72 67 2c 20 22 64 69 72 65 63  n(newArg, "direc
ca70: 74 6f 72 79 22 29 29 0d 0a 20 20 20 20 20 20 20  tory"))..       
ca80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ca90: 20 20 20 20 20 7b 0d 0a 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: 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72          configur
cac0: 61 74 69 6f 6e 2e 64 69 72 65 63 74 6f 72 79 20  ation.directory 
cad0: 3d 20 74 65 78 74 3b 0d 0a 0d 0a 20 20 20 20 20  = text;....     
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 20 20 20 2f 2f 0d 0a 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 20 20 20 20 2f                 /
cb20: 2f 20 4e 4f 54 45 3a 20 2a 53 50 45 43 49 41 4c  / NOTE: *SPECIAL
cb30: 2a 20 4d 75 73 74 20 72 65 66 72 65 73 68 20 74  * Must refresh t
cb40: 68 65 20 66 69 6c 65 20 6e 61 6d 65 73 0d 0a 20  he file names.. 
cb50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cb60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
cb70: 2f 20 20 20 20 20 20 20 68 65 72 65 20 62 65 63  /       here bec
cb80: 61 75 73 65 20 74 68 65 20 75 6e 64 65 72 6c 79  ause the underly
cb90: 69 6e 67 20 64 69 72 65 63 74 6f 72 79 0d 0a 20  ing directory.. 
cba0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cbb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
cbc0: 2f 20 20 20 20 20 20 20 68 61 73 20 63 68 61 6e  /       has chan
cbd0: 67 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  ged...          
cbe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cbf0: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
cc00: 20 20 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 73 74 72 69 6e 67            string
cc20: 20 63 6f 72 65 46 69 6c 65 4e 61 6d 65 20 3d 20   coreFileName = 
cc30: 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 63 6f  configuration.co
cc40: 72 65 46 69 6c 65 4e 61 6d 65 3b 0d 0a 0d 0a 20  reFileName;.... 
cc50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cc60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
cc70: 66 20 28 21 53 74 72 69 6e 67 2e 49 73 4e 75 6c  f (!String.IsNul
cc80: 6c 4f 72 45 6d 70 74 79 28 63 6f 72 65 46 69 6c  lOrEmpty(coreFil
cc90: 65 4e 61 6d 65 29 29 0d 0a 20 20 20 20 20 20 20  eName))..       
cca0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ccb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 72               cor
ccc0: 65 46 69 6c 65 4e 61 6d 65 20 3d 20 50 61 74 68  eFileName = Path
ccd0: 2e 47 65 74 46 69 6c 65 4e 61 6d 65 28 63 6f 72  .GetFileName(cor
cce0: 65 46 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20  eFileName);.... 
ccf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cd00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
cd10: 66 20 28 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c  f (String.IsNull
cd20: 4f 72 45 6d 70 74 79 28 63 6f 72 65 46 69 6c 65  OrEmpty(coreFile
cd30: 4e 61 6d 65 29 29 0d 0a 20 20 20 20 20 20 20 20  Name))..        
cd40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cd50: 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 72 65              core
cd60: 46 69 6c 65 4e 61 6d 65 20 3d 20 49 6e 73 74 61  FileName = Insta
cd70: 6c 6c 65 72 2e 43 6f 72 65 46 69 6c 65 4e 61 6d  ller.CoreFileNam
cd80: 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
cd90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cda0: 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74        configurat
cdb0: 69 6f 6e 2e 63 6f 72 65 46 69 6c 65 4e 61 6d 65  ion.coreFileName
cdc0: 20 3d 20 50 61 74 68 2e 43 6f 6d 62 69 6e 65 28   = Path.Combine(
cdd0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
cde0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cdf0: 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74        configurat
ce00: 69 6f 6e 2e 64 69 72 65 63 74 6f 72 79 2c 20 63  ion.directory, c
ce10: 6f 72 65 46 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d  oreFileName);...
ce20: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
ce30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ce40: 20 73 74 72 69 6e 67 20 6c 69 6e 71 46 69 6c 65   string linqFile
ce50: 4e 61 6d 65 20 3d 20 63 6f 6e 66 69 67 75 72 61  Name = configura
ce60: 74 69 6f 6e 2e 6c 69 6e 71 46 69 6c 65 4e 61 6d  tion.linqFileNam
ce70: 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
ce80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ce90: 20 20 20 20 20 20 69 66 20 28 21 53 74 72 69 6e        if (!Strin
cea0: 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28  g.IsNullOrEmpty(
ceb0: 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 29 29 0d 0a  linqFileName))..
cec0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ced0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cee0: 20 20 20 20 6c 69 6e 71 46 69 6c 65 4e 61 6d 65      linqFileName
cef0: 20 3d 20 50 61 74 68 2e 47 65 74 46 69 6c 65 4e   = Path.GetFileN
cf00: 61 6d 65 28 6c 69 6e 71 46 69 6c 65 4e 61 6d 65  ame(linqFileName
cf10: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
cf20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cf30: 20 20 20 20 20 20 69 66 20 28 53 74 72 69 6e 67        if (String
cf40: 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 6c  .IsNullOrEmpty(l
cf50: 69 6e 71 46 69 6c 65 4e 61 6d 65 29 29 0d 0a 20  inqFileName)).. 
cf60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cf70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cf80: 20 20 20 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 20     linqFileName 
cf90: 3d 20 49 6e 73 74 61 6c 6c 65 72 2e 4c 69 6e 71  = Installer.Linq
cfa0: 46 69 6c 65 4e 61 6d 65 3b 0d 0a 0d 0a 20 20 20  FileName;....   
cfb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cfc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
cfd0: 66 69 67 75 72 61 74 69 6f 6e 2e 6c 69 6e 71 46  figuration.linqF
cfe0: 69 6c 65 4e 61 6d 65 20 3d 20 50 61 74 68 2e 43  ileName = Path.C
cff0: 6f 6d 62 69 6e 65 28 0d 0a 20 20 20 20 20 20 20  ombine(..       
d000: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d010: 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
d020: 66 69 67 75 72 61 74 69 6f 6e 2e 64 69 72 65 63  figuration.direc
d030: 74 6f 72 79 2c 20 6c 69 6e 71 46 69 6c 65 4e 61  tory, linqFileNa
d040: 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  me);....        
d050: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d060: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 64          string d
d070: 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 20  esignerFileName 
d080: 3d 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e  = configuration.
d090: 64 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65  designerFileName
d0a0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
d0b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d0c0: 20 20 20 20 20 69 66 20 28 21 53 74 72 69 6e 67       if (!String
d0d0: 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 64  .IsNullOrEmpty(d
d0e0: 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 29  esignerFileName)
d0f0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
d100: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d110: 20 20 20 20 20 20 20 64 65 73 69 67 6e 65 72 46         designerF
d120: 69 6c 65 4e 61 6d 65 20 3d 20 50 61 74 68 2e 47  ileName = Path.G
d130: 65 74 46 69 6c 65 4e 61 6d 65 28 64 65 73 69 67  etFileName(desig
d140: 6e 65 72 46 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d  nerFileName);...
d150: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
d160: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d170: 20 69 66 20 28 53 74 72 69 6e 67 2e 49 73 4e 75   if (String.IsNu
d180: 6c 6c 4f 72 45 6d 70 74 79 28 64 65 73 69 67 6e  llOrEmpty(design
d190: 65 72 46 69 6c 65 4e 61 6d 65 29 29 0d 0a 20 20  erFileName))..  
d1a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d1b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d1c0: 20 20 64 65 73 69 67 6e 65 72 46 69 6c 65 4e 61    designerFileNa
d1d0: 6d 65 20 3d 20 49 6e 73 74 61 6c 6c 65 72 2e 44  me = Installer.D
d1e0: 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 3b  esignerFileName;
d1f0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
d200: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d210: 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f      configuratio
d220: 6e 2e 64 65 73 69 67 6e 65 72 46 69 6c 65 4e 61  n.designerFileNa
d230: 6d 65 20 3d 20 50 61 74 68 2e 43 6f 6d 62 69 6e  me = Path.Combin
d240: 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
d250: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d260: 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72          configur
d270: 61 74 69 6f 6e 2e 64 69 72 65 63 74 6f 72 79 2c  ation.directory,
d280: 20 64 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d   designerFileNam
d290: 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e);..           
d2a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d2b0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
d2c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d2d0: 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70  else if (MatchOp
d2e0: 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 63 6f  tion(newArg, "co
d2f0: 72 65 46 69 6c 65 4e 61 6d 65 22 29 29 0d 0a 20  reFileName")).. 
d300: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d310: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
d320: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d330: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
d340: 6e 66 69 67 75 72 61 74 69 6f 6e 2e 63 6f 72 65  nfiguration.core
d350: 46 69 6c 65 4e 61 6d 65 20 3d 20 74 65 78 74 3b  FileName = text;
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 7d 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 65 6c 73               els
d3a0: 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f  e if (MatchOptio
d3b0: 6e 28 6e 65 77 41 72 67 2c 20 22 6c 69 6e 71 46  n(newArg, "linqF
d3c0: 69 6c 65 4e 61 6d 65 22 29 29 0d 0a 20 20 20 20  ileName"))..    
d3d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d3e0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
d3f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d400: 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69             confi
d410: 67 75 72 61 74 69 6f 6e 2e 6c 69 6e 71 46 69 6c  guration.linqFil
d420: 65 4e 61 6d 65 20 3d 20 74 65 78 74 3b 0d 0a 20  eName = text;.. 
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 7d 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 65 6c 73 65 20 69            else i
d470: 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e  f (MatchOption(n
d480: 65 77 41 72 67 2c 20 22 64 65 73 69 67 6e 65 72  ewArg, "designer
d490: 46 69 6c 65 4e 61 6d 65 22 29 29 0d 0a 20 20 20  FileName"))..   
d4a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d4b0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
d4c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d4d0: 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66              conf
d4e0: 69 67 75 72 61 74 69 6f 6e 2e 64 65 73 69 67 6e  iguration.design
d4f0: 65 72 46 69 6c 65 4e 61 6d 65 20 3d 20 74 65 78  erFileName = tex
d500: 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t;..            
d510: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d520: 7d 0d 0a 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 65                 e
d540: 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74  lse if (MatchOpt
d550: 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 74 72 61  ion(newArg, "tra
d560: 63 65 46 6f 72 6d 61 74 22 29 29 0d 0a 20 20 20  ceFormat"))..   
d570: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d580: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
d590: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d5a0: 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66              conf
d5b0: 69 67 75 72 61 74 69 6f 6e 2e 74 72 61 63 65 46  iguration.traceF
d5c0: 6f 72 6d 61 74 20 3d 20 74 65 78 74 3b 0d 0a 20  ormat = text;.. 
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 20 20 20 54                 T
d5f0: 72 61 63 65 4f 70 73 2e 54 72 61 63 65 46 6f 72  raceOps.TraceFor
d600: 6d 61 74 20 3d 20 63 6f 6e 66 69 67 75 72 61 74  mat = configurat
d610: 69 6f 6e 2e 74 72 61 63 65 46 6f 72 6d 61 74 3b  ion.traceFormat;
d620: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
d630: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
d640: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
d650: 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73               els
d660: 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f  e if (MatchOptio
d670: 6e 28 6e 65 77 41 72 67 2c 20 22 69 6e 73 74 61  n(newArg, "insta
d680: 6c 6c 46 6c 61 67 73 22 29 29 0d 0a 20 20 20 20  llFlags"))..    
d690: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d6a0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
d6b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d6c0: 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63             objec
d6d0: 74 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65 45  t value = ParseE
d6e0: 6e 75 6d 28 0d 0a 20 20 20 20 20 20 20 20 20 20  num(..          
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 74 79 70 65 6f 66            typeof
d710: 28 49 6e 73 74 61 6c 6c 46 6c 61 67 73 29 2c 20  (InstallFlags), 
d720: 74 65 78 74 2c 20 74 72 75 65 29 3b 0d 0a 0d 0a  text, true);....
d730: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d740: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d750: 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c  if (value == nul
d760: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
d770: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d780: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
d790: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d7a0: 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
d7b0: 20 3d 20 54 72 61 63 65 4f 70 73 2e 54 72 61 63   = TraceOps.Trac
d7c0: 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
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 20 20 20 54 72 61 63              Trac
d7f0: 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74  ePriority.Lowest
d800: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
d810: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d820: 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
d830: 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67  Callback, String
d840: 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
d850: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d860: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d870: 20 20 22 49 6e 76 61 6c 69 64 20 69 6e 73 74 61    "Invalid insta
d880: 6c 6c 20 66 6c 61 67 73 20 76 61 6c 75 65 3a 20  ll flags value: 
d890: 7b 30 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  {0}",..         
d8a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d8b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46                 F
d8c0: 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74 29 29  orDisplay(text))
d8d0: 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29  , traceCategory)
d8e0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
d8f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d900: 20 20 20 20 20 20 20 20 20 69 66 20 28 73 74 72           if (str
d910: 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ict)..          
d920: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d930: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
d940: 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20  turn false;.... 
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 20                  
d970: 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20     continue;..  
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 7d 0d                }.
d9a0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
d9b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d9c0: 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e     configuration
d9d0: 2e 69 6e 73 74 61 6c 6c 46 6c 61 67 73 20 3d 20  .installFlags = 
d9e0: 28 49 6e 73 74 61 6c 6c 46 6c 61 67 73 29 76 61  (InstallFlags)va
d9f0: 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lue;..          
da00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
da10: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
da20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
da30: 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f   else if (MatchO
da40: 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 74  ption(newArg, "t
da50: 72 61 63 65 50 72 69 6f 72 69 74 79 22 29 29 0d  racePriority")).
da60: 0a 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 7b 0d 0a               {..
da80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
da90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
daa0: 6f 62 6a 65 63 74 20 76 61 6c 75 65 20 3d 20 50  object value = P
dab0: 61 72 73 65 45 6e 75 6d 28 0d 0a 20 20 20 20 20  arseEnum(..     
dac0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dad0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
dae0: 79 70 65 6f 66 28 54 72 61 63 65 50 72 69 6f 72  ypeof(TracePrior
daf0: 69 74 79 29 2c 20 74 65 78 74 2c 20 74 72 75 65  ity), text, true
db00: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
db10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
db20: 20 20 20 20 20 20 69 66 20 28 76 61 6c 75 65 20        if (value 
db30: 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
db40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
db50: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
db60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
db70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
db80: 20 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70   error = TraceOp
db90: 73 2e 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20  s.Trace(..      
dba0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dbb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dbc0: 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e    TracePriority.
dbd0: 4c 6f 77 65 73 74 2c 0d 0a 20 20 20 20 20 20 20  Lowest,..       
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 20 20 20 20 20 20 20                  
dc00: 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20   traceCallback, 
dc10: 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
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 20 20 20 20 20 20                  
dc40: 20 20 20 20 20 20 20 20 22 49 6e 76 61 6c 69 64          "Invalid
dc50: 20 74 72 61 63 65 20 70 72 69 6f 72 69 74 79 20   trace priority 
dc60: 76 61 6c 75 65 3a 20 7b 30 7d 22 2c 0d 0a 20 20  value: {0}",..  
dc70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dc80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dc90: 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79        ForDisplay
dca0: 28 74 65 78 74 29 29 2c 20 74 72 61 63 65 43 61  (text)), traceCa
dcb0: 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
dcc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dcd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dce0: 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20  if (strict)..   
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 20 20 20 20 20                  
dd10: 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
dd20: 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
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 63 6f 6e 74 69 6e            contin
dd50: 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
dd60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dd70: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
dd80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dd90: 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67            config
dda0: 75 72 61 74 69 6f 6e 2e 74 72 61 63 65 50 72 69  uration.tracePri
ddb0: 6f 72 69 74 79 20 3d 20 28 54 72 61 63 65 50 72  ority = (TracePr
ddc0: 69 6f 72 69 74 79 29 76 61 6c 75 65 3b 0d 0a 20  iority)value;.. 
ddd0: 20 20 20 20 20 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 54                 T
ddf0: 72 61 63 65 4f 70 73 2e 54 72 61 63 65 50 72 69  raceOps.TracePri
de00: 6f 72 69 74 79 20 3d 20 63 6f 6e 66 69 67 75 72  ority = configur
de10: 61 74 69 6f 6e 2e 74 72 61 63 65 50 72 69 6f 72  ation.tracePrior
de20: 69 74 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ity;..          
de30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
de40: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
de50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
de60: 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f   else if (MatchO
de70: 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 69  ption(newArg, "i
de80: 6e 73 74 61 6c 6c 22 29 29 0d 0a 20 20 20 20 20  nstall"))..     
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 7b 0d 0a 20 20 20 20 20 20         {..      
deb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dec0: 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 3f 20            bool? 
ded0: 76 61 6c 75 65 20 3d 20 50 61 72 73 65 42 6f 6f  value = ParseBoo
dee0: 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20  lean(text);.... 
def0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
df00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
df10: 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c  f (value == null
df20: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
df30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
df40: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
df50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
df60: 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
df70: 3d 20 54 72 61 63 65 4f 70 73 2e 54 72 61 63 65  = TraceOps.Trace
df80: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
df90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dfa0: 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
dfb0: 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c  Priority.Lowest,
dfc0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
dfd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dfe0: 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
dff0: 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e  allback, String.
e000: 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
e010: 20 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 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f   "Invalid {0} bo
e040: 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d  olean value: {1}
e050: 22 2c 0d 0a 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 20 20 20 20 46 6f 72 44              ForD
e080: 69 73 70 6c 61 79 28 61 72 67 29 2c 20 46 6f 72  isplay(arg), For
e090: 44 69 73 70 6c 61 79 28 74 65 78 74 29 29 2c 0d  Display(text)),.
e0a0: 0a 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 20                  
e0c0: 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
e0d0: 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
e0e0: 20 20 20 20 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: 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20  if (strict)..   
e110: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e120: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e130: 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
e140: 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
e150: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e160: 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e            contin
e170: 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
e180: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e190: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
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 63 6f 6e 66 69 67            config
e1c0: 75 72 61 74 69 6f 6e 2e 69 6e 73 74 61 6c 6c 20  uration.install 
e1d0: 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a  = (bool)value;..
e1e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e1f0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
e200: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e210: 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20             else 
e220: 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28  if (MatchOption(
e230: 6e 65 77 41 72 67 2c 20 22 77 68 61 74 49 66 22  newArg, "whatIf"
e240: 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
e250: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e260: 7b 0d 0a 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 20 20                  
e280: 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d     bool? value =
e290: 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65   ParseBoolean(te
e2a0: 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  xt);....        
e2b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e2c0: 20 20 20 20 20 20 20 20 69 66 20 28 76 61 6c 75          if (valu
e2d0: 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  e == null)..    
e2e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e2f0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
e300: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e310: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e320: 20 20 20 65 72 72 6f 72 20 3d 20 54 72 61 63 65     error = Trace
e330: 4f 70 73 2e 54 72 61 63 65 28 0d 0a 20 20 20 20  Ops.Trace(..    
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 20                  
e360: 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69 74      TracePriorit
e370: 79 2e 4c 6f 77 65 73 74 2c 0d 0a 20 20 20 20 20  y.Lowest,..     
e380: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e390: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e3a0: 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b     traceCallback
e3b0: 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  , String.Format(
e3c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
e3d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e3e0: 20 20 20 20 20 20 20 20 20 20 22 49 6e 76 61 6c            "Inval
e3f0: 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76  id {0} boolean v
e400: 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20  alue: {1}",..   
e410: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e420: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e430: 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28       ForDisplay(
e440: 61 72 67 29 2c 20 46 6f 72 44 69 73 70 6c 61 79  arg), ForDisplay
e450: 28 74 65 78 74 29 29 2c 0d 0a 20 20 20 20 20 20  (text)),..      
e460: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e470: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e480: 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
e490: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
e4a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e4b0: 20 20 20 20 20 20 20 20 20 69 66 20 28 73 74 72           if (str
e4c0: 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ict)..          
e4d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e4e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
e4f0: 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20  turn false;.... 
e500: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e510: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e520: 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20     continue;..  
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 7d 0d                }.
e550: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
e560: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e570: 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e     configuration
e580: 2e 77 68 61 74 49 66 20 3d 20 28 62 6f 6f 6c 29  .whatIf = (bool)
e590: 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20  value;..        
e5a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e5b0: 20 20 20 20 7d 0d 0a 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 65 6c 73 65 20 69 66 20 28 4d 61 74 63     else if (Matc
e5e0: 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20  hOption(newArg, 
e5f0: 22 76 65 72 62 6f 73 65 22 29 29 0d 0a 20 20 20  "verbose"))..   
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 20 20 7b 0d 0a 20 20 20 20           {..    
e620: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e630: 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
e640: 3f 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65 42  ? value = ParseB
e650: 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d  oolean(text);...
e660: 0a 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 20 20 20 20                  
e680: 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75   if (value == nu
e690: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
e6a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e6b0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
e6c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e6d0: 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
e6e0: 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 54 72 61  r = TraceOps.Tra
e6f0: 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ce(..           
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 20 20 20 20 20 54 72 61               Tra
e720: 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73  cePriority.Lowes
e730: 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t,..            
e740: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e750: 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
e760: 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e  eCallback, Strin
e770: 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
e780: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e790: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e7a0: 20 20 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20     "Invalid {0} 
e7b0: 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b  boolean value: {
e7c0: 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  1}",..          
e7d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e7e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f                Fo
e7f0: 72 44 69 73 70 6c 61 79 28 61 72 67 29 2c 20 46  rDisplay(arg), F
e800: 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74 29 29  orDisplay(text))
e810: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
e820: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e830: 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
e840: 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
e850: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e860: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e870: 20 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20    if (strict).. 
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 20 20                  
e8a0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
e8b0: 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  lse;....        
e8c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e8d0: 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74              cont
e8e0: 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  inue;..         
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 7d 0d 0a 0d 0a 20 20 20 20         }....    
e910: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e920: 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66              conf
e930: 69 67 75 72 61 74 69 6f 6e 2e 76 65 72 62 6f 73  iguration.verbos
e940: 65 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b  e = (bool)value;
e950: 0d 0a 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 20 20 20 20 7d 0d                }.
e970: 0a 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 65 6c 73               els
e990: 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f  e if (MatchOptio
e9a0: 6e 28 6e 65 77 41 72 67 2c 20 22 63 6f 6e 66 69  n(newArg, "confi
e9b0: 72 6d 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20  rm"))..         
e9c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e9d0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
e9e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e9f0: 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75        bool? valu
ea00: 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e  e = ParseBoolean
ea10: 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20  (text);....     
ea20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ea30: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76             if (v
ea40: 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  alue == null).. 
ea50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ea60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
ea70: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
ea80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ea90: 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72        error = Tr
eaa0: 61 63 65 4f 70 73 2e 54 72 61 63 65 28 0d 0a 20  aceOps.Trace(.. 
eab0: 20 20 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 20 20 20 20 20 54 72 61 63 65 50 72 69 6f         TracePrio
eae0: 72 69 74 79 2e 4c 6f 77 65 73 74 2c 0d 0a 20 20  rity.Lowest,..  
eaf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
eb00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
eb10: 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
eb20: 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d  ack, String.Form
eb30: 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
eb40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
eb50: 20 20 20 20 20 20 20 20 20 20 20 20 20 22 49 6e               "In
eb60: 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61  valid {0} boolea
eb70: 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a  n value: {1}",..
eb80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
eb90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
eba0: 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c          ForDispl
ebb0: 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69 73 70  ay(arg), ForDisp
ebc0: 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20 20 20  lay(text)),..   
ebd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ebe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ebf0: 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
ec00: 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
ec10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ec20: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
ec30: 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20  strict)..       
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 20 20 20 20 20 20 20 20                  
ec60: 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
ec70: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
ec80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ec90: 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d        continue;.
eca0: 0a 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 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
ecd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ece0: 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74        configurat
ecf0: 69 6f 6e 2e 63 6f 6e 66 69 72 6d 20 3d 20 28 62  ion.confirm = (b
ed00: 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20  ool)value;..    
ed10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ed20: 20 20 20 20 20 20 20 20 7d 0d 0a 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 65 6c 73 65 20 69 66 20 28         else if (
ed50: 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41  MatchOption(newA
ed60: 72 67 2c 20 22 6e 6f 44 65 73 6b 74 6f 70 22 29  rg, "noDesktop")
ed70: 29 0d 0a 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 20 20 20 20 7b                 {
ed90: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
eda0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
edb0: 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20    bool? value = 
edc0: 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78  ParseBoolean(tex
edd0: 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  t);....         
ede0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
edf0: 20 20 20 20 20 20 20 69 66 20 28 76 61 6c 75 65         if (value
ee00: 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
ee10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ee20: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
ee30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ee40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ee50: 20 20 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f    error = TraceO
ee60: 70 73 2e 54 72 61 63 65 28 0d 0a 20 20 20 20 20  ps.Trace(..     
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 20 20                  
ee90: 20 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79     TracePriority
eea0: 2e 4c 6f 77 65 73 74 2c 0d 0a 20 20 20 20 20 20  .Lowest,..      
eeb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
eec0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
eed0: 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c    traceCallback,
eee0: 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
eef0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
ef00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ef10: 20 20 20 20 20 20 20 20 20 22 49 6e 76 61 6c 69           "Invali
ef20: 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61  d {0} boolean va
ef30: 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20  lue: {1}",..    
ef40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ef50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ef60: 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61      ForDisplay(a
ef70: 72 67 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  rg), ForDisplay(
ef80: 74 65 78 74 29 29 2c 0d 0a 20 20 20 20 20 20 20  text)),..       
ef90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
efa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
efb0: 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
efc0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
efd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
efe0: 20 20 20 20 20 20 20 20 69 66 20 28 73 74 72 69          if (stri
eff0: 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ct)..           
f000: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f010: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
f020: 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20  urn false;....  
f030: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f040: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f050: 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20    continue;..   
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 7d 0d 0a               }..
f080: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
f090: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f0a0: 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e    configuration.
f0b0: 6e 6f 44 65 73 6b 74 6f 70 20 3d 20 28 62 6f 6f  noDesktop = (boo
f0c0: 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20  l)value;..      
f0d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f0e0: 20 20 20 20 20 20 7d 0d 0a 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 65 6c 73 65 20 69 66 20 28 4d 61       else if (Ma
f110: 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67  tchOption(newArg
f120: 2c 20 22 6e 6f 43 6f 6d 70 61 63 74 22 29 29 0d  , "noCompact")).
f130: 0a 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 20 20 20 20 7b 0d 0a               {..
f150: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f160: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f170: 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61  bool? value = Pa
f180: 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29  rseBoolean(text)
f190: 3b 0d 0a 0d 0a 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: 20 20 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d       if (value =
f1c0: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
f1d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f1e0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
f1f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f200: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f210: 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73  error = TraceOps
f220: 2e 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20  .Trace(..       
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 20 20 20 20                  
f250: 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c   TracePriority.L
f260: 6f 77 65 73 74 2c 0d 0a 20 20 20 20 20 20 20 20  owest,..        
f270: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f280: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f290: 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53  traceCallback, S
f2a0: 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
f2b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f2c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f2d0: 20 20 20 20 20 20 20 22 49 6e 76 61 6c 69 64 20         "Invalid 
f2e0: 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75  {0} boolean valu
f2f0: 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20  e: {1}",..      
f300: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f310: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f320: 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67    ForDisplay(arg
f330: 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74 65  ), ForDisplay(te
f340: 78 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  xt)),..         
f350: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f360: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
f370: 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
f380: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
f390: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f3a0: 20 20 20 20 20 20 69 66 20 28 73 74 72 69 63 74        if (strict
f3b0: 29 0d 0a 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 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
f3e0: 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20  n false;....    
f3f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f400: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f410: 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20  continue;..     
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 7d 0d 0a 0d 0a             }....
f440: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f450: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f460: 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f  configuration.no
f470: 43 6f 6d 70 61 63 74 20 3d 20 28 62 6f 6f 6c 29  Compact = (bool)
f480: 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20  value;..        
f490: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f4a0: 20 20 20 20 7d 0d 0a 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 65 6c 73 65 20 69 66 20 28 4d 61 74 63     else if (Matc
f4d0: 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20  hOption(newArg, 
f4e0: 22 6e 6f 4e 65 74 46 78 32 30 22 29 29 0d 0a 20  "noNetFx20")).. 
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 20 20 20 20 7b 0d 0a 20 20             {..  
f510: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f520: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
f530: 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61 72 73  ol? value = Pars
f540: 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d  eBoolean(text);.
f550: 0a 0d 0a 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 20 20                  
f570: 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20     if (value == 
f580: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
f590: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f5a0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
f5b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f5c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
f5d0: 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 54  ror = TraceOps.T
f5e0: 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20  race(..         
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 20 20 20 20 20 54                 T
f610: 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77  racePriority.Low
f620: 65 73 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  est,..          
f630: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f640: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
f650: 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72  aceCallback, Str
f660: 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
f670: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f680: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f690: 20 20 20 20 20 22 49 6e 76 61 6c 69 64 20 7b 30       "Invalid {0
f6a0: 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a  } boolean value:
f6b0: 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20   {1}",..        
f6c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f6d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f6e0: 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29 2c  ForDisplay(arg),
f6f0: 20 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74   ForDisplay(text
f700: 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
f710: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f720: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
f730: 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
f740: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f750: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f760: 20 20 20 20 69 66 20 28 73 74 72 69 63 74 29 0d      if (strict).
f770: 0a 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: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
f7a0: 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  false;....      
f7b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f7c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
f7d0: 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20  ntinue;..       
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 7d 0d 0a 0d 0a 20 20           }....  
f800: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f810: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
f820: 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 4e 65  nfiguration.noNe
f830: 74 46 78 32 30 20 3d 20 28 62 6f 6f 6c 29 76 61  tFx20 = (bool)va
f840: 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lue;..          
f850: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f860: 20 20 7d 0d 0a 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 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f   else if (MatchO
f890: 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 6e  ption(newArg, "n
f8a0: 6f 4e 65 74 46 78 34 30 22 29 29 0d 0a 20 20 20  oNetFx40"))..   
f8b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f8c0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
f8d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f8e0: 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
f8f0: 3f 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65 42  ? value = ParseB
f900: 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d  oolean(text);...
f910: 0a 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 20 20 20 20                  
f930: 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75   if (value == nu
f940: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
f950: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f960: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
f970: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f980: 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
f990: 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 54 72 61  r = TraceOps.Tra
f9a0: 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ce(..           
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 20 20 20 20 20 54 72 61               Tra
f9d0: 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73  cePriority.Lowes
f9e0: 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t,..            
f9f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fa00: 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
fa10: 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e  eCallback, Strin
fa20: 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
fa30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fa40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fa50: 20 20 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20     "Invalid {0} 
fa60: 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b  boolean value: {
fa70: 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  1}",..          
fa80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fa90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f                Fo
faa0: 72 44 69 73 70 6c 61 79 28 61 72 67 29 2c 20 46  rDisplay(arg), F
fab0: 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74 29 29  orDisplay(text))
fac0: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
fad0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fae0: 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
faf0: 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
fb00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fb10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fb20: 20 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20    if (strict).. 
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 20 20                  
fb50: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
fb60: 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  lse;....        
fb70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fb80: 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74              cont
fb90: 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  inue;..         
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 7d 0d 0a 0d 0a 20 20 20 20         }....    
fbc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fbd0: 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66              conf
fbe0: 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 4e 65 74 46  iguration.noNetF
fbf0: 78 34 30 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75  x40 = (bool)valu
fc00: 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
fc10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fc20: 7d 0d 0a 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 65                 e
fc40: 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74  lse if (MatchOpt
fc50: 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 6e 6f 56  ion(newArg, "noV
fc60: 73 32 30 30 38 22 29 29 0d 0a 20 20 20 20 20 20  s2008"))..      
fc70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fc80: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
fc90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fca0: 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76           bool? v
fcb0: 61 6c 75 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c  alue = ParseBool
fcc0: 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20  ean(text);....  
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 20 20 20 20 20 69 66                if
fcf0: 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29   (value == null)
fd00: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
fd10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fd20: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
fd30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fd40: 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
fd50: 20 54 72 61 63 65 4f 70 73 2e 54 72 61 63 65 28   TraceOps.Trace(
fd60: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
fd70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fd80: 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 50            TraceP
fd90: 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 0d  riority.Lowest,.
fda0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
fdb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fdc0: 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
fdd0: 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46  llback, String.F
fde0: 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
fdf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fe00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fe10: 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f  "Invalid {0} boo
fe20: 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22  lean value: {1}"
fe30: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
fe40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fe50: 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69             ForDi
fe60: 73 70 6c 61 79 28 61 72 67 29 2c 20 46 6f 72 44  splay(arg), ForD
fe70: 69 73 70 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a  isplay(text)),..
fe80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fe90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fea0: 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74          traceCat
feb0: 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
fec0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fed0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
fee0: 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20  f (strict)..    
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 20 20 20 20 20                  
ff10: 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
ff20: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
ff30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ff40: 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75           continu
ff50: 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
ff60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ff70: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
ff80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ff90: 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75           configu
ffa0: 72 61 74 69 6f 6e 2e 6e 6f 56 73 32 30 30 38 20  ration.noVs2008 
ffb0: 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a  = (bool)value;..
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 20 20 20 20 20 7d 0d 0a 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 65 6c 73 65 20             else 
10000 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28  if (MatchOption(
10010 6e 65 77 41 72 67 2c 20 22 6e 6f 56 73 32 30 31  newArg, "noVs201
10020 30 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  0"))..          
10030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10040 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
10050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10060 20 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65       bool? value
10070 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28   = ParseBoolean(
10080 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  text);....      
10090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
100a0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76 61            if (va
100b0 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  lue == null)..  
100c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
100d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
100e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
100f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10100 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72 61       error = Tra
10110 63 65 4f 70 73 2e 54 72 61 63 65 28 0d 0a 20 20  ceOps.Trace(..  
10120 20 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 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72        TracePrior
10150 69 74 79 2e 4c 6f 77 65 73 74 2c 0d 0a 20 20 20  ity.Lowest,..   
10160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10180 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61       traceCallba
10190 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ck, String.Forma
101a0 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
101b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
101c0 20 20 20 20 20 20 20 20 20 20 20 20 22 49 6e 76              "Inv
101d0 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e  alid {0} boolean
101e0 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20   value: {1}",.. 
101f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10210 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61         ForDispla
10220 79 28 61 72 67 29 2c 20 46 6f 72 44 69 73 70 6c  y(arg), ForDispl
10230 61 79 28 74 65 78 74 29 29 2c 0d 0a 20 20 20 20  ay(text)),..    
10240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10260 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72      traceCategor
10270 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
10280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10290 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73             if (s
102a0 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20  trict)..        
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 20 20 20 20 20 20 20 20 20                  
102d0 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d  return false;...
102e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
102f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10300 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a       continue;..
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 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
10340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10350 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69       configurati
10360 6f 6e 2e 6e 6f 56 73 32 30 31 30 20 3d 20 28 62  on.noVs2010 = (b
10370 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20  ool)value;..    
10380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10390 20 20 20 20 20 20 20 20 7d 0d 0a 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 65 6c 73 65 20 69 66 20 28         else if (
103c0 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41  MatchOption(newA
103d0 72 67 2c 20 22 6e 6f 54 72 61 63 65 22 29 29 0d  rg, "noTrace")).
103e0 0a 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 20 20 7b 0d 0a               {..
10400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10420 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61  bool? value = Pa
10430 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29  rseBoolean(text)
10440 3b 0d 0a 0d 0a 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 20 20 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d       if (value =
10470 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
10480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10490 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
104a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
104b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
104c0 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73  error = TraceOps
104d0 2e 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20  .Trace(..       
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 20 20 20 20                  
10500 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c   TracePriority.L
10510 6f 77 65 73 74 2c 0d 0a 20 20 20 20 20 20 20 20  owest,..        
10520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10540 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53  traceCallback, S
10550 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
10560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10580 20 20 20 20 20 20 20 22 49 6e 76 61 6c 69 64 20         "Invalid 
10590 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75  {0} boolean valu
105a0 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20  e: {1}",..      
105b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
105c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
105d0 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67    ForDisplay(arg
105e0 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74 65  ), ForDisplay(te
105f0 78 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  xt)),..         
10600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
10620 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
10630 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
10640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10650 20 20 20 20 20 20 69 66 20 28 73 74 72 69 63 74        if (strict
10660 29 0d 0a 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 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
10690 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20  n false;....    
106a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
106b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
106c0 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20  continue;..     
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 7d 0d 0a 0d 0a             }....
106f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10710 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f  configuration.no
10720 54 72 61 63 65 20 3d 20 28 62 6f 6f 6c 29 76 61  Trace = (bool)va
10730 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lue;..          
10740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10750 20 20 7d 0d 0a 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 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f   else if (MatchO
10780 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 6e  ption(newArg, "n
10790 6f 43 6f 6e 73 6f 6c 65 22 29 29 0d 0a 20 20 20  oConsole"))..   
107a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
107b0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
107c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
107d0 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
107e0 3f 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65 42  ? value = ParseB
107f0 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d  oolean(text);...
10800 0a 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 20 20 20 20                  
10820 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75   if (value == nu
10830 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
10840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10850 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
10860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10870 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
10880 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 54 72 61  r = TraceOps.Tra
10890 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ce(..           
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 20 20 20 20 20 54 72 61               Tra
108c0 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73  cePriority.Lowes
108d0 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t,..            
108e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
108f0 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
10900 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e  eCallback, Strin
10910 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
10920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10940 20 20 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20     "Invalid {0} 
10950 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b  boolean value: {
10960 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  1}",..          
10970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f                Fo
10990 72 44 69 73 70 6c 61 79 28 61 72 67 29 2c 20 46  rDisplay(arg), F
109a0 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74 29 29  orDisplay(text))
109b0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
109c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
109d0 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
109e0 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
109f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10a10 20 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20    if (strict).. 
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 20 20                  
10a40 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
10a50 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  lse;....        
10a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10a70 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74              cont
10a80 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  inue;..         
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 7d 0d 0a 0d 0a 20 20 20 20         }....    
10ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10ac0 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66              conf
10ad0 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 43 6f 6e 73  iguration.noCons
10ae0 6f 6c 65 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75  ole = (bool)valu
10af0 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
10b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10b10 7d 0d 0a 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 65                 e
10b30 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74  lse if (MatchOpt
10b40 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 6e 6f 4c  ion(newArg, "noL
10b50 6f 67 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20  og"))..         
10b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10b70 20 20 20 7b 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 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75        bool? valu
10ba0 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e  e = ParseBoolean
10bb0 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20  (text);....     
10bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10bd0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76             if (v
10be0 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  alue == null).. 
10bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
10c10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
10c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10c30 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72        error = Tr
10c40 61 63 65 4f 70 73 2e 54 72 61 63 65 28 0d 0a 20  aceOps.Trace(.. 
10c50 20 20 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 20 20 20 20 20 54 72 61 63 65 50 72 69 6f         TracePrio
10c80 72 69 74 79 2e 4c 6f 77 65 73 74 2c 0d 0a 20 20  rity.Lowest,..  
10c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10cb0 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
10cc0 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d  ack, String.Form
10cd0 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
10ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 49 6e               "In
10d00 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61  valid {0} boolea
10d10 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a  n value: {1}",..
10d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10d40 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c          ForDispl
10d50 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69 73 70  ay(arg), ForDisp
10d60 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20 20 20  lay(text)),..   
10d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10d90 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
10da0 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
10db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10dc0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
10dd0 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20  strict)..       
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 20 20 20 20 20 20 20 20                  
10e00 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
10e10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
10e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10e30 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d        continue;.
10e40 0a 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 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
10e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10e80 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74        configurat
10e90 69 6f 6e 2e 6e 6f 4c 6f 67 20 3d 20 28 62 6f 6f  ion.noLog = (boo
10ea0 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20  l)value;..      
10eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10ec0 20 20 20 20 20 20 7d 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 65 6c 73 65 0d 0a 20 20 20 20 20       else..     
10ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10f00 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
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 20 65 72 72 6f 72 20            error 
10f30 3d 20 54 72 61 63 65 4f 70 73 2e 54 72 61 63 65  = TraceOps.Trace
10f40 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
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 54 72 61 63 65 50 72 69 6f         TracePrio
10f70 72 69 74 79 2e 4c 6f 77 65 73 74 2c 0d 0a 20 20  rity.Lowest,..  
10f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10fa0 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c    traceCallback,
10fb0 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
10fc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
10fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10fe0 20 20 20 20 20 22 55 6e 73 75 70 70 6f 72 74 65       "Unsupporte
10ff0 64 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 20 6f  d command line o
11000 70 74 69 6f 6e 3a 20 7b 30 7d 22 2c 0d 0a 20 20  ption: {0}",..  
11010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11030 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67    ForDisplay(arg
11040 29 29 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72  )), traceCategor
11050 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
11060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11070 20 20 20 20 20 20 20 69 66 20 28 73 74 72 69 63         if (stric
11080 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t)..            
11090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
110a0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
110b0 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
110c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
110d0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
110e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
110f0 0a 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 65 6c 73 65 0d 0a 20           else.. 
11110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11120 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
11130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11140 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72        error = Tr
11150 61 63 65 4f 70 73 2e 54 72 61 63 65 28 0d 0a 20  aceOps.Trace(.. 
11160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
11180 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77  racePriority.Low
11190 65 73 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  est,..          
111a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
111b0 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
111c0 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d  ack, String.Form
111d0 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
111e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
111f0 20 20 20 20 20 22 55 6e 73 75 70 70 6f 72 74 65       "Unsupporte
11200 64 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 20 61  d command line a
11210 72 67 75 6d 65 6e 74 3a 20 7b 30 7d 22 2c 0d 0a  rgument: {0}",..
11220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11240 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29 29  ForDisplay(arg))
11250 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29  , traceCategory)
11260 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
11270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11280 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20   if (strict)..  
11290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
112a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
112b0 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
112c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
112d0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
112e0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
112f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
11300 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65       return true
11310 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
11320 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
11330 20 20 20 20 20 20 63 61 74 63 68 20 28 45 78 63        catch (Exc
11340 65 70 74 69 6f 6e 20 65 29 0d 0a 20 20 20 20 20  eption e)..     
11350 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
11360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11370 20 20 54 72 61 63 65 4f 70 73 2e 54 72 61 63 65    TraceOps.Trace
11380 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
11390 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
113a0 50 72 69 6f 72 69 74 79 2e 48 69 67 68 65 73 74  Priority.Highest
113b0 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c  , traceCallback,
113c0 20 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20   e,..           
113d0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
113e0 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
113f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11400 20 20 20 20 65 72 72 6f 72 20 3d 20 22 46 61 69      error = "Fai
11410 6c 65 64 20 74 6f 20 6d 6f 64 69 66 79 20 63 6f  led to modify co
11420 6e 66 69 67 75 72 61 74 69 6f 6e 2e 22 3b 0d 0a  nfiguration.";..
11430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11440 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
11450 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
11460 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
11470 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
11480 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
11490 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
114a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
114b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
114c0 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
114d0 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69      public stati
114e0 63 20 62 6f 6f 6c 20 50 72 6f 63 65 73 73 28 0d  c bool Process(.
114f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
11500 20 73 74 72 69 6e 67 5b 5d 20 61 72 67 73 2c 0d   string[] args,.
11510 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
11520 20 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 63   Configuration c
11530 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2c 0d 0a 20  onfiguration,.. 
11540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
11550 6f 6f 6c 20 73 74 72 69 63 74 2c 0d 0a 20 20 20  ool strict,..   
11560 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66               ref
11570 20 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20   string error.. 
11580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29                 )
11590 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
115a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
115b0 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20   try..          
115c0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
115d0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
115e0 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d  (configuration =
115f0 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
11600 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
11610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11620 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
11630 22 49 6e 76 61 6c 69 64 20 63 6f 6e 66 69 67 75  "Invalid configu
11640 72 61 74 69 6f 6e 2e 22 3b 0d 0a 20 20 20 20 20  ration.";..     
11650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11660 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
11670 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
11680 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
11690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 41                 A
116a0 73 73 65 6d 62 6c 79 20 61 73 73 65 6d 62 6c 79  ssembly assembly
116b0 20 3d 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e   = configuration
116c0 2e 61 73 73 65 6d 62 6c 79 3b 0d 0a 0d 0a 20 20  .assembly;....  
116d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
116e0 20 20 69 66 20 28 61 73 73 65 6d 62 6c 79 20 3d    if (assembly =
116f0 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
11700 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
11710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11720 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
11730 22 49 6e 76 61 6c 69 64 20 61 73 73 65 6d 62 6c  "Invalid assembl
11740 79 2e 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  y.";..          
11750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
11760 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
11770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11780 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
11790 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21 63            if (!c
117a0 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 54  onfiguration.noT
117b0 72 61 63 65 29 0d 0a 20 20 20 20 20 20 20 20 20  race)..         
117c0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
117d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
117e0 20 20 20 20 20 20 69 66 20 28 21 63 6f 6e 66 69        if (!confi
117f0 67 75 72 61 74 69 6f 6e 2e 6e 6f 4c 6f 67 20 26  guration.noLog &
11800 26 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  &..             
11810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53                 S
11820 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d  tring.IsNullOrEm
11830 70 74 79 28 63 6f 6e 66 69 67 75 72 61 74 69 6f  pty(configuratio
11840 6e 2e 6c 6f 67 46 69 6c 65 4e 61 6d 65 29 29 0d  n.logFileName)).
11850 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
11860 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
11870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11880 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72          configur
11890 61 74 69 6f 6e 2e 6c 6f 67 46 69 6c 65 4e 61 6d  ation.logFileNam
118a0 65 20 3d 20 47 65 74 4c 6f 67 46 69 6c 65 4e 61  e = GetLogFileNa
118b0 6d 65 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  me();..         
118c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
118d0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
118e0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
118f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11900 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11910 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11920 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
11930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
11940 66 20 28 21 63 6f 6e 66 69 67 75 72 61 74 69 6f  f (!configuratio
11950 6e 2e 6e 6f 43 6f 6e 73 6f 6c 65 29 0d 0a 20 20  n.noConsole)..  
11960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11970 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
11980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11990 20 20 20 20 20 54 72 61 63 65 2e 4c 69 73 74 65       Trace.Liste
119a0 6e 65 72 73 2e 41 64 64 28 6e 65 77 20 43 6f 6e  ners.Add(new Con
119b0 73 6f 6c 65 54 72 61 63 65 4c 69 73 74 65 6e 65  soleTraceListene
119c0 72 28 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  r());..         
119d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
119e0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
119f0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
11a00 21 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e  !configuration.n
11a10 6f 4c 6f 67 20 26 26 0d 0a 20 20 20 20 20 20 20  oLog &&..       
11a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11a30 20 20 20 20 20 21 53 74 72 69 6e 67 2e 49 73 4e       !String.IsN
11a40 75 6c 6c 4f 72 45 6d 70 74 79 28 63 6f 6e 66 69  ullOrEmpty(confi
11a50 67 75 72 61 74 69 6f 6e 2e 6c 6f 67 46 69 6c 65  guration.logFile
11a60 4e 61 6d 65 29 29 0d 0a 20 20 20 20 20 20 20 20  Name))..        
11a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11a80 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
11a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
11aa0 72 61 63 65 2e 4c 69 73 74 65 6e 65 72 73 2e 41  race.Listeners.A
11ab0 64 64 28 6e 65 77 20 54 65 78 74 57 72 69 74 65  dd(new TextWrite
11ac0 72 54 72 61 63 65 4c 69 73 74 65 6e 65 72 28 0d  rTraceListener(.
11ad0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
11ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11af0 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6c   configuration.l
11b00 6f 67 46 69 6c 65 4e 61 6d 65 29 29 3b 0d 0a 20  ogFileName));.. 
11b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11b20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
11b30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
11b40 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
11b50 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
11b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
11b70 2f 20 4e 4f 54 45 3a 20 44 75 6d 70 20 74 68 65  / NOTE: Dump the
11b80 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 6e   configuration n
11b90 6f 77 20 69 6e 20 63 61 73 65 20 77 65 20 6e 65  ow in case we ne
11ba0 65 64 20 74 6f 0d 0a 20 20 20 20 20 20 20 20 20  ed to..         
11bb0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
11bc0 20 20 20 20 74 72 6f 75 62 6c 65 73 68 6f 6f 74      troubleshoot
11bd0 20 61 6e 79 20 69 73 73 75 65 73 2e 0d 0a 20 20   any issues...  
11be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11bf0 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
11c00 20 20 20 20 20 20 20 20 20 20 69 66 20 28 63 6f            if (co
11c10 6e 66 69 67 75 72 61 74 69 6f 6e 2e 74 72 61 63  nfiguration.trac
11c20 65 50 72 69 6f 72 69 74 79 20 3c 3d 20 54 72 61  ePriority <= Tra
11c30 63 65 50 72 69 6f 72 69 74 79 2e 4d 65 64 69 75  cePriority.Mediu
11c40 6d 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  m)..            
11c50 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66              conf
11c60 69 67 75 72 61 74 69 6f 6e 2e 44 75 6d 70 28 29  iguration.Dump()
11c70 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
11c80 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
11c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11ca0 20 2f 2f 20 4e 4f 54 45 3a 20 53 68 6f 77 20 77   // NOTE: Show w
11cb0 68 65 72 65 20 77 65 20 61 72 65 20 72 75 6e 6e  here we are runn
11cc0 69 6e 67 20 66 72 6f 6d 20 61 6e 64 20 68 6f 77  ing from and how
11cd0 20 77 65 20 77 65 72 65 0d 0a 20 20 20 20 20 20   we were..      
11ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
11cf0 20 20 20 20 20 20 20 69 6e 76 6f 6b 65 64 2e 0d         invoked..
11d00 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
11d10 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
11d20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72               str
11d30 69 6e 67 20 6c 6f 63 61 74 69 6f 6e 20 3d 20 61  ing location = a
11d40 73 73 65 6d 62 6c 79 2e 4c 6f 63 61 74 69 6f 6e  ssembly.Location
11d50 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
11d60 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70           TraceOp
11d70 73 2e 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20  s.Trace(..      
11d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11d90 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e    TracePriority.
11da0 4d 65 64 69 75 6d 2c 20 74 72 61 63 65 43 61 6c  Medium, traceCal
11db0 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f  lback, String.Fo
11dc0 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
11dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
11de0 4f 72 69 67 69 6e 61 6c 20 63 6f 6d 6d 61 6e 64  Original command
11df0 20 6c 69 6e 65 20 69 73 3a 20 7b 30 7d 22 2c 0d   line is: {0}",.
11e00 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
11e10 20 20 20 20 20 20 20 20 20 45 6e 76 69 72 6f 6e           Environ
11e20 6d 65 6e 74 2e 43 6f 6d 6d 61 6e 64 4c 69 6e 65  ment.CommandLine
11e30 29 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72 79  ), traceCategory
11e40 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
11e50 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21 63            if (!c
11e60 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 77 68 61  onfiguration.wha
11e70 74 49 66 29 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf)..          
11e80 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
11e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11ea0 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
11eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11ec0 20 2f 2f 20 4e 4f 54 45 3a 20 49 66 20 74 68 65   // NOTE: If the
11ed0 20 64 65 62 75 67 67 65 72 20 69 73 20 61 74 74   debugger is att
11ee0 61 63 68 65 64 20 61 6e 64 20 57 68 61 74 2d 49  ached and What-I
11ef0 66 20 6d 6f 64 65 0d 0a 20 20 20 20 20 20 20 20  f mode..        
11f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11f10 2f 2f 20 20 20 20 20 20 20 69 73 20 5b 6e 6f 77  //       is [now
11f20 5d 20 64 69 73 61 62 6c 65 64 2c 20 69 73 73 75  ] disabled, issu
11f30 65 20 61 20 77 61 72 6e 69 6e 67 2e 0d 0a 20 20  e a warning...  
11f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11f50 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
11f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11f70 20 20 69 66 20 28 44 65 62 75 67 67 65 72 2e 49    if (Debugger.I
11f80 73 41 74 74 61 63 68 65 64 29 0d 0a 20 20 20 20  sAttached)..    
11f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11fa0 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73          TraceOps
11fb0 2e 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20  .Trace(..       
11fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11fd0 20 20 20 20 20 20 20 20 20 54 72 61 63 65 50 72           TracePr
11fe0 69 6f 72 69 74 79 2e 4d 65 64 69 75 6d 2c 20 74  iority.Medium, t
11ff0 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20  raceCallback,.. 
12000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
12020 46 6f 72 63 65 64 20 74 6f 20 64 69 73 61 62 6c  Forced to disabl
12030 65 20 5c 22 77 68 61 74 2d 69 66 5c 22 20 6d 6f  e \"what-if\" mo
12040 64 65 20 77 69 74 68 20 22 20 2b 0d 0a 20 20 20  de with " +..   
12050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12060 20 20 20 20 20 20 20 20 20 20 20 20 20 22 64 65               "de
12070 62 75 67 67 65 72 20 61 74 74 61 63 68 65 64 2e  bugger attached.
12080 22 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72 79  ", traceCategory
12090 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
120a0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
120b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
120c0 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  lse..           
120d0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
120e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
120f0 20 20 20 20 54 72 61 63 65 4f 70 73 2e 54 72 61      TraceOps.Tra
12100 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ce(..           
12110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12120 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 48   TracePriority.H
12130 69 67 68 65 72 2c 20 74 72 61 63 65 43 61 6c 6c  igher, traceCall
12140 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20  back,..         
12150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12160 20 20 20 22 4e 6f 20 61 63 74 75 61 6c 20 63 68     "No actual ch
12170 61 6e 67 65 73 20 77 69 6c 6c 20 62 65 20 6d 61  anges will be ma
12180 64 65 20 74 6f 20 74 68 69 73 20 22 20 2b 0d 0a  de to this " +..
12190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
121a0 20 20 20 20 20 20 20 20 20 20 20 20 22 73 79 73              "sys
121b0 74 65 6d 20 62 65 63 61 75 73 65 20 5c 22 77 68  tem because \"wh
121c0 61 74 2d 69 66 5c 22 20 6d 6f 64 65 20 69 73 20  at-if\" mode is 
121d0 65 6e 61 62 6c 65 64 2e 22 2c 0d 0a 20 20 20 20  enabled.",..    
121e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
121f0 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74          traceCat
12200 65 67 6f 72 79 29 3b 0d 0a 20 20 20 20 20 20 20  egory);..       
12210 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
12220 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
12230 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
12240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
12250 20 4e 4f 54 45 3a 20 49 66 20 74 68 65 20 63 6f   NOTE: If the co
12260 6d 6d 61 6e 64 20 6c 69 6e 65 20 68 61 73 20 6e  mmand line has n
12270 6f 74 20 62 65 65 6e 20 6d 61 6e 75 61 6c 6c 79  ot been manually
12280 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
12290 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 63        //       c
122a0 6f 6e 66 69 72 6d 65 64 20 28 69 2e 65 2e 20 76  onfirmed (i.e. v
122b0 69 61 20 74 68 65 20 65 78 70 6c 69 63 69 74 20  ia the explicit 
122c0 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 0d 0a 20 20  command line..  
122d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
122e0 20 20 2f 2f 20 20 20 20 20 20 20 6f 70 74 69 6f    //       optio
122f0 6e 29 2c 20 74 68 65 6e 20 73 74 6f 70 20 70 72  n), then stop pr
12300 6f 63 65 73 73 69 6e 67 20 6e 6f 77 2e 20 20 57  ocessing now.  W
12310 65 20 65 6e 66 6f 72 63 65 0d 0a 20 20 20 20 20  e enforce..     
12320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
12330 2f 20 20 20 20 20 20 20 74 68 69 73 20 72 75 6c  /       this rul
12340 65 20 73 6f 20 74 68 61 74 20 73 69 6d 70 6c 79  e so that simply
12350 20 64 6f 75 62 6c 65 2d 63 6c 69 63 6b 69 6e 67   double-clicking
12360 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 20 20   the..          
12370 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
12380 20 20 20 65 78 65 63 75 74 61 62 6c 65 20 77 69     executable wi
12390 6c 6c 20 6e 6f 74 20 72 65 73 75 6c 74 20 69 6e  ll not result in
123a0 20 61 6e 79 20 63 68 61 6e 67 65 73 20 62 65 69   any changes bei
123b0 6e 67 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ng..            
123c0 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
123d0 20 6d 61 64 65 20 74 6f 20 74 68 65 20 73 79 73   made to the sys
123e0 74 65 6d 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  tem...          
123f0 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
12400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12410 20 20 69 66 20 28 21 63 6f 6e 66 69 67 75 72 61    if (!configura
12420 74 69 6f 6e 2e 63 6f 6e 66 69 72 6d 29 0d 0a 20  tion.confirm).. 
12430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12440 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
12450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
12460 72 6f 72 20 3d 20 22 43 61 6e 6e 6f 74 20 63 6f  ror = "Cannot co
12470 6e 74 69 6e 75 65 2c 20 74 68 65 20 5c 22 63 6f  ntinue, the \"co
12480 6e 66 69 72 6d 5c 22 20 6f 70 74 69 6f 6e 20 69  nfirm\" option i
12490 73 20 22 20 2b 0d 0a 20 20 20 20 20 20 20 20 20  s " +..         
124a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
124b0 20 20 20 22 6e 6f 74 20 65 6e 61 62 6c 65 64 2e     "not enabled.
124c0 22 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  ";....          
124d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
124e0 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
124f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12500 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
12510 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
12520 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20   true;..        
12530 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
12540 20 20 20 20 20 20 20 20 20 20 20 63 61 74 63 68             catch
12550 20 28 45 78 63 65 70 74 69 6f 6e 20 65 29 0d 0a   (Exception e)..
12560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12570 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
12580 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e         TraceOps.
12590 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20  Trace(..        
125a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
125b0 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 48 69  TracePriority.Hi
125c0 67 68 65 73 74 2c 20 74 72 61 63 65 43 61 6c 6c  ghest, traceCall
125d0 62 61 63 6b 2c 20 65 2c 0d 0a 20 20 20 20 20 20  back, e,..      
125e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
125f0 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
12600 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
12610 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
12620 20 22 46 61 69 6c 65 64 20 74 6f 20 70 72 6f 63   "Failed to proc
12630 65 73 73 20 63 6f 6e 66 69 67 75 72 61 74 69 6f  ess configuratio
12640 6e 2e 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  n.";..          
12650 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
12660 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
12670 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
12680 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
12690 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
126a0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
126b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
126c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
126d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
126e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
126f0 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
12700 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c 69 63    #region Public
12710 20 4d 65 74 68 6f 64 73 0d 0a 20 20 20 20 20 20   Methods..      
12720 20 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f        public boo
12730 6c 20 48 61 73 46 6c 61 67 73 28 0d 0a 20 20 20  l HasFlags(..   
12740 20 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 73               Ins
12750 74 61 6c 6c 46 6c 61 67 73 20 68 61 73 46 6c 61  tallFlags hasFla
12760 67 73 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  gs,..           
12770 20 20 20 20 20 62 6f 6f 6c 20 61 6c 6c 0d 0a 20       bool all.. 
12780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29                 )
12790 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
127a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
127b0 20 69 66 20 28 61 6c 6c 29 0d 0a 20 20 20 20 20   if (all)..     
127c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
127d0 65 74 75 72 6e 20 28 28 69 6e 73 74 61 6c 6c 46  eturn ((installF
127e0 6c 61 67 73 20 26 20 68 61 73 46 6c 61 67 73 29  lags & hasFlags)
127f0 20 3d 3d 20 68 61 73 46 6c 61 67 73 29 3b 0d 0a   == hasFlags);..
12800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12810 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20  else..          
12820 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
12830 20 28 28 69 6e 73 74 61 6c 6c 46 6c 61 67 73 20   ((installFlags 
12840 26 20 68 61 73 46 6c 61 67 73 29 20 21 3d 20 49  & hasFlags) != I
12850 6e 73 74 61 6c 6c 46 6c 61 67 73 2e 4e 6f 6e 65  nstallFlags.None
12860 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
12870 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
12880 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
12890 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
128a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
128b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
128c0 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
128d0 20 20 20 20 70 75 62 6c 69 63 20 76 6f 69 64 20      public void 
128e0 44 75 6d 70 28 29 0d 0a 20 20 20 20 20 20 20 20  Dump()..        
128f0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
12900 20 20 20 20 20 20 20 69 66 20 28 74 72 61 63 65         if (trace
12910 43 61 6c 6c 62 61 63 6b 20 21 3d 20 6e 75 6c 6c  Callback != null
12920 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
12930 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
12940 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
12950 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46  allback(String.F
12960 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c  ormat(NameAndVal
12970 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20  ueFormat,..     
12980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12990 20 20 20 22 41 73 73 65 6d 62 6c 79 22 2c 20 46     "Assembly", F
129a0 6f 72 44 69 73 70 6c 61 79 28 61 73 73 65 6d 62  orDisplay(assemb
129b0 6c 79 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  ly)),..         
129c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
129d0 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
129e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
129f0 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
12a00 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ack(String.Forma
12a10 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f  t(NameAndValueFo
12a20 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  rmat,..         
12a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
12a40 4c 6f 67 46 69 6c 65 4e 61 6d 65 22 2c 20 46 6f  LogFileName", Fo
12a50 72 44 69 73 70 6c 61 79 28 6c 6f 67 46 69 6c 65  rDisplay(logFile
12a60 4e 61 6d 65 29 29 2c 0d 0a 20 20 20 20 20 20 20  Name)),..       
12a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12a80 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
12a90 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
12aa0 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c          traceCal
12ab0 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72  lback(String.For
12ac0 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65  mat(NameAndValue
12ad0 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20  Format,..       
12ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12af0 20 22 44 69 72 65 63 74 6f 72 79 22 2c 20 46 6f   "Directory", Fo
12b00 72 44 69 73 70 6c 61 79 28 64 69 72 65 63 74 6f  rDisplay(directo
12b10 72 79 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  ry)),..         
12b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
12b30 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
12b40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
12b50 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
12b60 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ack(String.Forma
12b70 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f  t(NameAndValueFo
12b80 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  rmat,..         
12b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
12ba0 43 6f 72 65 46 69 6c 65 4e 61 6d 65 22 2c 20 46  CoreFileName", F
12bb0 6f 72 44 69 73 70 6c 61 79 28 63 6f 72 65 46 69  orDisplay(coreFi
12bc0 6c 65 4e 61 6d 65 29 29 2c 0d 0a 20 20 20 20 20  leName)),..     
12bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12be0 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
12bf0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
12c00 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
12c10 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46  allback(String.F
12c20 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c  ormat(NameAndVal
12c30 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20  ueFormat,..     
12c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12c50 20 20 20 22 4c 69 6e 71 46 69 6c 65 4e 61 6d 65     "LinqFileName
12c60 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 6c 69  ", ForDisplay(li
12c70 6e 71 46 69 6c 65 4e 61 6d 65 29 29 2c 0d 0a 20  nqFileName)),.. 
12c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12c90 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
12ca0 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
12cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
12cc0 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69  aceCallback(Stri
12cd0 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e  ng.Format(NameAn
12ce0 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20  dValueFormat,.. 
12cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12d00 20 20 20 20 20 20 20 22 44 65 73 69 67 6e 65 72         "Designer
12d10 46 69 6c 65 4e 61 6d 65 22 2c 20 46 6f 72 44 69  FileName", ForDi
12d20 73 70 6c 61 79 28 64 65 73 69 67 6e 65 72 46 69  splay(designerFi
12d30 6c 65 4e 61 6d 65 29 29 2c 0d 0a 20 20 20 20 20  leName)),..     
12d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12d50 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
12d60 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
12d70 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
12d80 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46  allback(String.F
12d90 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c  ormat(NameAndVal
12da0 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20  ueFormat,..     
12db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12dc0 20 20 20 22 54 72 61 63 65 46 6f 72 6d 61 74 22     "TraceFormat"
12dd0 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74 72 61  , ForDisplay(tra
12de0 63 65 46 6f 72 6d 61 74 29 29 2c 0d 0a 20 20 20  ceFormat)),..   
12df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12e00 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
12e10 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
12e20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
12e30 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67  eCallback(String
12e40 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56  .Format(NameAndV
12e50 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20  alueFormat,..   
12e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12e70 20 20 20 20 20 22 49 6e 73 74 61 6c 6c 46 6c 61       "InstallFla
12e80 67 73 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  gs", ForDisplay(
12e90 69 6e 73 74 61 6c 6c 46 6c 61 67 73 29 29 2c 0d  installFlags)),.
12ea0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
12eb0 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
12ec0 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
12ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12ee0 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74  traceCallback(St
12ef0 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65  ring.Format(Name
12f00 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d  AndValueFormat,.
12f10 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
12f20 20 20 20 20 20 20 20 20 20 22 54 72 61 63 65 50           "TraceP
12f30 72 69 6f 72 69 74 79 22 2c 20 46 6f 72 44 69 73  riority", ForDis
12f40 70 6c 61 79 28 74 72 61 63 65 50 72 69 6f 72 69  play(tracePriori
12f50 74 79 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  ty)),..         
12f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
12f70 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
12f80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
12f90 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
12fa0 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ack(String.Forma
12fb0 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f  t(NameAndValueFo
12fc0 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  rmat,..         
12fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
12fe0 49 6e 73 74 61 6c 6c 22 2c 20 46 6f 72 44 69 73  Install", ForDis
12ff0 70 6c 61 79 28 69 6e 73 74 61 6c 6c 29 29 2c 0d  play(install)),.
13000 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
13010 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
13020 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
13030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13040 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74  traceCallback(St
13050 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65  ring.Format(Name
13060 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d  AndValueFormat,.
13070 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
13080 20 20 20 20 20 20 20 20 20 22 4e 6f 44 65 73 6b           "NoDesk
13090 74 6f 70 22 2c 20 46 6f 72 44 69 73 70 6c 61 79  top", ForDisplay
130a0 28 6e 6f 44 65 73 6b 74 6f 70 29 29 2c 0d 0a 20  (noDesktop)),.. 
130b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
130c0 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
130d0 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
130e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
130f0 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69  aceCallback(Stri
13100 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e  ng.Format(NameAn
13110 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20  dValueFormat,.. 
13120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13130 20 20 20 20 20 20 20 22 4e 6f 43 6f 6d 70 61 63         "NoCompac
13140 74 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 6e  t", ForDisplay(n
13150 6f 43 6f 6d 70 61 63 74 29 29 2c 0d 0a 20 20 20  oCompact)),..   
13160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13170 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
13180 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
13190 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
131a0 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67  eCallback(String
131b0 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56  .Format(NameAndV
131c0 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20  alueFormat,..   
131d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
131e0 20 20 20 20 20 22 4e 6f 4e 65 74 46 78 32 30 22       "NoNetFx20"
131f0 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 6e 6f 4e  , ForDisplay(noN
13200 65 74 46 78 32 30 29 29 2c 0d 0a 20 20 20 20 20  etFx20)),..     
13210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13220 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
13230 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
13240 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
13250 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46  allback(String.F
13260 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c  ormat(NameAndVal
13270 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20  ueFormat,..     
13280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13290 20 20 20 22 4e 6f 4e 65 74 46 78 34 30 22 2c 20     "NoNetFx40", 
132a0 46 6f 72 44 69 73 70 6c 61 79 28 6e 6f 4e 65 74  ForDisplay(noNet
132b0 46 78 34 30 29 29 2c 0d 0a 20 20 20 20 20 20 20  Fx40)),..       
132c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
132d0 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
132e0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
132f0 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c          traceCal
13300 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72  lback(String.For
13310 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65  mat(NameAndValue
13320 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20  Format,..       
13330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13340 20 22 4e 6f 56 73 32 30 30 38 22 2c 20 46 6f 72   "NoVs2008", For
13350 44 69 73 70 6c 61 79 28 6e 6f 56 73 32 30 30 38  Display(noVs2008
13360 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
13370 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
13380 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
13390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
133a0 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63      traceCallbac
133b0 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  k(String.Format(
133c0 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d  NameAndValueForm
133d0 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at,..           
133e0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 4e 6f               "No
133f0 56 73 32 30 31 30 22 2c 20 46 6f 72 44 69 73 70  Vs2010", ForDisp
13400 6c 61 79 28 6e 6f 56 73 32 30 31 30 29 29 2c 0d  lay(noVs2010)),.
13410 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
13420 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
13430 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
13440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13450 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74  traceCallback(St
13460 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65  ring.Format(Name
13470 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d  AndValueFormat,.
13480 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
13490 20 20 20 20 20 20 20 20 20 22 4e 6f 54 72 61 63           "NoTrac
134a0 65 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 6e  e", ForDisplay(n
134b0 6f 54 72 61 63 65 29 29 2c 0d 0a 20 20 20 20 20  oTrace)),..     
134c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
134d0 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
134e0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
134f0 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
13500 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46  allback(String.F
13510 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c  ormat(NameAndVal
13520 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20  ueFormat,..     
13530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13540 20 20 20 22 4e 6f 43 6f 6e 73 6f 6c 65 22 2c 20     "NoConsole", 
13550 46 6f 72 44 69 73 70 6c 61 79 28 6e 6f 43 6f 6e  ForDisplay(noCon
13560 73 6f 6c 65 29 29 2c 0d 0a 20 20 20 20 20 20 20  sole)),..       
13570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13580 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
13590 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
135a0 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c          traceCal
135b0 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72  lback(String.For
135c0 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65  mat(NameAndValue
135d0 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20  Format,..       
135e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
135f0 20 22 4e 6f 4c 6f 67 22 2c 20 46 6f 72 44 69 73   "NoLog", ForDis
13600 70 6c 61 79 28 6e 6f 4c 6f 67 29 29 2c 0d 0a 20  play(noLog)),.. 
13610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13620 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
13630 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
13640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
13650 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69  aceCallback(Stri
13660 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e  ng.Format(NameAn
13670 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20  dValueFormat,.. 
13680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13690 20 20 20 20 20 20 20 22 57 68 61 74 49 66 22 2c         "WhatIf",
136a0 20 46 6f 72 44 69 73 70 6c 61 79 28 77 68 61 74   ForDisplay(what
136b0 49 66 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  If)),..         
136c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
136d0 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
136e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
136f0 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
13700 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ack(String.Forma
13710 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f  t(NameAndValueFo
13720 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  rmat,..         
13730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
13740 56 65 72 62 6f 73 65 22 2c 20 46 6f 72 44 69 73  Verbose", ForDis
13750 70 6c 61 79 28 76 65 72 62 6f 73 65 29 29 2c 0d  play(verbose)),.
13760 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
13770 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
13780 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
13790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
137a0 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74  traceCallback(St
137b0 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65  ring.Format(Name
137c0 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d  AndValueFormat,.
137d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
137e0 20 20 20 20 20 20 20 20 20 22 43 6f 6e 66 69 72           "Confir
137f0 6d 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 63  m", ForDisplay(c
13800 6f 6e 66 69 72 6d 29 29 2c 0d 0a 20 20 20 20 20  onfirm)),..     
13810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13820 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
13830 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
13840 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
13850 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
13860 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
13870 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
13880 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13890 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
138a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
138b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
138c0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  ...            #
138d0 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20 50 72  region Public Pr
138e0 6f 70 65 72 74 69 65 73 0d 0a 20 20 20 20 20 20  operties..      
138f0 20 20 20 20 20 20 70 72 69 76 61 74 65 20 41 73        private As
13900 73 65 6d 62 6c 79 20 61 73 73 65 6d 62 6c 79 3b  sembly assembly;
13910 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
13920 62 6c 69 63 20 41 73 73 65 6d 62 6c 79 20 41 73  blic Assembly As
13930 73 65 6d 62 6c 79 0d 0a 20 20 20 20 20 20 20 20  sembly..        
13940 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
13950 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74         get { ret
13960 75 72 6e 20 61 73 73 65 6d 62 6c 79 3b 20 7d 0d  urn assembly; }.
13970 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
13980 20 73 65 74 20 7b 20 61 73 73 65 6d 62 6c 79 20   set { assembly 
13990 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20  = value; }..    
139a0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
139b0 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
139c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
139d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
139e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
139f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
13a00 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
13a10 61 74 65 20 73 74 72 69 6e 67 20 6c 6f 67 46 69  ate string logFi
13a20 6c 65 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20  leName;..       
13a30 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 72 69       public stri
13a40 6e 67 20 4c 6f 67 46 69 6c 65 4e 61 6d 65 0d 0a  ng LogFileName..
13a50 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
13a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67                 g
13a70 65 74 20 7b 20 72 65 74 75 72 6e 20 6c 6f 67 46  et { return logF
13a80 69 6c 65 4e 61 6d 65 3b 20 7d 0d 0a 20 20 20 20  ileName; }..    
13a90 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
13aa0 7b 20 6c 6f 67 46 69 6c 65 4e 61 6d 65 20 3d 20  { logFileName = 
13ab0 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20  value; }..      
13ac0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
13ad0 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
13ae0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13af0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13b00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13b10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
13b20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
13b30 65 20 73 74 72 69 6e 67 20 64 69 72 65 63 74 6f  e string directo
13b40 72 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ry;..           
13b50 20 70 75 62 6c 69 63 20 73 74 72 69 6e 67 20 44   public string D
13b60 69 72 65 63 74 6f 72 79 0d 0a 20 20 20 20 20 20  irectory..      
13b70 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
13b80 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72           get { r
13b90 65 74 75 72 6e 20 64 69 72 65 63 74 6f 72 79 3b  eturn directory;
13ba0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
13bb0 20 20 20 20 73 65 74 20 7b 20 64 69 72 65 63 74      set { direct
13bc0 6f 72 79 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a  ory = value; }..
13bd0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
13be0 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
13bf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13c00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13c10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13c20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13c30 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
13c40 70 72 69 76 61 74 65 20 73 74 72 69 6e 67 20 63  private string c
13c50 6f 72 65 46 69 6c 65 4e 61 6d 65 3b 0d 0a 20 20  oreFileName;..  
13c60 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
13c70 20 73 74 72 69 6e 67 20 43 6f 72 65 46 69 6c 65   string CoreFile
13c80 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 20  Name..          
13c90 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
13ca0 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72       get { retur
13cb0 6e 20 63 6f 72 65 46 69 6c 65 4e 61 6d 65 3b 20  n coreFileName; 
13cc0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
13cd0 20 20 20 73 65 74 20 7b 20 63 6f 72 65 46 69 6c     set { coreFil
13ce0 65 4e 61 6d 65 20 3d 20 76 61 6c 75 65 3b 20 7d  eName = value; }
13cf0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
13d00 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
13d10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13d20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13d30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13d40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13d50 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
13d60 20 20 70 72 69 76 61 74 65 20 73 74 72 69 6e 67    private string
13d70 20 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 3b 0d 0a   linqFileName;..
13d80 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
13d90 69 63 20 73 74 72 69 6e 67 20 4c 69 6e 71 46 69  ic string LinqFi
13da0 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20  leName..        
13db0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
13dc0 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74         get { ret
13dd0 75 72 6e 20 6c 69 6e 71 46 69 6c 65 4e 61 6d 65  urn linqFileName
13de0 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
13df0 20 20 20 20 20 73 65 74 20 7b 20 6c 69 6e 71 46       set { linqF
13e00 69 6c 65 4e 61 6d 65 20 3d 20 76 61 6c 75 65 3b  ileName = value;
13e10 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
13e20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
13e30 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
13e40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13e50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13e60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13e70 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
13e80 20 20 20 20 70 72 69 76 61 74 65 20 73 74 72 69      private stri
13e90 6e 67 20 64 65 73 69 67 6e 65 72 46 69 6c 65 4e  ng designerFileN
13ea0 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ame;..          
13eb0 20 20 70 75 62 6c 69 63 20 73 74 72 69 6e 67 20    public string 
13ec0 44 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65  DesignerFileName
13ed0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
13ee0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
13ef0 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 64 65   get { return de
13f00 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 3b 20  signerFileName; 
13f10 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
13f20 20 20 20 73 65 74 20 7b 20 64 65 73 69 67 6e 65     set { designe
13f30 72 46 69 6c 65 4e 61 6d 65 20 3d 20 76 61 6c 75  rFileName = valu
13f40 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  e; }..          
13f50 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
13f60 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
13f70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13f80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13f90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13fa0 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
13fb0 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
13fc0 72 69 6e 67 20 74 72 61 63 65 46 6f 72 6d 61 74  ring traceFormat
13fd0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ;..            p
13fe0 75 62 6c 69 63 20 73 74 72 69 6e 67 20 54 72 61  ublic string Tra
13ff0 63 65 46 6f 72 6d 61 74 0d 0a 20 20 20 20 20 20  ceFormat..      
14000 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
14010 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72           get { r
14020 65 74 75 72 6e 20 74 72 61 63 65 46 6f 72 6d 61  eturn traceForma
14030 74 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  t; }..          
14040 20 20 20 20 20 20 73 65 74 20 7b 20 74 72 61 63        set { trac
14050 65 46 6f 72 6d 61 74 20 3d 20 76 61 6c 75 65 3b  eFormat = value;
14060 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
14070 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
14080 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
14090 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
140a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
140b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
140c0 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
140d0 20 20 20 20 70 72 69 76 61 74 65 20 49 6e 73 74      private Inst
140e0 61 6c 6c 46 6c 61 67 73 20 69 6e 73 74 61 6c 6c  allFlags install
140f0 46 6c 61 67 73 3b 0d 0a 20 20 20 20 20 20 20 20  Flags;..        
14100 20 20 20 20 70 75 62 6c 69 63 20 49 6e 73 74 61      public Insta
14110 6c 6c 46 6c 61 67 73 20 49 6e 73 74 61 6c 6c 46  llFlags InstallF
14120 6c 61 67 73 0d 0a 20 20 20 20 20 20 20 20 20 20  lags..          
14130 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
14140 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72       get { retur
14150 6e 20 69 6e 73 74 61 6c 6c 46 6c 61 67 73 3b 20  n installFlags; 
14160 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
14170 20 20 20 73 65 74 20 7b 20 69 6e 73 74 61 6c 6c     set { install
14180 46 6c 61 67 73 20 3d 20 76 61 6c 75 65 3b 20 7d  Flags = value; }
14190 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
141a0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
141b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
141c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
141d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
141e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
141f0 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
14200 20 20 70 72 69 76 61 74 65 20 54 72 61 63 65 50    private TraceP
14210 72 69 6f 72 69 74 79 20 74 72 61 63 65 50 72 69  riority tracePri
14220 6f 72 69 74 79 3b 0d 0a 20 20 20 20 20 20 20 20  ority;..        
14230 20 20 20 20 70 75 62 6c 69 63 20 54 72 61 63 65      public Trace
14240 50 72 69 6f 72 69 74 79 20 54 72 61 63 65 50 72  Priority TracePr
14250 69 6f 72 69 74 79 0d 0a 20 20 20 20 20 20 20 20  iority..        
14260 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
14270 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74         get { ret
14280 75 72 6e 20 74 72 61 63 65 50 72 69 6f 72 69 74  urn tracePriorit
14290 79 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  y; }..          
142a0 20 20 20 20 20 20 73 65 74 20 7b 20 74 72 61 63        set { trac
142b0 65 50 72 69 6f 72 69 74 79 20 3d 20 76 61 6c 75  ePriority = valu
142c0 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  e; }..          
142d0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
142e0 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
142f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14300 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14310 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14320 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
14330 20 20 20 20 20 20 70 72 69 76 61 74 65 20 62 6f        private bo
14340 6f 6c 20 69 6e 73 74 61 6c 6c 3b 0d 0a 20 20 20  ol install;..   
14350 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
14360 62 6f 6f 6c 20 49 6e 73 74 61 6c 6c 0d 0a 20 20  bool Install..  
14370 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
14380 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74               get
14390 20 7b 20 72 65 74 75 72 6e 20 69 6e 73 74 61 6c   { return instal
143a0 6c 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  l; }..          
143b0 20 20 20 20 20 20 73 65 74 20 7b 20 69 6e 73 74        set { inst
143c0 61 6c 6c 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a  all = value; }..
143d0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
143e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
143f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14400 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14410 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14420 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14430 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
14440 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 6e 6f 44  private bool noD
14450 65 73 6b 74 6f 70 3b 0d 0a 20 20 20 20 20 20 20  esktop;..       
14460 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c       public bool
14470 20 4e 6f 44 65 73 6b 74 6f 70 0d 0a 20 20 20 20   NoDesktop..    
14480 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
14490 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b             get {
144a0 20 72 65 74 75 72 6e 20 6e 6f 44 65 73 6b 74 6f   return noDeskto
144b0 70 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  p; }..          
144c0 20 20 20 20 20 20 73 65 74 20 7b 20 6e 6f 44 65        set { noDe
144d0 73 6b 74 6f 70 20 3d 20 76 61 6c 75 65 3b 20 7d  sktop = value; }
144e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
144f0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
14500 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14510 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14520 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14530 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14540 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
14550 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 6e    private bool n
14560 6f 43 6f 6d 70 61 63 74 3b 0d 0a 20 20 20 20 20  oCompact;..     
14570 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f         public bo
14580 6f 6c 20 4e 6f 43 6f 6d 70 61 63 74 0d 0a 20 20  ol NoCompact..  
14590 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
145a0 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74               get
145b0 20 7b 20 72 65 74 75 72 6e 20 6e 6f 43 6f 6d 70   { return noComp
145c0 61 63 74 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  act; }..        
145d0 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 6e 6f          set { no
145e0 43 6f 6d 70 61 63 74 20 3d 20 76 61 6c 75 65 3b  Compact = value;
145f0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
14600 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
14610 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
14620 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14630 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14640 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14650 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
14660 20 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c      private bool
14670 20 6e 6f 4e 65 74 46 78 32 30 3b 0d 0a 20 20 20   noNetFx20;..   
14680 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
14690 62 6f 6f 6c 20 4e 6f 4e 65 74 46 78 32 30 0d 0a  bool NoNetFx20..
146a0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
146b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67                 g
146c0 65 74 20 7b 20 72 65 74 75 72 6e 20 6e 6f 4e 65  et { return noNe
146d0 74 46 78 32 30 3b 20 7d 0d 0a 20 20 20 20 20 20  tFx20; }..      
146e0 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20            set { 
146f0 6e 6f 4e 65 74 46 78 32 30 20 3d 20 76 61 6c 75  noNetFx20 = valu
14700 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  e; }..          
14710 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
14720 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
14730 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14740 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14750 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14760 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
14770 20 20 20 20 20 20 70 72 69 76 61 74 65 20 62 6f        private bo
14780 6f 6c 20 6e 6f 4e 65 74 46 78 34 30 3b 0d 0a 20  ol noNetFx40;.. 
14790 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
147a0 63 20 62 6f 6f 6c 20 4e 6f 4e 65 74 46 78 34 30  c bool NoNetFx40
147b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
147c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
147d0 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 6e 6f   get { return no
147e0 4e 65 74 46 78 34 30 3b 20 7d 0d 0a 20 20 20 20  NetFx40; }..    
147f0 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
14800 7b 20 6e 6f 4e 65 74 46 78 34 30 20 3d 20 76 61  { noNetFx40 = va
14810 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  lue; }..        
14820 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
14830 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
14840 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14850 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14860 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14870 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
14880 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
14890 62 6f 6f 6c 20 6e 6f 56 73 32 30 30 38 3b 0d 0a  bool noVs2008;..
148a0 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
148b0 69 63 20 62 6f 6f 6c 20 4e 6f 56 73 32 30 30 38  ic bool NoVs2008
148c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
148d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
148e0 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 6e 6f   get { return no
148f0 56 73 32 30 30 38 3b 20 7d 0d 0a 20 20 20 20 20  Vs2008; }..     
14900 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b             set {
14910 20 6e 6f 56 73 32 30 30 38 20 3d 20 76 61 6c 75   noVs2008 = valu
14920 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  e; }..          
14930 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
14940 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
14950 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14960 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14970 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14980 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
14990 20 20 20 20 20 20 70 72 69 76 61 74 65 20 62 6f        private bo
149a0 6f 6c 20 6e 6f 56 73 32 30 31 30 3b 0d 0a 20 20  ol noVs2010;..  
149b0 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
149c0 20 62 6f 6f 6c 20 4e 6f 56 73 32 30 31 30 0d 0a   bool NoVs2010..
149d0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
149e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67                 g
149f0 65 74 20 7b 20 72 65 74 75 72 6e 20 6e 6f 56 73  et { return noVs
14a00 32 30 31 30 3b 20 7d 0d 0a 20 20 20 20 20 20 20  2010; }..       
14a10 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 6e           set { n
14a20 6f 56 73 32 30 31 30 20 3d 20 76 61 6c 75 65 3b  oVs2010 = value;
14a30 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
14a40 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
14a50 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
14a60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14a70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14a80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14a90 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
14aa0 20 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c      private bool
14ab0 20 6e 6f 54 72 61 63 65 3b 0d 0a 20 20 20 20 20   noTrace;..     
14ac0 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f         public bo
14ad0 6f 6c 20 4e 6f 54 72 61 63 65 0d 0a 20 20 20 20  ol NoTrace..    
14ae0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
14af0 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b             get {
14b00 20 72 65 74 75 72 6e 20 6e 6f 54 72 61 63 65 3b   return noTrace;
14b10 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
14b20 20 20 20 20 73 65 74 20 7b 20 6e 6f 54 72 61 63      set { noTrac
14b30 65 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20  e = value; }..  
14b40 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
14b50 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
14b60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14b70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14b80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14b90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
14ba0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
14bb0 69 76 61 74 65 20 62 6f 6f 6c 20 6e 6f 43 6f 6e  ivate bool noCon
14bc0 73 6f 6c 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  sole;..         
14bd0 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 4e     public bool N
14be0 6f 43 6f 6e 73 6f 6c 65 0d 0a 20 20 20 20 20 20  oConsole..      
14bf0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
14c00 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72           get { r
14c10 65 74 75 72 6e 20 6e 6f 43 6f 6e 73 6f 6c 65 3b  eturn noConsole;
14c20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
14c30 20 20 20 20 73 65 74 20 7b 20 6e 6f 43 6f 6e 73      set { noCons
14c40 6f 6c 65 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a  ole = value; }..
14c50 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
14c60 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
14c70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14c80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14c90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14ca0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14cb0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
14cc0 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 6e 6f 4c  private bool noL
14cd0 6f 67 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  og;..           
14ce0 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 4e 6f 4c   public bool NoL
14cf0 6f 67 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  og..            
14d00 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
14d10 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20     get { return 
14d20 6e 6f 4c 6f 67 3b 20 7d 0d 0a 20 20 20 20 20 20  noLog; }..      
14d30 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20            set { 
14d40 6e 6f 4c 6f 67 20 3d 20 76 61 6c 75 65 3b 20 7d  noLog = value; }
14d50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
14d60 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
14d70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14d80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14d90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14da0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14db0 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
14dc0 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 77    private bool w
14dd0 68 61 74 49 66 3b 0d 0a 20 20 20 20 20 20 20 20  hatIf;..        
14de0 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20      public bool 
14df0 57 68 61 74 49 66 0d 0a 20 20 20 20 20 20 20 20  WhatIf..        
14e00 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
14e10 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74         get { ret
14e20 75 72 6e 20 77 68 61 74 49 66 3b 20 7d 0d 0a 20  urn whatIf; }.. 
14e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
14e40 65 74 20 7b 20 77 68 61 74 49 66 20 3d 20 76 61  et { whatIf = va
14e50 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  lue; }..        
14e60 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
14e70 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
14e80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14e90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14ea0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14eb0 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
14ec0 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
14ed0 62 6f 6f 6c 20 76 65 72 62 6f 73 65 3b 0d 0a 20  bool verbose;.. 
14ee0 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
14ef0 63 20 62 6f 6f 6c 20 56 65 72 62 6f 73 65 0d 0a  c bool Verbose..
14f00 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
14f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67                 g
14f20 65 74 20 7b 20 72 65 74 75 72 6e 20 76 65 72 62  et { return verb
14f30 6f 73 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  ose; }..        
14f40 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 76 65          set { ve
14f50 72 62 6f 73 65 20 3d 20 76 61 6c 75 65 3b 20 7d  rbose = value; }
14f60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
14f70 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
14f80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14f90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14fa0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14fb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14fc0 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
14fd0 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 63    private bool c
14fe0 6f 6e 66 69 72 6d 3b 0d 0a 20 20 20 20 20 20 20  onfirm;..       
14ff0 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c       public bool
15000 20 43 6f 6e 66 69 72 6d 0d 0a 20 20 20 20 20 20   Confirm..      
15010 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
15020 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72           get { r
15030 65 74 75 72 6e 20 63 6f 6e 66 69 72 6d 3b 20 7d  eturn confirm; }
15040 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
15050 20 20 73 65 74 20 7b 20 63 6f 6e 66 69 72 6d 20    set { confirm 
15060 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20  = value; }..    
15070 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
15080 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
15090 6e 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  n..        }..  
150a0 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
150b0 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65  ..        #endre
150c0 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
150d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
150e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
150f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15100 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15110 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
15120 20 20 20 23 72 65 67 69 6f 6e 20 50 72 69 76 61     #region Priva
15130 74 65 20 43 6f 6e 73 74 61 6e 74 20 44 61 74 61  te Constant Data
15140 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
15150 65 20 63 6f 6e 73 74 20 73 74 72 69 6e 67 20 43  e const string C
15160 6f 72 65 46 69 6c 65 4e 61 6d 65 20 3d 20 22 53  oreFileName = "S
15170 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
15180 65 2e 64 6c 6c 22 3b 0d 0a 20 20 20 20 20 20 20  e.dll";..       
15190 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20 73   private const s
151a0 74 72 69 6e 67 20 4c 69 6e 71 46 69 6c 65 4e 61  tring LinqFileNa
151b0 6d 65 20 3d 20 22 53 79 73 74 65 6d 2e 44 61 74  me = "System.Dat
151c0 61 2e 53 51 4c 69 74 65 2e 4c 69 6e 71 2e 64 6c  a.SQLite.Linq.dl
151d0 6c 22 3b 0d 0a 20 20 20 20 20 20 20 20 70 72 69  l";..        pri
151e0 76 61 74 65 20 63 6f 6e 73 74 20 73 74 72 69 6e  vate const strin
151f0 67 20 44 65 73 69 67 6e 65 72 46 69 6c 65 4e 61  g DesignerFileNa
15200 6d 65 20 3d 20 22 53 51 4c 69 74 65 2e 44 65 73  me = "SQLite.Des
15210 69 67 6e 65 72 2e 64 6c 6c 22 3b 0d 0a 20 20 20  igner.dll";..   
15220 20 20 20 20 20 70 72 69 76 61 74 65 20 63 6f 6e       private con
15230 73 74 20 73 74 72 69 6e 67 20 50 72 6f 76 69 64  st string Provid
15240 65 72 4e 61 6d 65 20 3d 20 22 53 51 4c 69 74 65  erName = "SQLite
15250 20 44 61 74 61 20 50 72 6f 76 69 64 65 72 22 3b   Data Provider";
15260 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
15270 65 20 63 6f 6e 73 74 20 73 74 72 69 6e 67 20 50  e const string P
15280 72 6f 6a 65 63 74 4e 61 6d 65 20 3d 20 22 53 79  rojectName = "Sy
15290 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65  stem.Data.SQLite
152a0 22 3b 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  ";..        priv
152b0 61 74 65 20 63 6f 6e 73 74 20 73 74 72 69 6e 67  ate const string
152c0 20 4c 65 67 61 63 79 50 72 6f 6a 65 63 74 4e 61   LegacyProjectNa
152d0 6d 65 20 3d 20 22 53 51 4c 69 74 65 22 3b 0d 0a  me = "SQLite";..
152e0 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
152f0 63 6f 6e 73 74 20 73 74 72 69 6e 67 20 49 6e 76  const string Inv
15300 61 72 69 61 6e 74 4e 61 6d 65 20 3d 20 22 53 79  ariantName = "Sy
15310 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65  stem.Data.SQLite
15320 22 3b 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  ";..        priv
15330 61 74 65 20 63 6f 6e 73 74 20 73 74 72 69 6e 67  ate const string
15340 20 46 61 63 74 6f 72 79 54 79 70 65 4e 61 6d 65   FactoryTypeName
15350 20 3d 20 22 53 79 73 74 65 6d 2e 44 61 74 61 2e   = "System.Data.
15360 53 51 4c 69 74 65 2e 53 51 4c 69 74 65 46 61 63  SQLite.SQLiteFac
15370 74 6f 72 79 22 3b 0d 0a 20 20 20 20 20 20 20 20  tory";..        
15380 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20 73 74  private const st
15390 72 69 6e 67 20 44 65 73 63 72 69 70 74 69 6f 6e  ring Description
153a0 20 3d 20 22 2e 4e 45 54 20 46 72 61 6d 65 77 6f   = ".NET Framewo
153b0 72 6b 20 44 61 74 61 20 50 72 6f 76 69 64 65 72  rk Data Provider
153c0 20 66 6f 72 20 53 51 4c 69 74 65 22 3b 0d 0a 0d   for SQLite";...
153d0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
153e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
153f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15400 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15410 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15420 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  ....        priv
15430 61 74 65 20 63 6f 6e 73 74 20 73 74 72 69 6e 67  ate const string
15440 20 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72   NameAndValueFor
15450 6d 61 74 20 3d 20 22 7b 30 7d 3a 20 7b 31 7d 22  mat = "{0}: {1}"
15460 3b 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  ;..        priva
15470 74 65 20 63 6f 6e 73 74 20 73 74 72 69 6e 67 20  te const string 
15480 4c 6f 67 46 69 6c 65 53 75 66 66 69 78 20 3d 20  LogFileSuffix = 
15490 22 2e 6c 6f 67 22 3b 0d 0a 0d 0a 20 20 20 20 20  ".log";....     
154a0 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
154b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
154c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
154d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
154e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
154f0 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
15500 61 74 69 63 20 72 65 61 64 6f 6e 6c 79 20 73 74  atic readonly st
15510 72 69 6e 67 20 56 73 49 64 46 6f 72 6d 61 74 20  ring VsIdFormat 
15520 3d 20 22 42 22 3b 0d 0a 0d 0a 20 20 20 20 20 20  = "B";....      
15530 20 20 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 2f 2f 2f  ////////////////
15550 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15560 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15570 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
15580 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61       private sta
15590 74 69 63 20 72 65 61 64 6f 6e 6c 79 20 73 74 72  tic readonly str
155a0 69 6e 67 20 46 72 61 6d 65 77 6f 72 6b 4b 65 79  ing FrameworkKey
155b0 4e 61 6d 65 20 3d 0d 0a 20 20 20 20 20 20 20 20  Name =..        
155c0 20 20 20 20 22 53 6f 66 74 77 61 72 65 5c 5c 4d      "Software\\M
155d0 69 63 72 6f 73 6f 66 74 5c 5c 2e 4e 45 54 46 72  icrosoft\\.NETFr
155e0 61 6d 65 77 6f 72 6b 22 3b 0d 0a 0d 0a 20 20 20  amework";....   
155f0 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
15600 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15610 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15620 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15630 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
15640 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
15650 73 74 61 74 69 63 20 72 65 61 64 6f 6e 6c 79 20  static readonly 
15660 73 74 72 69 6e 67 20 46 72 61 6d 65 77 6f 72 6b  string Framework
15670 53 64 6b 4b 65 79 4e 61 6d 65 20 3d 0d 0a 20 20  SdkKeyName =..  
15680 20 20 20 20 20 20 20 20 20 20 22 53 6f 66 74 77            "Softw
15690 61 72 65 5c 5c 4d 69 63 72 6f 73 6f 66 74 5c 5c  are\\Microsoft\\
156a0 4d 69 63 72 6f 73 6f 66 74 20 53 44 4b 73 5c 5c  Microsoft SDKs\\
156b0 2e 4e 45 54 46 72 61 6d 65 77 6f 72 6b 22 3b 0d  .NETFramework";.
156c0 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
156d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
156e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
156f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15700 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15710 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72  //....        pr
15720 69 76 61 74 65 20 73 74 61 74 69 63 20 72 65 61  ivate static rea
15730 64 6f 6e 6c 79 20 73 74 72 69 6e 67 20 57 69 6e  donly string Win
15740 64 6f 77 73 53 64 6b 4b 65 79 4e 61 6d 65 20 3d  dowsSdkKeyName =
15750 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 53  ..            "S
15760 6f 66 74 77 61 72 65 5c 5c 4d 69 63 72 6f 73 6f  oftware\\Microso
15770 66 74 5c 5c 4d 69 63 72 6f 73 6f 66 74 20 53 44  ft\\Microsoft SD
15780 4b 73 5c 5c 57 69 6e 64 6f 77 73 22 3b 0d 0a 0d  Ks\\Windows";...
15790 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
157a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
157b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
157c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
157d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
157e0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  ....        priv
157f0 61 74 65 20 73 74 61 74 69 63 20 72 65 61 64 6f  ate static reado
15800 6e 6c 79 20 73 74 72 69 6e 67 20 58 50 61 74 68  nly string XPath
15810 46 6f 72 41 64 64 45 6c 65 6d 65 6e 74 20 3d 0d  ForAddElement =.
15820 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 63 6f  .            "co
15830 6e 66 69 67 75 72 61 74 69 6f 6e 2f 73 79 73 74  nfiguration/syst
15840 65 6d 2e 64 61 74 61 2f 44 62 50 72 6f 76 69 64  em.data/DbProvid
15850 65 72 46 61 63 74 6f 72 69 65 73 2f 61 64 64 5b  erFactories/add[
15860 40 69 6e 76 61 72 69 61 6e 74 3d 5c 22 7b 30 7d  @invariant=\"{0}
15870 5c 22 5d 22 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  \"]";....       
15880 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
15890 72 65 61 64 6f 6e 6c 79 20 73 74 72 69 6e 67 20  readonly string 
158a0 58 50 61 74 68 46 6f 72 52 65 6d 6f 76 65 45 6c  XPathForRemoveEl
158b0 65 6d 65 6e 74 20 3d 0d 0a 20 20 20 20 20 20 20  ement =..       
158c0 20 20 20 20 20 22 63 6f 6e 66 69 67 75 72 61 74       "configurat
158d0 69 6f 6e 2f 73 79 73 74 65 6d 2e 64 61 74 61 2f  ion/system.data/
158e0 44 62 50 72 6f 76 69 64 65 72 46 61 63 74 6f 72  DbProviderFactor
158f0 69 65 73 2f 72 65 6d 6f 76 65 5b 40 69 6e 76 61  ies/remove[@inva
15900 72 69 61 6e 74 3d 5c 22 7b 30 7d 5c 22 5d 22 3b  riant=\"{0}\"]";
15910 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65  ..        #endre
15920 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
15930 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15940 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15950 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15960 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15970 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
15980 20 20 20 23 72 65 67 69 6f 6e 20 50 72 69 76 61     #region Priva
15990 74 65 20 44 61 74 61 0d 0a 20 20 20 20 20 20 20  te Data..       
159a0 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
159b0 41 73 73 65 6d 62 6c 79 20 74 68 69 73 41 73 73  Assembly thisAss
159c0 65 6d 62 6c 79 20 3d 20 41 73 73 65 6d 62 6c 79  embly = Assembly
159d0 2e 47 65 74 45 78 65 63 75 74 69 6e 67 41 73 73  .GetExecutingAss
159e0 65 6d 62 6c 79 28 29 3b 0d 0a 0d 0a 20 20 20 20  embly();....    
159f0 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74      private stat
15a00 69 63 20 73 74 72 69 6e 67 20 74 72 61 63 65 43  ic string traceC
15a10 61 74 65 67 6f 72 79 20 3d 20 50 61 74 68 2e 47  ategory = Path.G
15a20 65 74 46 69 6c 65 4e 61 6d 65 28 0d 0a 20 20 20  etFileName(..   
15a30 20 20 20 20 20 20 20 20 20 74 68 69 73 41 73 73           thisAss
15a40 65 6d 62 6c 79 2e 4c 6f 63 61 74 69 6f 6e 29 3b  embly.Location);
15a50 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  ....        priv
15a60 61 74 65 20 73 74 61 74 69 63 20 54 72 61 63 65  ate static Trace
15a70 43 61 6c 6c 62 61 63 6b 20 74 72 61 63 65 43 61  Callback traceCa
15a80 6c 6c 62 61 63 6b 20 3d 20 41 70 70 54 72 61 63  llback = AppTrac
15a90 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  e;....        //
15aa0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15ab0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15ac0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15ad0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15ae0 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
15af0 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
15b00 52 65 67 69 73 74 72 79 4b 65 79 20 66 72 61 6d  RegistryKey fram
15b10 65 77 6f 72 6b 52 6f 6f 74 4b 65 79 3b 0d 0a 20  eworkRootKey;.. 
15b20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
15b30 74 61 74 69 63 20 53 74 72 69 6e 67 4c 69 73 74  tatic StringList
15b40 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 4c 69   frameworkNameLi
15b50 73 74 3b 0d 0a 20 20 20 20 20 20 20 20 70 72 69  st;..        pri
15b60 76 61 74 65 20 73 74 61 74 69 63 20 56 65 72 73  vate static Vers
15b70 69 6f 6e 4d 61 70 20 66 72 61 6d 65 77 6f 72 6b  ionMap framework
15b80 56 65 72 73 69 6f 6e 4d 61 70 3b 0d 0a 20 20 20  VersionMap;..   
15b90 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61       private sta
15ba0 74 69 63 20 53 74 72 69 6e 67 4c 69 73 74 20 70  tic StringList p
15bb0 6c 61 74 66 6f 72 6d 4e 61 6d 65 4c 69 73 74 3b  latformNameList;
15bc0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
15bd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15be0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15bf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15c00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15c10 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70  ///....        p
15c20 72 69 76 61 74 65 20 73 74 61 74 69 63 20 52 65  rivate static Re
15c30 67 69 73 74 72 79 4b 65 79 20 76 73 52 6f 6f 74  gistryKey vsRoot
15c40 4b 65 79 3b 0d 0a 20 20 20 20 20 20 20 20 70 72  Key;..        pr
15c50 69 76 61 74 65 20 73 74 61 74 69 63 20 56 65 72  ivate static Ver
15c60 73 69 6f 6e 4c 69 73 74 20 76 73 56 65 72 73 69  sionList vsVersi
15c70 6f 6e 4c 69 73 74 3b 0d 0a 20 20 20 20 20 20 20  onList;..       
15c80 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
15c90 47 75 69 64 3f 20 76 73 50 61 63 6b 61 67 65 49  Guid? vsPackageI
15ca0 64 3b 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  d;..        priv
15cb0 61 74 65 20 73 74 61 74 69 63 20 47 75 69 64 3f  ate static Guid?
15cc0 20 76 73 53 65 72 76 69 63 65 49 64 3b 0d 0a 20   vsServiceId;.. 
15cd0 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
15ce0 74 61 74 69 63 20 47 75 69 64 3f 20 76 73 44 61  tatic Guid? vsDa
15cf0 74 61 53 6f 75 72 63 65 73 49 64 3b 0d 0a 20 20  taSourcesId;..  
15d00 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
15d10 61 74 69 63 20 47 75 69 64 3f 20 76 73 44 61 74  atic Guid? vsDat
15d20 61 50 72 6f 76 69 64 65 72 49 64 3b 0d 0a 20 20  aProviderId;..  
15d30 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
15d40 61 74 69 63 20 47 75 69 64 3f 20 76 73 41 64 6f  atic Guid? vsAdo
15d50 4e 65 74 54 65 63 68 6e 6f 6c 6f 67 79 49 64 3b  NetTechnologyId;
15d60 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65  ..        #endre
15d70 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
15d80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15d90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15da0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15db0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15dc0 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
15dd0 20 20 20 23 72 65 67 69 6f 6e 20 54 72 61 63 65     #region Trace
15de0 20 48 61 6e 64 6c 69 6e 67 0d 0a 20 20 20 20 20   Handling..     
15df0 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
15e00 63 20 73 74 72 69 6e 67 20 47 65 74 4c 6f 67 46  c string GetLogF
15e10 69 6c 65 4e 61 6d 65 28 29 0d 0a 20 20 20 20 20  ileName()..     
15e20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
15e30 20 20 73 74 72 69 6e 67 20 72 65 73 75 6c 74 20    string result 
15e40 3d 20 50 61 74 68 2e 47 65 74 54 65 6d 70 46 69  = Path.GetTempFi
15e50 6c 65 4e 61 6d 65 28 29 3b 20 2f 2a 20 74 68 72  leName(); /* thr
15e60 6f 77 20 2a 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  ow */....       
15e70 20 20 20 20 20 46 69 6c 65 2e 4d 6f 76 65 28 72       File.Move(r
15e80 65 73 75 6c 74 2c 20 72 65 73 75 6c 74 20 2b 20  esult, result + 
15e90 4c 6f 67 46 69 6c 65 53 75 66 66 69 78 29 3b 20  LogFileSuffix); 
15ea0 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20  /* throw */..   
15eb0 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 20           result 
15ec0 2b 3d 20 4c 6f 67 46 69 6c 65 53 75 66 66 69 78  += LogFileSuffix
15ed0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
15ee0 20 72 65 74 75 72 6e 20 72 65 73 75 6c 74 3b 0d   return result;.
15ef0 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
15f00 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
15f10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15f20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15f30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15f40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
15f50 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
15f60 20 73 74 61 74 69 63 20 76 6f 69 64 20 41 70 70   static void App
15f70 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20  Trace(..        
15f80 20 20 20 20 73 74 72 69 6e 67 20 6d 65 73 73 61      string messa
15f90 67 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ge,..           
15fa0 20 73 74 72 69 6e 67 20 63 61 74 65 67 6f 72 79   string category
15fb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d  ..            ).
15fc0 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
15fd0 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73          TraceOps
15fe0 2e 54 72 61 63 65 43 6f 72 65 28 53 74 72 69 6e  .TraceCore(Strin
15ff0 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
16000 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
16010 4f 70 73 2e 54 72 61 63 65 46 6f 72 6d 61 74 2c  Ops.TraceFormat,
16020 20 54 72 61 63 65 4f 70 73 2e 4e 65 78 74 49 64   TraceOps.NextId
16030 28 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  (),..           
16040 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 54 69       TraceOps.Ti
16050 6d 65 53 74 61 6d 70 28 44 61 74 65 54 69 6d 65  meStamp(DateTime
16060 2e 55 74 63 4e 6f 77 29 2c 20 6d 65 73 73 61 67  .UtcNow), messag
16070 65 29 2c 20 63 61 74 65 67 6f 72 79 29 3b 0d 0a  e), category);..
16080 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
16090 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
160a0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
160b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
160c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
160d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
160e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
160f0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67  ....        #reg
16100 69 6f 6e 20 47 65 6e 65 72 69 63 20 53 74 72 69  ion Generic Stri
16110 6e 67 20 48 61 6e 64 6c 69 6e 67 0d 0a 20 20 20  ng Handling..   
16120 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61       private sta
16130 74 69 63 20 73 74 72 69 6e 67 20 46 6f 72 44 69  tic string ForDi
16140 73 70 6c 61 79 28 0d 0a 20 20 20 20 20 20 20 20  splay(..        
16150 20 20 20 20 6f 62 6a 65 63 74 20 76 61 6c 75 65      object value
16160 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d  ..            ).
16170 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
16180 20 20 20 20 20 20 20 20 69 66 20 28 76 61 6c 75          if (valu
16190 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  e == null)..    
161a0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
161b0 72 6e 20 22 3c 6e 75 6c 6c 3e 22 3b 0d 0a 0d 0a  rn "<null>";....
161c0 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
161d0 6e 67 20 72 65 73 75 6c 74 3b 0d 0a 20 20 20 20  ng result;..    
161e0 20 20 20 20 20 20 20 20 54 79 70 65 20 74 79 70          Type typ
161f0 65 20 3d 20 76 61 6c 75 65 2e 47 65 74 54 79 70  e = value.GetTyp
16200 65 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  e();....        
16210 20 20 20 20 69 66 20 28 74 79 70 65 20 3d 3d 20      if (type == 
16220 74 79 70 65 6f 66 28 58 6d 6c 45 6c 65 6d 65 6e  typeof(XmlElemen
16230 74 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  t))..           
16240 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
16250 20 20 20 20 58 6d 6c 45 6c 65 6d 65 6e 74 20 65      XmlElement e
16260 6c 65 6d 65 6e 74 20 3d 20 28 58 6d 6c 45 6c 65  lement = (XmlEle
16270 6d 65 6e 74 29 76 61 6c 75 65 3b 0d 0a 0d 0a 20  ment)value;.... 
16280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
16290 65 73 75 6c 74 20 3d 20 65 6c 65 6d 65 6e 74 2e  esult = element.
162a0 4f 75 74 65 72 58 6d 6c 3b 0d 0a 20 20 20 20 20  OuterXml;..     
162b0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
162c0 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20        else..    
162d0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
162e0 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75 6c             resul
162f0 74 20 3d 20 76 61 6c 75 65 2e 54 6f 53 74 72 69  t = value.ToStri
16300 6e 67 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ng();....       
16310 20 20 20 20 20 20 20 20 20 69 66 20 28 72 65 73           if (res
16320 75 6c 74 2e 4c 65 6e 67 74 68 20 3d 3d 20 30 29  ult.Length == 0)
16330 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
16340 20 20 20 20 20 20 72 65 74 75 72 6e 20 22 3c 65        return "<e
16350 6d 70 74 79 3e 22 3b 0d 0a 0d 0a 20 20 20 20 20  mpty>";....     
16360 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75 6c             resul
16370 74 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  t = String.Forma
16380 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
16390 20 20 20 20 20 20 20 20 74 79 70 65 2e 49 73 53          type.IsS
163a0 75 62 63 6c 61 73 73 4f 66 28 74 79 70 65 6f 66  ubclassOf(typeof
163b0 28 56 61 6c 75 65 54 79 70 65 29 29 20 3f 20 22  (ValueType)) ? "
163c0 7b 30 7d 22 20 3a 20 22 5c 22 7b 30 7d 5c 22 22  {0}" : "\"{0}\""
163d0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
163e0 20 20 20 20 20 20 20 72 65 73 75 6c 74 29 3b 0d         result);.
163f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
16400 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
16410 74 75 72 6e 20 72 65 73 75 6c 74 3b 0d 0a 20 20  turn result;..  
16420 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
16430 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
16440 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
16450 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16460 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16470 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16480 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
16490 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f  ..        #regio
164a0 6e 20 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b  n .NET Framework
164b0 20 48 61 6e 64 6c 69 6e 67 0d 0a 20 20 20 20 20   Handling..     
164c0 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
164d0 63 20 73 74 72 69 6e 67 20 47 65 74 46 72 61 6d  c string GetFram
164e0 65 77 6f 72 6b 44 69 72 65 63 74 6f 72 79 28 0d  eworkDirectory(.
164f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67  .            Reg
16500 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79  istryKey rootKey
16510 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 56  ,..            V
16520 65 72 73 69 6f 6e 20 66 72 61 6d 65 77 6f 72 6b  ersion framework
16530 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20  Version,..      
16540 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49        bool whatI
16550 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f,..            
16560 62 6f 6f 6c 20 76 65 72 62 6f 73 65 0d 0a 20 20  bool verbose..  
16570 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
16580 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
16590 20 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52      using (MockR
165a0 65 67 69 73 74 72 79 4b 65 79 20 6b 65 79 20 3d  egistryKey key =
165b0 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e   RegistryHelper.
165c0 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20  OpenSubKey(..   
165d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
165e0 20 72 6f 6f 74 4b 65 79 2c 20 46 72 61 6d 65 77   rootKey, Framew
165f0 6f 72 6b 4b 65 79 4e 61 6d 65 2c 20 66 61 6c 73  orkKeyName, fals
16600 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f  e, whatIf, verbo
16610 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  se))..          
16620 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
16630 20 20 20 20 20 69 66 20 28 6b 65 79 20 3d 3d 20       if (key == 
16640 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
16650 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
16660 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20  n null;....     
16670 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63             objec
16680 74 20 76 61 6c 75 65 20 3d 20 52 65 67 69 73 74  t value = Regist
16690 72 79 48 65 6c 70 65 72 2e 47 65 74 56 61 6c 75  ryHelper.GetValu
166a0 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
166b0 20 20 20 20 20 20 20 20 6b 65 79 2c 20 22 49 6e          key, "In
166c0 73 74 61 6c 6c 52 6f 6f 74 22 2c 20 6e 75 6c 6c  stallRoot", null
166d0 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73  , whatIf, verbos
166e0 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
166f0 20 20 20 20 20 20 20 69 66 20 28 21 28 76 61 6c         if (!(val
16700 75 65 20 69 73 20 73 74 72 69 6e 67 29 29 0d 0a  ue is string))..
16710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16720 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b      return null;
16730 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
16740 20 20 20 20 72 65 74 75 72 6e 20 50 61 74 68 2e      return Path.
16750 43 6f 6d 62 69 6e 65 28 0d 0a 20 20 20 20 20 20  Combine(..      
16760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 73                (s
16770 74 72 69 6e 67 29 76 61 6c 75 65 2c 20 53 74 72  tring)value, Str
16780 69 6e 67 2e 46 6f 72 6d 61 74 28 22 76 7b 30 7d  ing.Format("v{0}
16790 22 2c 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73  ", frameworkVers
167a0 69 6f 6e 29 29 3b 0d 0a 20 20 20 20 20 20 20 20  ion));..        
167b0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d      }..        }
167c0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
167d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
167e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
167f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16800 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16810 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70  ///....        p
16820 72 69 76 61 74 65 20 73 74 61 74 69 63 20 73 74  rivate static st
16830 72 69 6e 67 20 47 65 74 53 64 6b 42 69 6e 61 72  ring GetSdkBinar
16840 79 46 69 6c 65 4e 61 6d 65 28 0d 0a 20 20 20 20  yFileName(..    
16850 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79          Registry
16860 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20  Key rootKey,..  
16870 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
16880 20 66 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20 20   fileName,..    
16890 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61          bool wha
168a0 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf,..          
168b0 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 0d 0a    bool verbose..
168c0 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
168d0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
168e0 20 20 20 20 20 20 53 74 72 69 6e 67 44 69 63 74        StringDict
168f0 69 6f 6e 61 72 79 20 72 65 73 75 6c 74 73 20 3d  ionary results =
16900 20 6e 65 77 20 53 74 72 69 6e 67 44 69 63 74 69   new StringDicti
16910 6f 6e 61 72 79 28 29 3b 0d 0a 0d 0a 20 20 20 20  onary();....    
16920 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 5b 5d          string[]
16930 20 6b 65 79 4e 61 6d 65 73 20 3d 20 7b 0d 0a 20   keyNames = {.. 
16940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46                 F
16950 72 61 6d 65 77 6f 72 6b 4b 65 79 4e 61 6d 65 2c  rameworkKeyName,
16960 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
16970 20 20 46 72 61 6d 65 77 6f 72 6b 53 64 6b 4b 65    FrameworkSdkKe
16980 79 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20  yName,..        
16990 20 20 20 20 20 20 20 20 57 69 6e 64 6f 77 73 53          WindowsS
169a0 64 6b 4b 65 79 4e 61 6d 65 0d 0a 20 20 20 20 20  dkKeyName..     
169b0 20 20 20 20 20 20 20 7d 3b 0d 0a 0d 0a 20 20 20         };....   
169c0 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 5b           string[
169d0 5d 20 76 61 6c 75 65 4e 61 6d 65 73 20 3d 20 7b  ] valueNames = {
169e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
169f0 20 20 22 73 64 6b 49 6e 73 74 61 6c 6c 52 6f 6f    "sdkInstallRoo
16a00 74 76 32 2e 30 22 2c 0d 0a 20 20 20 20 20 20 20  tv2.0",..       
16a10 20 20 20 20 20 20 20 20 20 22 49 6e 73 74 61 6c           "Instal
16a20 6c 61 74 69 6f 6e 46 6f 6c 64 65 72 22 2c 0d 0a  lationFolder",..
16a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16a40 22 49 6e 73 74 61 6c 6c 61 74 69 6f 6e 46 6f 6c  "InstallationFol
16a50 64 65 72 22 0d 0a 20 20 20 20 20 20 20 20 20 20  der"..          
16a60 20 20 7d 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20    };....        
16a70 20 20 20 20 62 6f 6f 6c 5b 5d 20 75 73 65 53 75      bool[] useSu
16a80 62 4b 65 79 73 20 3d 20 7b 0d 0a 20 20 20 20 20  bKeys = {..     
16a90 20 20 20 20 20 20 20 20 20 20 20 66 61 6c 73 65             false
16aa0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
16ab0 20 20 20 74 72 75 65 2c 0d 0a 20 20 20 20 20 20     true,..      
16ac0 20 20 20 20 20 20 20 20 20 20 74 72 75 65 0d 0a            true..
16ad0 20 20 20 20 20 20 20 20 20 20 20 20 7d 3b 0d 0a              };..
16ae0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 66 6f  ..            fo
16af0 72 20 28 69 6e 74 20 69 6e 64 65 78 20 3d 20 30  r (int index = 0
16b00 3b 20 69 6e 64 65 78 20 3c 20 6b 65 79 4e 61 6d  ; index < keyNam
16b10 65 73 2e 4c 65 6e 67 74 68 3b 20 69 6e 64 65 78  es.Length; index
16b20 2b 2b 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ++)..           
16b30 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
16b40 20 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52      using (MockR
16b50 65 67 69 73 74 72 79 4b 65 79 20 6b 65 79 20 3d  egistryKey key =
16b60 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e   RegistryHelper.
16b70 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20  OpenSubKey(..   
16b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16b90 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 6b 65       rootKey, ke
16ba0 79 4e 61 6d 65 73 5b 69 6e 64 65 78 5d 2c 20 66  yNames[index], f
16bb0 61 6c 73 65 2c 20 77 68 61 74 49 66 2c 20 76 65  alse, whatIf, ve
16bc0 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20  rbose))..       
16bd0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
16be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16bf0 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29  if (key == null)
16c00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
16c10 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e            contin
16c20 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ue;....         
16c30 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 75             if (u
16c40 73 65 53 75 62 4b 65 79 73 5b 69 6e 64 65 78 5d  seSubKeys[index]
16c50 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
16c60 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
16c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16c80 20 20 66 6f 72 65 61 63 68 20 28 73 74 72 69 6e    foreach (strin
16c90 67 20 73 75 62 4b 65 79 4e 61 6d 65 20 69 6e 20  g subKeyName in 
16ca0 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 47  RegistryHelper.G
16cb0 65 74 53 75 62 4b 65 79 4e 61 6d 65 73 28 0d 0a  etSubKeyNames(..
16cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16ce0 6b 65 79 2c 20 77 68 61 74 49 66 2c 20 76 65 72  key, whatIf, ver
16cf0 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20  bose))..        
16d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16d10 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
16d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 75                 u
16d30 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74  sing (MockRegist
16d40 72 79 4b 65 79 20 73 75 62 4b 65 79 20 3d 20 52  ryKey subKey = R
16d50 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 4f 70  egistryHelper.Op
16d60 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20  enSubKey(..     
16d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b                 k
16d90 65 79 2c 20 73 75 62 4b 65 79 4e 61 6d 65 2c 20  ey, subKeyName, 
16da0 66 61 6c 73 65 2c 20 77 68 61 74 49 66 2c 20 76  false, whatIf, v
16db0 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20  erbose))..      
16dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16dd0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
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 69 66 20 28 73 75 62           if (sub
16e00 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  Key == null)..  
16e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16e30 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 0d 0a 20    continue;.... 
16e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f                 o
16e60 62 6a 65 63 74 20 76 61 6c 75 65 20 3d 20 52 65  bject value = Re
16e70 67 69 73 74 72 79 48 65 6c 70 65 72 2e 47 65 74  gistryHelper.Get
16e80 56 61 6c 75 65 28 0d 0a 20 20 20 20 20 20 20 20  Value(..        
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 73 75 62 4b              subK
16eb0 65 79 2c 20 76 61 6c 75 65 4e 61 6d 65 73 5b 69  ey, valueNames[i
16ec0 6e 64 65 78 5d 2c 20 6e 75 6c 6c 2c 20 77 68 61  ndex], null, wha
16ed0 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf,..          
16ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16ef0 20 20 20 20 20 20 20 20 20 20 76 65 72 62 6f 73            verbos
16f00 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
16f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16f20 20 20 20 20 20 20 20 69 66 20 28 21 28 76 61 6c         if (!(val
16f30 75 65 20 69 73 20 73 74 72 69 6e 67 29 29 0d 0a  ue is string))..
16f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16f60 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 0d      continue;...
16f70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
16f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16f90 20 73 74 72 69 6e 67 20 70 61 74 68 20 3d 20 28   string path = (
16fa0 73 74 72 69 6e 67 29 76 61 6c 75 65 3b 0d 0a 0d  string)value;...
16fb0 0a 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 20 20 20 20 20                  
16fd0 20 69 66 20 28 21 44 69 72 65 63 74 6f 72 79 2e   if (!Directory.
16fe0 45 78 69 73 74 73 28 70 61 74 68 29 29 0d 0a 20  Exists(path)).. 
16ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17010 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 0d 0a     continue;....
17020 20 20 20 20 20 20 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 70 61 74 68 20 3d 20 50 61 74 68 2e 43 6f 6d 62  path = Path.Comb
17050 69 6e 65 28 70 61 74 68 2c 20 22 62 69 6e 22 29  ine(path, "bin")
17060 3b 0d 0a 0d 0a 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 20 20 69 66 20 28 21 44 69 72 65 63 74       if (!Direct
17090 6f 72 79 2e 45 78 69 73 74 73 28 70 61 74 68 29  ory.Exists(path)
170a0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
170b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
170c0 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b         continue;
170d0 0d 0a 0d 0a 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 20 20 20 20 69 66 20 28 53 74 72 69 6e 67 2e 49      if (String.I
17100 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 66 69 6c  sNullOrEmpty(fil
17110 65 4e 61 6d 65 29 29 0d 0a 20 20 20 20 20 20 20  eName))..       
17120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17130 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
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 20                  
17160 72 65 73 75 6c 74 73 2e 41 64 64 28 73 75 62 4b  results.Add(subK
17170 65 79 2e 4e 61 6d 65 2c 20 70 61 74 68 29 3b 0d  ey.Name, path);.
17180 0a 20 20 20 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 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a       continue;..
171b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
171c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
171d0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
171e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
171f0 20 20 20 20 20 70 61 74 68 20 3d 20 50 61 74 68       path = Path
17200 2e 43 6f 6d 62 69 6e 65 28 70 61 74 68 2c 20 66  .Combine(path, f
17210 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20  ileName);....   
17220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17230 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
17240 28 46 69 6c 65 2e 45 78 69 73 74 73 28 70 61 74  (File.Exists(pat
17250 68 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  h))..           
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 72 65 73 75 6c 74 73           results
17280 2e 41 64 64 28 73 75 62 4b 65 79 2e 4e 61 6d 65  .Add(subKey.Name
17290 2c 20 70 61 74 68 29 3b 0d 0a 20 20 20 20 20 20  , 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 7d 0d 0a 20 20 20 20 20 20 20        }..       
172c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
172d0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
172e0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
172f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
17300 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  lse..           
17310 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
17320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17330 20 20 20 20 6f 62 6a 65 63 74 20 76 61 6c 75 65      object value
17340 20 3d 20 52 65 67 69 73 74 72 79 48 65 6c 70 65   = RegistryHelpe
17350 72 2e 47 65 74 56 61 6c 75 65 28 0d 0a 20 20 20  r.GetValue(..   
17360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17370 20 20 20 20 20 20 20 20 20 6b 65 79 2c 20 76 61           key, va
17380 6c 75 65 4e 61 6d 65 73 5b 69 6e 64 65 78 5d 2c  lueNames[index],
17390 20 6e 75 6c 6c 2c 20 77 68 61 74 49 66 2c 20 76   null, whatIf, v
173a0 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20  erbose);....    
173b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
173c0 20 20 20 20 69 66 20 28 21 28 76 61 6c 75 65 20      if (!(value 
173d0 69 73 20 73 74 72 69 6e 67 29 29 0d 0a 20 20 20  is string))..   
173e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
173f0 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75           continu
17400 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
17410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
17420 72 69 6e 67 20 70 61 74 68 20 3d 20 28 73 74 72  ring path = (str
17430 69 6e 67 29 76 61 6c 75 65 3b 0d 0a 0d 0a 20 20  ing)value;....  
17440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17450 20 20 20 20 20 20 69 66 20 28 21 44 69 72 65 63        if (!Direc
17460 74 6f 72 79 2e 45 78 69 73 74 73 28 70 61 74 68  tory.Exists(path
17470 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
17480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17490 63 6f 6e 74 69 6e 75 65 3b 0d 0a 0d 0a 20 20 20  continue;....   
174a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
174b0 20 20 20 20 20 70 61 74 68 20 3d 20 50 61 74 68       path = Path
174c0 2e 43 6f 6d 62 69 6e 65 28 70 61 74 68 2c 20 22  .Combine(path, "
174d0 62 69 6e 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  bin");....      
174e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
174f0 20 20 69 66 20 28 21 44 69 72 65 63 74 6f 72 79    if (!Directory
17500 2e 45 78 69 73 74 73 28 70 61 74 68 29 29 0d 0a  .Exists(path))..
17510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17520 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74              cont
17530 69 6e 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  inue;....       
17540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17550 20 69 66 20 28 53 74 72 69 6e 67 2e 49 73 4e 75   if (String.IsNu
17560 6c 6c 4f 72 45 6d 70 74 79 28 66 69 6c 65 4e 61  llOrEmpty(fileNa
17570 6d 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  me))..          
17580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
17590 0a 20 20 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 72 65 73               res
175b0 75 6c 74 73 2e 41 64 64 28 6b 65 79 2e 4e 61 6d  ults.Add(key.Nam
175c0 65 2c 20 70 61 74 68 29 3b 0d 0a 20 20 20 20 20  e, path);..     
175d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
175e0 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b         continue;
175f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
17600 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
17610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17620 20 20 20 20 20 20 20 70 61 74 68 20 3d 20 50 61         path = Pa
17630 74 68 2e 43 6f 6d 62 69 6e 65 28 70 61 74 68 2c  th.Combine(path,
17640 20 66 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20   fileName);.... 
17650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17660 20 20 20 20 20 20 20 69 66 20 28 46 69 6c 65 2e         if (File.
17670 45 78 69 73 74 73 28 70 61 74 68 29 29 0d 0a 20  Exists(path)).. 
17680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17690 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75 6c             resul
176a0 74 73 2e 41 64 64 28 6b 65 79 2e 4e 61 6d 65 2c  ts.Add(key.Name,
176b0 20 70 61 74 68 29 3b 0d 0a 20 20 20 20 20 20 20   path);..       
176c0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
176d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
176e0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
176f0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
17700 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
17710 2f 2f 20 4e 4f 54 45 3a 20 49 66 20 77 65 20 66  // NOTE: If we f
17720 6f 75 6e 64 20 73 6f 6d 65 20 72 65 73 75 6c 74  ound some result
17730 73 2c 20 72 65 74 75 72 6e 20 74 68 65 20 6c 61  s, return the la
17740 73 74 20 28 6c 61 74 65 73 74 29 20 6f 6e 65 2e  st (latest) one.
17750 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
17760 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
17770 20 28 72 65 73 75 6c 74 73 2e 43 6f 75 6e 74 20   (results.Count 
17780 3e 20 30 29 0d 0a 20 20 20 20 20 20 20 20 20 20  > 0)..          
17790 20 20 20 20 20 20 72 65 74 75 72 6e 20 72 65 73        return res
177a0 75 6c 74 73 5b 6e 65 77 20 53 74 72 69 6e 67 4c  ults[new StringL
177b0 69 73 74 28 72 65 73 75 6c 74 73 2e 4b 65 79 73  ist(results.Keys
177c0 29 5b 72 65 73 75 6c 74 73 2e 43 6f 75 6e 74 20  )[results.Count 
177d0 2d 20 31 5d 5d 3b 0d 0a 0d 0a 20 20 20 20 20 20  - 1]];....      
177e0 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c        return nul
177f0 6c 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20  l;..        }.. 
17800 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
17810 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  n....        ///
17820 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17830 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17840 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17850 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17860 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
17870 23 72 65 67 69 6f 6e 20 50 65 72 2d 46 72 61 6d  #region Per-Fram
17880 65 77 6f 72 6b 2f 50 6c 61 74 66 6f 72 6d 20 48  ework/Platform H
17890 61 6e 64 6c 69 6e 67 0d 0a 20 20 20 20 20 20 20  andling..       
178a0 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
178b0 76 6f 69 64 20 49 6e 69 74 69 61 6c 69 7a 65 41  void InitializeA
178c0 6c 6c 46 72 61 6d 65 77 6f 72 6b 73 28 0d 0a 20  llFrameworks(.. 
178d0 20 20 20 20 20 20 20 20 20 20 20 43 6f 6e 66 69             Confi
178e0 67 75 72 61 74 69 6f 6e 20 63 6f 6e 66 69 67 75  guration configu
178f0 72 61 74 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20  ration..        
17900 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b      )..        {
17910 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
17920 20 28 66 72 61 6d 65 77 6f 72 6b 52 6f 6f 74 4b   (frameworkRootK
17930 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ey == null)..   
17940 20 20 20 20 20 20 20 20 20 20 20 20 20 66 72 61               fra
17950 6d 65 77 6f 72 6b 52 6f 6f 74 4b 65 79 20 3d 20  meworkRootKey = 
17960 52 65 67 69 73 74 72 79 2e 4c 6f 63 61 6c 4d 61  Registry.LocalMa
17970 63 68 69 6e 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  chine;....      
17980 20 20 20 20 20 20 69 66 20 28 66 72 61 6d 65 77        if (framew
17990 6f 72 6b 4e 61 6d 65 4c 69 73 74 20 3d 3d 20 6e  orkNameList == n
179a0 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
179b0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
179c0 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4e 61       frameworkNa
179d0 6d 65 4c 69 73 74 20 3d 20 6e 65 77 20 53 74 72  meList = new Str
179e0 69 6e 67 4c 69 73 74 28 29 3b 0d 0a 0d 0a 20 20  ingList();....  
179f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
17a00 20 28 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e   ((configuration
17a10 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 21 63 6f   == null) || !co
17a20 6e 66 69 67 75 72 61 74 69 6f 6e 2e 4e 6f 44 65  nfiguration.NoDe
17a30 73 6b 74 6f 70 29 0d 0a 20 20 20 20 20 20 20 20  sktop)..        
17a40 20 20 20 20 20 20 20 20 20 20 20 20 66 72 61 6d              fram
17a50 65 77 6f 72 6b 4e 61 6d 65 4c 69 73 74 2e 41 64  eworkNameList.Ad
17a60 64 28 22 2e 4e 45 54 46 72 61 6d 65 77 6f 72 6b  d(".NETFramework
17a70 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ");....         
17a80 20 20 20 20 20 20 20 69 66 20 28 28 63 6f 6e 66         if ((conf
17a90 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c  iguration == nul
17aa0 6c 29 20 7c 7c 20 21 63 6f 6e 66 69 67 75 72 61  l) || !configura
17ab0 74 69 6f 6e 2e 4e 6f 43 6f 6d 70 61 63 74 29 0d  tion.NoCompact).
17ac0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
17ad0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
17ae0 20 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72          framewor
17af0 6b 4e 61 6d 65 4c 69 73 74 2e 41 64 64 28 22 2e  kNameList.Add(".
17b00 4e 45 54 43 6f 6d 70 61 63 74 46 72 61 6d 65 77  NETCompactFramew
17b10 6f 72 6b 22 29 3b 0d 0a 20 20 20 20 20 20 20 20  ork");..        
17b20 20 20 20 20 20 20 20 20 20 20 20 20 66 72 61 6d              fram
17b30 65 77 6f 72 6b 4e 61 6d 65 4c 69 73 74 2e 41 64  eworkNameList.Ad
17b40 64 28 22 2e 4e 45 54 43 6f 6d 70 61 63 74 46 72  d(".NETCompactFr
17b50 61 6d 65 77 6f 72 6b 22 29 3b 0d 0a 20 20 20 20  amework");..    
17b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17b70 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 4c 69 73  frameworkNameLis
17b80 74 2e 41 64 64 28 22 2e 4e 45 54 43 6f 6d 70 61  t.Add(".NETCompa
17b90 63 74 46 72 61 6d 65 77 6f 72 6b 22 29 3b 0d 0a  ctFramework");..
17ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17bb0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
17bc0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
17bd0 69 66 20 28 66 72 61 6d 65 77 6f 72 6b 56 65 72  if (frameworkVer
17be0 73 69 6f 6e 4d 61 70 20 3d 3d 20 6e 75 6c 6c 29  sionMap == null)
17bf0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
17c00 20 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69    frameworkVersi
17c10 6f 6e 4d 61 70 20 3d 20 6e 65 77 20 56 65 72 73  onMap = new Vers
17c20 69 6f 6e 4d 61 70 28 29 3b 0d 0a 0d 0a 20 20 20  ionMap();....   
17c30 20 20 20 20 20 20 20 20 20 69 66 20 28 28 63 6f           if ((co
17c40 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20 6e  nfiguration == n
17c50 75 6c 6c 29 20 7c 7c 20 21 63 6f 6e 66 69 67 75  ull) || !configu
17c60 72 61 74 69 6f 6e 2e 4e 6f 44 65 73 6b 74 6f 70  ration.NoDesktop
17c70 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
17c80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
17c90 20 20 56 65 72 73 69 6f 6e 4c 69 73 74 20 64 65    VersionList de
17ca0 73 6b 74 6f 70 56 65 72 73 69 6f 6e 4c 69 73 74  sktopVersionList
17cb0 20 3d 20 6e 65 77 20 56 65 72 73 69 6f 6e 4c 69   = new VersionLi
17cc0 73 74 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  st();....       
17cd0 20 20 20 20 20 20 20 20 20 69 66 20 28 28 63 6f           if ((co
17ce0 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20 6e  nfiguration == n
17cf0 75 6c 6c 29 20 7c 7c 20 21 63 6f 6e 66 69 67 75  ull) || !configu
17d00 72 61 74 69 6f 6e 2e 4e 6f 4e 65 74 46 78 32 30  ration.NoNetFx20
17d10 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
17d20 20 20 20 20 20 20 20 64 65 73 6b 74 6f 70 56 65         desktopVe
17d30 72 73 69 6f 6e 4c 69 73 74 2e 41 64 64 28 6e 65  rsionList.Add(ne
17d40 77 20 56 65 72 73 69 6f 6e 28 32 2c 20 30 2c 20  w Version(2, 0, 
17d50 35 30 37 32 37 29 29 3b 0d 0a 0d 0a 20 20 20 20  50727));....    
17d60 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
17d70 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d  (configuration =
17d80 3d 20 6e 75 6c 6c 29 20 7c 7c 20 21 63 6f 6e 66  = null) || !conf
17d90 69 67 75 72 61 74 69 6f 6e 2e 4e 6f 4e 65 74 46  iguration.NoNetF
17da0 78 34 30 29 0d 0a 20 20 20 20 20 20 20 20 20 20  x40)..          
17db0 20 20 20 20 20 20 20 20 20 20 64 65 73 6b 74 6f            deskto
17dc0 70 56 65 72 73 69 6f 6e 4c 69 73 74 2e 41 64 64  pVersionList.Add
17dd0 28 6e 65 77 20 56 65 72 73 69 6f 6e 28 34 2c 20  (new Version(4, 
17de0 30 2c 20 33 30 33 31 39 29 29 3b 0d 0a 0d 0a 20  0, 30319));.... 
17df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66                 f
17e00 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 4d  rameworkVersionM
17e10 61 70 2e 41 64 64 28 22 2e 4e 45 54 46 72 61 6d  ap.Add(".NETFram
17e20 65 77 6f 72 6b 22 2c 20 64 65 73 6b 74 6f 70 56  ework", desktopV
17e30 65 72 73 69 6f 6e 4c 69 73 74 29 3b 0d 0a 20 20  ersionList);..  
17e40 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
17e50 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 28             if ((
17e60 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d  configuration ==
17e70 20 6e 75 6c 6c 29 20 7c 7c 20 21 63 6f 6e 66 69   null) || !confi
17e80 67 75 72 61 74 69 6f 6e 2e 4e 6f 43 6f 6d 70 61  guration.NoCompa
17e90 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ct)..           
17ea0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
17eb0 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 56 65 72      frameworkVer
17ec0 73 69 6f 6e 4d 61 70 2e 41 64 64 28 22 2e 4e 45  sionMap.Add(".NE
17ed0 54 43 6f 6d 70 61 63 74 46 72 61 6d 65 77 6f 72  TCompactFramewor
17ee0 6b 22 2c 20 6e 65 77 20 56 65 72 73 69 6f 6e 4c  k", new VersionL
17ef0 69 73 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ist(..          
17f00 20 20 20 20 20 20 20 20 20 20 6e 65 77 20 56 65            new Ve
17f10 72 73 69 6f 6e 5b 5d 20 7b 0d 0a 20 20 20 20 20  rsion[] {..     
17f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e                 n
17f30 65 77 20 56 65 72 73 69 6f 6e 28 32 2c 20 30 2c  ew Version(2, 0,
17f40 20 30 2c 20 30 29 2c 20 6e 65 77 20 56 65 72 73   0, 0), new Vers
17f50 69 6f 6e 28 33 2c 20 35 2c 20 30 2c 20 30 29 0d  ion(3, 5, 0, 0).
17f60 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
17f70 20 7d 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20   }));..         
17f80 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
17f90 20 20 20 20 69 66 20 28 70 6c 61 74 66 6f 72 6d      if (platform
17fa0 4e 61 6d 65 4c 69 73 74 20 3d 3d 20 6e 75 6c 6c  NameList == null
17fb0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
17fc0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
17fd0 20 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 4c 69    platformNameLi
17fe0 73 74 20 3d 20 6e 65 77 20 53 74 72 69 6e 67 4c  st = new StringL
17ff0 69 73 74 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ist();....      
18000 20 20 20 20 20 20 20 20 20 20 69 66 20 28 28 63            if ((c
18010 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20  onfiguration == 
18020 6e 75 6c 6c 29 20 7c 7c 20 21 63 6f 6e 66 69 67  null) || !config
18030 75 72 61 74 69 6f 6e 2e 4e 6f 44 65 73 6b 74 6f  uration.NoDeskto
18040 70 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  p)..            
18050 20 20 20 20 20 20 20 20 70 6c 61 74 66 6f 72 6d          platform
18060 4e 61 6d 65 4c 69 73 74 2e 41 64 64 28 6e 75 6c  NameList.Add(nul
18070 6c 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  l);....         
18080 20 20 20 20 20 20 20 69 66 20 28 28 63 6f 6e 66         if ((conf
18090 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c  iguration == nul
180a0 6c 29 20 7c 7c 20 21 63 6f 6e 66 69 67 75 72 61  l) || !configura
180b0 74 69 6f 6e 2e 4e 6f 43 6f 6d 70 61 63 74 29 0d  tion.NoCompact).
180c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
180d0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
180e0 20 20 20 20 20 20 20 20 70 6c 61 74 66 6f 72 6d          platform
180f0 4e 61 6d 65 4c 69 73 74 2e 41 64 64 28 22 50 6f  NameList.Add("Po
18100 63 6b 65 74 50 43 22 29 3b 0d 0a 20 20 20 20 20  cketPC");..     
18110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70                 p
18120 6c 61 74 66 6f 72 6d 4e 61 6d 65 4c 69 73 74 2e  latformNameList.
18130 41 64 64 28 22 53 6d 61 72 74 70 68 6f 6e 65 22  Add("Smartphone"
18140 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
18150 20 20 20 20 20 20 20 20 70 6c 61 74 66 6f 72 6d          platform
18160 4e 61 6d 65 4c 69 73 74 2e 41 64 64 28 22 57 69  NameList.Add("Wi
18170 6e 64 6f 77 73 43 45 22 29 3b 0d 0a 20 20 20 20  ndowsCE");..    
18180 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
18190 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
181a0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
181b0 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
181c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
181d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
181e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
181f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
18200 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
18210 61 74 69 63 20 62 6f 6f 6c 20 48 61 76 65 46 72  atic bool HaveFr
18220 61 6d 65 77 6f 72 6b 28 0d 0a 20 20 20 20 20 20  amework(..      
18230 20 20 20 20 20 20 52 65 67 69 73 74 72 79 4b 65        RegistryKe
18240 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 20  y rootKey,..    
18250 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 66          string f
18260 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 0d 0a 20  rameworkName,.. 
18270 20 20 20 20 20 20 20 20 20 20 20 56 65 72 73 69             Versi
18280 6f 6e 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73  on frameworkVers
18290 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ion,..          
182a0 20 20 73 74 72 69 6e 67 20 70 6c 61 74 66 6f 72    string platfor
182b0 6d 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20  mName,..        
182c0 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c      bool whatIf,
182d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
182e0 6f 6c 20 76 65 72 62 6f 73 65 0d 0a 20 20 20 20  ol verbose..    
182f0 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
18300 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
18310 20 20 73 74 72 69 6e 67 20 66 6f 72 6d 61 74 20    string format 
18320 3d 20 21 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c  = !String.IsNull
18330 4f 72 45 6d 70 74 79 28 70 6c 61 74 66 6f 72 6d  OrEmpty(platform
18340 4e 61 6d 65 29 20 3f 0d 0a 20 20 20 20 20 20 20  Name) ?..       
18350 20 20 20 20 20 20 20 20 20 22 53 6f 66 74 77 61           "Softwa
18360 72 65 5c 5c 4d 69 63 72 6f 73 6f 66 74 5c 5c 7b  re\\Microsoft\\{
18370 30 7d 5c 5c 76 7b 31 7d 5c 5c 7b 32 7d 22 20 3a  0}\\v{1}\\{2}" :
18380 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
18390 20 20 22 53 6f 66 74 77 61 72 65 5c 5c 4d 69 63    "Software\\Mic
183a0 72 6f 73 6f 66 74 5c 5c 7b 30 7d 5c 5c 76 7b 31  rosoft\\{0}\\v{1
183b0 7d 22 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  }";....         
183c0 20 20 20 73 74 72 69 6e 67 20 6b 65 79 4e 61 6d     string keyNam
183d0 65 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  e = String.Forma
183e0 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
183f0 20 20 20 20 66 6f 72 6d 61 74 2c 20 66 72 61 6d      format, fram
18400 65 77 6f 72 6b 4e 61 6d 65 2c 20 66 72 61 6d 65  eworkName, frame
18410 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 20 70 6c 61  workVersion, pla
18420 74 66 6f 72 6d 4e 61 6d 65 29 3b 0d 0a 0d 0a 20  tformName);.... 
18430 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67             using
18440 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65   (MockRegistryKe
18450 79 20 6b 65 79 20 3d 20 52 65 67 69 73 74 72 79  y key = Registry
18460 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62 4b 65  Helper.OpenSubKe
18470 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
18480 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c          rootKey,
18490 20 6b 65 79 4e 61 6d 65 2c 20 66 61 6c 73 65 2c   keyName, false,
184a0 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65   whatIf, verbose
184b0 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
184c0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
184d0 20 20 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75     if (key == nu
184e0 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
184f0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
18500 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  false;....      
18510 20 20 20 20 20 20 20 20 20 20 69 66 20 28 70 6c            if (pl
18520 61 74 66 6f 72 6d 4e 61 6d 65 20 21 3d 20 6e 75  atformName != nu
18530 6c 6c 29 20 2f 2f 20 4e 4f 54 45 3a 20 53 6b 69  ll) // NOTE: Ski
18540 70 20 6e 6f 6e 2d 64 65 73 6b 74 6f 70 20 66 72  p non-desktop fr
18550 61 6d 65 77 6f 72 6b 73 2e 0d 0a 20 20 20 20 20  ameworks...     
18560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
18570 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 0d 0a 20  eturn true;.... 
18580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
18590 74 72 69 6e 67 20 64 69 72 65 63 74 6f 72 79 20  tring directory 
185a0 3d 20 47 65 74 46 72 61 6d 65 77 6f 72 6b 44 69  = GetFrameworkDi
185b0 72 65 63 74 6f 72 79 28 0d 0a 20 20 20 20 20 20  rectory(..      
185c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f                ro
185d0 6f 74 4b 65 79 2c 20 66 72 61 6d 65 77 6f 72 6b  otKey, framework
185e0 56 65 72 73 69 6f 6e 2c 20 77 68 61 74 49 66 2c  Version, whatIf,
185f0 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20   verbose);....  
18600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
18610 20 28 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f   (String.IsNullO
18620 72 45 6d 70 74 79 28 64 69 72 65 63 74 6f 72 79  rEmpty(directory
18630 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
18640 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
18650 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  alse;....       
18660 20 20 20 20 20 20 20 20 20 69 66 20 28 21 44 69           if (!Di
18670 72 65 63 74 6f 72 79 2e 45 78 69 73 74 73 28 64  rectory.Exists(d
18680 69 72 65 63 74 6f 72 79 29 29 0d 0a 20 20 20 20  irectory))..    
18690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
186a0 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d  return false;...
186b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
186c0 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20   return true;.. 
186d0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
186e0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
186f0 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
18700 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18710 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18720 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18730 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
18740 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
18750 61 74 69 63 20 62 6f 6f 6c 20 46 6f 72 45 61 63  atic bool ForEac
18760 68 46 72 61 6d 65 77 6f 72 6b 43 6f 6e 66 69 67  hFrameworkConfig
18770 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 46  (..            F
18780 72 61 6d 65 77 6f 72 6b 43 6f 6e 66 69 67 43 61  rameworkConfigCa
18790 6c 6c 62 61 63 6b 20 63 61 6c 6c 62 61 63 6b 2c  llback callback,
187a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
187b0 72 69 6e 67 20 69 6e 76 61 72 69 61 6e 74 2c 0d  ring invariant,.
187c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72  .            str
187d0 69 6e 67 20 6e 61 6d 65 2c 0d 0a 20 20 20 20 20  ing name,..     
187e0 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 64 65         string de
187f0 73 63 72 69 70 74 69 6f 6e 2c 0d 0a 20 20 20 20  scription,..    
18800 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 74          string t
18810 79 70 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20  ypeName,..      
18820 20 20 20 20 20 20 41 73 73 65 6d 62 6c 79 4e 61        AssemblyNa
18830 6d 65 20 61 73 73 65 6d 62 6c 79 4e 61 6d 65 2c  me assemblyName,
18840 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6f 62  ..            ob
18850 6a 65 63 74 20 63 6c 69 65 6e 74 44 61 74 61 2c  ject clientData,
18860 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
18870 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20  ol whatIf,..    
18880 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72          bool ver
18890 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  bose,..         
188a0 20 20 20 72 65 66 20 62 6f 6f 6c 20 73 61 76 65     ref bool save
188b0 64 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d,..            
188c0 72 65 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72  ref string error
188d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d  ..            ).
188e0 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
188f0 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79          Registry
18900 4b 65 79 20 72 6f 6f 74 4b 65 79 20 3d 20 66 72  Key rootKey = fr
18910 61 6d 65 77 6f 72 6b 52 6f 6f 74 4b 65 79 3b 0d  ameworkRootKey;.
18920 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
18930 66 20 28 72 6f 6f 74 4b 65 79 20 3d 3d 20 6e 75  f (rootKey == nu
18940 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
18950 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
18960 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69 6e 76      error = "inv
18970 61 6c 69 64 20 72 6f 6f 74 20 6b 65 79 22 3b 0d  alid root key";.
18980 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
18990 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
189a0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
189b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
189c0 28 21 4f 62 6a 65 63 74 2e 52 65 66 65 72 65 6e  (!Object.Referen
189d0 63 65 45 71 75 61 6c 73 28 72 6f 6f 74 4b 65 79  ceEquals(rootKey
189e0 2c 20 52 65 67 69 73 74 72 79 2e 43 75 72 72 65  , Registry.Curre
189f0 6e 74 55 73 65 72 29 20 26 26 0d 0a 20 20 20 20  ntUser) &&..    
18a00 20 20 20 20 20 20 20 20 20 20 20 20 21 4f 62 6a              !Obj
18a10 65 63 74 2e 52 65 66 65 72 65 6e 63 65 45 71 75  ect.ReferenceEqu
18a20 61 6c 73 28 72 6f 6f 74 4b 65 79 2c 20 52 65 67  als(rootKey, Reg
18a30 69 73 74 72 79 2e 4c 6f 63 61 6c 4d 61 63 68 69  istry.LocalMachi
18a40 6e 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ne))..          
18a50 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
18a60 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 72 6f       error = "ro
18a70 6f 74 20 6b 65 79 20 6d 75 73 74 20 62 65 20 70  ot key must be p
18a80 65 72 2d 75 73 65 72 20 6f 72 20 70 65 72 2d 6d  er-user or per-m
18a90 61 63 68 69 6e 65 22 3b 0d 0a 20 20 20 20 20 20  achine";..      
18aa0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
18ab0 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
18ac0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
18ad0 20 20 20 20 20 20 69 66 20 28 66 72 61 6d 65 77        if (framew
18ae0 6f 72 6b 4e 61 6d 65 4c 69 73 74 20 3d 3d 20 6e  orkNameList == n
18af0 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
18b00 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
18b10 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 6e 6f       error = "no
18b20 20 66 72 61 6d 65 77 6f 72 6b 20 6e 61 6d 65 73   framework names
18b30 20 66 6f 75 6e 64 22 3b 0d 0a 20 20 20 20 20 20   found";..      
18b40 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
18b50 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
18b60 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
18b70 20 20 20 20 20 20 69 66 20 28 66 72 61 6d 65 77        if (framew
18b80 6f 72 6b 56 65 72 73 69 6f 6e 4d 61 70 20 3d 3d  orkVersionMap ==
18b90 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
18ba0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
18bb0 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22         error = "
18bc0 6e 6f 20 66 72 61 6d 65 77 6f 72 6b 20 76 65 72  no framework ver
18bd0 73 69 6f 6e 73 20 66 6f 75 6e 64 22 3b 0d 0a 20  sions found";.. 
18be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
18bf0 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
18c00 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
18c10 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 70             if (p
18c20 6c 61 74 66 6f 72 6d 4e 61 6d 65 4c 69 73 74 20  latformNameList 
18c30 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
18c40 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
18c50 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
18c60 20 22 6e 6f 20 70 6c 61 74 66 6f 72 6d 20 6e 61   "no platform na
18c70 6d 65 73 20 66 6f 75 6e 64 22 3b 0d 0a 20 20 20  mes found";..   
18c80 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
18c90 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  urn false;..    
18ca0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
18cb0 20 20 20 20 20 20 20 20 20 69 66 20 28 66 72 61           if (fra
18cc0 6d 65 77 6f 72 6b 4e 61 6d 65 4c 69 73 74 2e 43  meworkNameList.C
18cd0 6f 75 6e 74 20 21 3d 20 70 6c 61 74 66 6f 72 6d  ount != platform
18ce0 4e 61 6d 65 4c 69 73 74 2e 43 6f 75 6e 74 29 0d  NameList.Count).
18cf0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
18d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18d10 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46  error = String.F
18d20 6f 72 6d 61 74 28 22 66 72 61 6d 65 77 6f 72 6b  ormat("framework
18d30 20 6e 61 6d 65 20 63 6f 75 6e 74 20 7b 30 7d 20   name count {0} 
18d40 64 6f 65 73 20 6e 6f 74 20 22 20 2b 0d 0a 20 20  does not " +..  
18d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18d60 20 20 22 6d 61 74 63 68 20 70 6c 61 74 66 6f 72    "match platfor
18d70 6d 20 6e 61 6d 65 20 63 6f 75 6e 74 20 7b 31 7d  m name count {1}
18d80 22 2c 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65  ", frameworkName
18d90 4c 69 73 74 2e 43 6f 75 6e 74 2c 0d 0a 20 20 20  List.Count,..   
18da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18db0 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 4c 69 73   platformNameLis
18dc0 74 2e 43 6f 75 6e 74 29 3b 0d 0a 0d 0a 20 20 20  t.Count);....   
18dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
18de0 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  urn false;..    
18df0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
18e00 20 20 20 20 20 20 20 20 20 66 6f 72 20 28 69 6e           for (in
18e10 74 20 69 6e 64 65 78 20 3d 20 30 3b 20 69 6e 64  t index = 0; ind
18e20 65 78 20 3c 20 66 72 61 6d 65 77 6f 72 6b 4e 61  ex < frameworkNa
18e30 6d 65 4c 69 73 74 2e 43 6f 75 6e 74 3b 20 69 6e  meList.Count; in
18e40 64 65 78 2b 2b 29 0d 0a 20 20 20 20 20 20 20 20  dex++)..        
18e50 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
18e60 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
18e70 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f             // NO
18e80 54 45 3a 20 47 72 61 62 20 74 68 65 20 6e 61 6d  TE: Grab the nam
18e90 65 20 6f 66 20 74 68 65 20 66 72 61 6d 65 77 6f  e of the framewo
18ea0 72 6b 20 28 65 2e 67 2e 20 22 2e 4e 45 54 46 72  rk (e.g. ".NETFr
18eb0 61 6d 65 77 6f 72 6b 22 29 0d 0a 20 20 20 20 20  amework")..     
18ec0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
18ed0 20 20 20 20 61 6e 64 20 74 68 65 20 6e 61 6d 65      and the name
18ee0 20 6f 66 20 74 68 65 20 70 6c 61 74 66 6f 72 6d   of the platform
18ef0 20 28 65 2e 67 2e 20 22 57 69 6e 64 6f 77 73 43   (e.g. "WindowsC
18f00 45 22 29 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  E")...          
18f10 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
18f20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
18f30 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 20 3d   frameworkName =
18f40 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 4c 69   frameworkNameLi
18f50 73 74 5b 69 6e 64 65 78 5d 3b 0d 0a 20 20 20 20  st[index];..    
18f60 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
18f70 6e 67 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 20  ng platformName 
18f80 3d 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 4c 69  = platformNameLi
18f90 73 74 5b 69 6e 64 65 78 5d 3b 0d 0a 0d 0a 20 20  st[index];....  
18fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
18fb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
18fc0 20 20 2f 2f 20 4e 4f 54 45 3a 20 53 6b 69 70 20    // NOTE: Skip 
18fd0 61 6c 6c 20 6e 6f 6e 2d 64 65 73 6b 74 6f 70 20  all non-desktop 
18fe0 66 72 61 6d 65 77 6f 72 6b 73 20 28 69 2e 65 2e  frameworks (i.e.
18ff0 20 69 66 20 74 68 65 20 70 6c 61 74 66 6f 72 6d   if the platform
19000 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
19010 20 20 2f 2f 20 20 20 20 20 20 20 6e 61 6d 65 20    //       name 
19020 69 73 20 6e 6f 74 20 6e 75 6c 6c 29 2e 0d 0a 20  is not null)... 
19030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
19040 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
19050 20 20 20 69 66 20 28 70 6c 61 74 66 6f 72 6d 4e     if (platformN
19060 61 6d 65 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ame != null)..  
19070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19080 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 0d 0a 20    continue;.... 
19090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
190a0 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
190b0 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 47 72 61 62     // NOTE: Grab
190c0 20 74 68 65 20 73 75 70 70 6f 72 74 65 64 20 76   the supported v
190d0 65 72 73 69 6f 6e 73 20 6f 66 20 74 68 69 73 20  ersions of this 
190e0 70 61 72 74 69 63 75 6c 61 72 0d 0a 20 20 20 20  particular..    
190f0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
19100 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 2e 0d       framework..
19110 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
19120 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
19130 20 20 20 20 20 56 65 72 73 69 6f 6e 4c 69 73 74       VersionList
19140 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f   frameworkVersio
19150 6e 4c 69 73 74 3b 0d 0a 0d 0a 20 20 20 20 20 20  nList;....      
19160 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21 66            if (!f
19170 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 4d  rameworkVersionM
19180 61 70 2e 54 72 79 47 65 74 56 61 6c 75 65 28 0d  ap.TryGetValue(.
19190 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
191a0 20 20 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f           framewo
191b0 72 6b 4e 61 6d 65 2c 20 6f 75 74 20 66 72 61 6d  rkName, out fram
191c0 65 77 6f 72 6b 56 65 72 73 69 6f 6e 4c 69 73 74  eworkVersionList
191d0 29 20 7c 7c 0d 0a 20 20 20 20 20 20 20 20 20 20  ) ||..          
191e0 20 20 20 20 20 20 20 20 20 20 28 66 72 61 6d 65            (frame
191f0 77 6f 72 6b 56 65 72 73 69 6f 6e 4c 69 73 74 20  workVersionList 
19200 3d 3d 20 6e 75 6c 6c 29 29 0d 0a 20 20 20 20 20  == null))..     
19210 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
19220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19230 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20    continue;..   
19240 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
19250 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
19260 20 20 66 6f 72 65 61 63 68 20 28 56 65 72 73 69    foreach (Versi
19270 6f 6e 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73  on frameworkVers
19280 69 6f 6e 20 69 6e 20 66 72 61 6d 65 77 6f 72 6b  ion in framework
19290 56 65 72 73 69 6f 6e 4c 69 73 74 29 0d 0a 20 20  VersionList)..  
192a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
192b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
192c0 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 54 72       TraceOps.Tr
192d0 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ace(..          
192e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
192f0 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65  acePriority.Lowe
19300 72 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b  r, traceCallback
19310 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  , String.Format(
19320 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
19330 20 20 20 20 20 20 20 20 20 20 22 66 72 61 6d 65            "frame
19340 77 6f 72 6b 4e 61 6d 65 20 3d 20 7b 30 7d 2c 20  workName = {0}, 
19350 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e  frameworkVersion
19360 20 3d 20 7b 31 7d 2c 20 22 20 2b 0d 0a 20 20 20   = {1}, " +..   
19370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19380 20 20 20 20 20 22 70 6c 61 74 66 6f 72 6d 4e 61       "platformNa
19390 6d 65 20 3d 20 7b 32 7d 22 2c 20 46 6f 72 44 69  me = {2}", ForDi
193a0 73 70 6c 61 79 28 66 72 61 6d 65 77 6f 72 6b 4e  splay(frameworkN
193b0 61 6d 65 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  ame),..         
193c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46                 F
193d0 6f 72 44 69 73 70 6c 61 79 28 66 72 61 6d 65 77  orDisplay(framew
193e0 6f 72 6b 56 65 72 73 69 6f 6e 29 2c 0d 0a 20 20  orkVersion),..  
193f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19400 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79        ForDisplay
19410 28 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 29 29 2c  (platformName)),
19420 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
19430 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
19440 20 20 20 20 20 20 20 20 69 66 20 28 21 48 61 76          if (!Hav
19450 65 46 72 61 6d 65 77 6f 72 6b 28 0d 0a 20 20 20  eFramework(..   
19460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19470 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79           rootKey
19480 2c 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c  , frameworkName,
19490 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f   frameworkVersio
194a0 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n,..            
194b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
194c0 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c 20 77 68  platformName, wh
194d0 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 29 0d  atIf, verbose)).
194e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
194f0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
19500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19510 54 72 61 63 65 4f 70 73 2e 54 72 61 63 65 28 0d  TraceOps.Trace(.
19520 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
19530 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
19540 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 2c 20  cePriority.Low, 
19550 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 0d 0a  traceCallback,..
19560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19570 20 20 20 20 20 20 20 20 20 20 20 20 22 2e 4e 45              ".NE
19580 54 20 46 72 61 6d 65 77 6f 72 6b 20 6e 6f 74 20  T Framework not 
19590 66 6f 75 6e 64 2c 20 73 6b 69 70 70 69 6e 67 2e  found, skipping.
195a0 2e 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ..",..          
195b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
195c0 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
195d0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
195e0 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
195f0 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20  tinue;..        
19600 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
19610 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
19620 20 20 20 20 20 69 66 20 28 63 61 6c 6c 62 61 63       if (callbac
19630 6b 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  k == null)..    
19640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19650 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 0d      continue;...
19660 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
19670 20 20 20 20 20 73 74 72 69 6e 67 20 64 69 72 65       string dire
19680 63 74 6f 72 79 20 3d 20 47 65 74 46 72 61 6d 65  ctory = GetFrame
19690 77 6f 72 6b 44 69 72 65 63 74 6f 72 79 28 0d 0a  workDirectory(..
196a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
196b0 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c          rootKey,
196c0 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f   frameworkVersio
196d0 6e 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f  n, whatIf, verbo
196e0 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  se);....        
196f0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
19700 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45  String.IsNullOrE
19710 6d 70 74 79 28 64 69 72 65 63 74 6f 72 79 29 29  mpty(directory))
19720 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
19730 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
19740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19750 20 54 72 61 63 65 4f 70 73 2e 54 72 61 63 65 28   TraceOps.Trace(
19760 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
19770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
19780 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 2c  acePriority.Low,
19790 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20   traceCallback, 
197a0 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
197b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
197c0 20 20 20 20 20 20 20 20 20 20 20 20 22 2e 4e 45              ".NE
197d0 54 20 46 72 61 6d 65 77 6f 72 6b 20 76 7b 30 7d  T Framework v{0}
197e0 20 64 69 72 65 63 74 6f 72 79 20 69 73 20 69 6e   directory is in
197f0 76 61 6c 69 64 2c 20 22 20 2b 0d 0a 20 20 20 20  valid, " +..    
19800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19810 20 20 20 20 20 20 20 20 22 73 6b 69 70 70 69 6e          "skippin
19820 67 2e 2e 2e 22 2c 20 66 72 61 6d 65 77 6f 72 6b  g...", framework
19830 56 65 72 73 69 6f 6e 29 2c 20 74 72 61 63 65 43  Version), traceC
19840 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
19850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19860 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a       continue;..
19870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19880 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
19890 20 20 20 20 20 20 20 20 20 20 20 20 20 64 69 72               dir
198a0 65 63 74 6f 72 79 20 3d 20 50 61 74 68 2e 43 6f  ectory = Path.Co
198b0 6d 62 69 6e 65 28 64 69 72 65 63 74 6f 72 79 2c  mbine(directory,
198c0 20 22 43 6f 6e 66 69 67 22 29 3b 0d 0a 0d 0a 20   "Config");.... 
198d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
198e0 20 20 20 69 66 20 28 21 44 69 72 65 63 74 6f 72     if (!Director
198f0 79 2e 45 78 69 73 74 73 28 64 69 72 65 63 74 6f  y.Exists(directo
19900 72 79 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ry))..          
19910 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
19920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19930 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 54 72       TraceOps.Tr
19940 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ace(..          
19950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19960 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e    TracePriority.
19970 4c 6f 77 2c 20 74 72 61 63 65 43 61 6c 6c 62 61  Low, traceCallba
19980 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ck, String.Forma
19990 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
199a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
199b0 22 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b 20  ".NET Framework 
199c0 76 7b 30 7d 20 64 69 72 65 63 74 6f 72 79 20 5c  v{0} directory \
199d0 22 7b 31 7d 5c 22 20 64 6f 65 73 20 6e 6f 74 20  "{1}\" does not 
199e0 22 20 2b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  " +..           
199f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19a00 20 22 65 78 69 73 74 2c 20 73 6b 69 70 70 69 6e   "exist, skippin
19a10 67 2e 2e 2e 22 2c 20 66 72 61 6d 65 77 6f 72 6b  g...", framework
19a20 56 65 72 73 69 6f 6e 2c 20 64 69 72 65 63 74 6f  Version, directo
19a30 72 79 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ry),..          
19a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19a50 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
19a60 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
19a70 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
19a80 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20  tinue;..        
19a90 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
19aa0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
19ab0 20 20 20 20 20 73 74 72 69 6e 67 20 66 69 6c 65       string file
19ac0 4e 61 6d 65 20 3d 20 50 61 74 68 2e 43 6f 6d 62  Name = Path.Comb
19ad0 69 6e 65 28 64 69 72 65 63 74 6f 72 79 2c 20 22  ine(directory, "
19ae0 6d 61 63 68 69 6e 65 2e 63 6f 6e 66 69 67 22 29  machine.config")
19af0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
19b00 20 20 20 20 20 20 20 20 20 69 66 20 28 21 46 69           if (!Fi
19b10 6c 65 2e 45 78 69 73 74 73 28 66 69 6c 65 4e 61  le.Exists(fileNa
19b20 6d 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  me))..          
19b30 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
19b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19b50 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 54 72       TraceOps.Tr
19b60 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ace(..          
19b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19b80 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e    TracePriority.
19b90 4c 6f 77 2c 20 74 72 61 63 65 43 61 6c 6c 62 61  Low, traceCallba
19ba0 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ck, String.Forma
19bb0 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
19bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19bd0 22 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b 20  ".NET Framework 
19be0 76 7b 30 7d 20 66 69 6c 65 20 5c 22 7b 31 7d 5c  v{0} file \"{1}\
19bf0 22 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 73 74  " does not exist
19c00 2c 20 22 20 2b 0d 0a 20 20 20 20 20 20 20 20 20  , " +..         
19c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19c20 20 20 20 22 73 6b 69 70 70 69 6e 67 2e 2e 2e 22     "skipping..."
19c30 2c 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69  , frameworkVersi
19c40 6f 6e 2c 20 66 69 6c 65 4e 61 6d 65 29 2c 0d 0a  on, fileName),..
19c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19c60 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
19c70 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
19c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19c90 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b         continue;
19ca0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
19cb0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
19cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
19cd0 6f 6f 6c 20 6c 6f 63 61 6c 53 61 76 65 64 20 3d  ool localSaved =
19ce0 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20   false;....     
19cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
19d00 66 20 28 21 63 61 6c 6c 62 61 63 6b 28 0d 0a 20  f (!callback(.. 
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 20 66 69 6c 65 4e             fileN
19d30 61 6d 65 2c 20 69 6e 76 61 72 69 61 6e 74 2c 20  ame, invariant, 
19d40 6e 61 6d 65 2c 20 64 65 73 63 72 69 70 74 69 6f  name, descriptio
19d50 6e 2c 20 74 79 70 65 4e 61 6d 65 2c 0d 0a 20 20  n, typeName,..  
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 20 20 61 73 73 65 6d 62            assemb
19d80 6c 79 4e 61 6d 65 2c 20 63 6c 69 65 6e 74 44 61  lyName, clientDa
19d90 74 61 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62  ta, whatIf, verb
19da0 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ose,..          
19db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19dc0 20 20 72 65 66 20 6c 6f 63 61 6c 53 61 76 65 64    ref localSaved
19dd0 2c 20 72 65 66 20 65 72 72 6f 72 29 29 0d 0a 20  , ref error)).. 
19de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19df0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
19e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
19e10 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
19e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19e30 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
19e40 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20          else..  
19e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19e60 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
19e70 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
19e80 28 6c 6f 63 61 6c 53 61 76 65 64 20 26 26 20 21  (localSaved && !
19e90 73 61 76 65 64 29 0d 0a 20 20 20 20 20 20 20 20  saved)..        
19ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19eb0 20 20 20 20 73 61 76 65 64 20 3d 20 74 72 75 65      saved = true
19ec0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
19ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
19ee0 28 76 65 72 62 6f 73 65 29 0d 0a 20 20 20 20 20  (verbose)..     
19ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19f00 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e         TraceOps.
19f10 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20  Trace(..        
19f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19f30 20 20 20 20 20 20 20 20 54 72 61 63 65 50 72 69          TracePri
19f40 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20 74 72  ority.Lowest, tr
19f50 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72  aceCallback, Str
19f60 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
19f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19f80 20 20 20 20 20 20 20 20 20 20 20 20 20 22 6c 6f               "lo
19f90 63 61 6c 53 61 76 65 64 20 3d 20 7b 30 7d 2c 20  calSaved = {0}, 
19fa0 73 61 76 65 64 20 3d 20 7b 31 7d 22 2c 20 6c 6f  saved = {1}", lo
19fb0 63 61 6c 53 61 76 65 64 2c 0d 0a 20 20 20 20 20  calSaved,..     
19fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19fd0 20 20 20 20 20 20 20 20 20 20 20 73 61 76 65 64             saved
19fe0 29 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72 79  ), traceCategory
19ff0 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
1a000 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
1a010 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
1a020 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
1a030 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
1a040 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20  n true;..       
1a050 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f   }....        //
1a060 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a070 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a080 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a090 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a0a0 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
1a0b0 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
1a0c0 62 6f 6f 6c 20 46 6f 72 45 61 63 68 46 72 61 6d  bool ForEachFram
1a0d0 65 77 6f 72 6b 52 65 67 69 73 74 72 79 28 0d 0a  eworkRegistry(..
1a0e0 20 20 20 20 20 20 20 20 20 20 20 20 46 72 61 6d              Fram
1a0f0 65 77 6f 72 6b 52 65 67 69 73 74 72 79 43 61 6c  eworkRegistryCal
1a100 6c 62 61 63 6b 20 63 61 6c 6c 62 61 63 6b 2c 0d  lback callback,.
1a110 0a 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a  .            obj
1a120 65 63 74 20 63 6c 69 65 6e 74 44 61 74 61 2c 0d  ect clientData,.
1a130 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
1a140 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20  l whatIf,..     
1a150 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62         bool verb
1a160 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ose,..          
1a170 20 20 72 65 66 20 73 74 72 69 6e 67 20 65 72 72    ref string err
1a180 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  or..            
1a190 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
1a1a0 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74            Regist
1a1b0 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 20 3d 20  ryKey rootKey = 
1a1c0 66 72 61 6d 65 77 6f 72 6b 52 6f 6f 74 4b 65 79  frameworkRootKey
1a1d0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
1a1e0 20 69 66 20 28 72 6f 6f 74 4b 65 79 20 3d 3d 20   if (rootKey == 
1a1f0 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
1a200 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
1a210 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69        error = "i
1a220 6e 76 61 6c 69 64 20 72 6f 6f 74 20 6b 65 79 22  nvalid root key"
1a230 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
1a240 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
1a250 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
1a260 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
1a270 66 20 28 21 4f 62 6a 65 63 74 2e 52 65 66 65 72  f (!Object.Refer
1a280 65 6e 63 65 45 71 75 61 6c 73 28 72 6f 6f 74 4b  enceEquals(rootK
1a290 65 79 2c 20 52 65 67 69 73 74 72 79 2e 43 75 72  ey, Registry.Cur
1a2a0 72 65 6e 74 55 73 65 72 29 20 26 26 0d 0a 20 20  rentUser) &&..  
1a2b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 21 4f                !O
1a2c0 62 6a 65 63 74 2e 52 65 66 65 72 65 6e 63 65 45  bject.ReferenceE
1a2d0 71 75 61 6c 73 28 72 6f 6f 74 4b 65 79 2c 20 52  quals(rootKey, R
1a2e0 65 67 69 73 74 72 79 2e 4c 6f 63 61 6c 4d 61 63  egistry.LocalMac
1a2f0 68 69 6e 65 29 29 0d 0a 20 20 20 20 20 20 20 20  hine))..        
1a300 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1a310 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22         error = "
1a320 72 6f 6f 74 20 6b 65 79 20 6d 75 73 74 20 62 65  root key must be
1a330 20 70 65 72 2d 75 73 65 72 20 6f 72 20 70 65 72   per-user or per
1a340 2d 6d 61 63 68 69 6e 65 22 3b 0d 0a 20 20 20 20  -machine";..    
1a350 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
1a360 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
1a370 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
1a380 20 20 20 20 20 20 20 20 69 66 20 28 66 72 61 6d          if (fram
1a390 65 77 6f 72 6b 4e 61 6d 65 4c 69 73 74 20 3d 3d  eworkNameList ==
1a3a0 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
1a3b0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1a3c0 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22         error = "
1a3d0 6e 6f 20 66 72 61 6d 65 77 6f 72 6b 20 6e 61 6d  no framework nam
1a3e0 65 73 20 66 6f 75 6e 64 22 3b 0d 0a 20 20 20 20  es found";..    
1a3f0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
1a400 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
1a410 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
1a420 20 20 20 20 20 20 20 20 69 66 20 28 66 72 61 6d          if (fram
1a430 65 77 6f 72 6b 56 65 72 73 69 6f 6e 4d 61 70 20  eworkVersionMap 
1a440 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
1a450 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1a460 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
1a470 20 22 6e 6f 20 66 72 61 6d 65 77 6f 72 6b 20 76   "no framework v
1a480 65 72 73 69 6f 6e 73 20 66 6f 75 6e 64 22 3b 0d  ersions found";.
1a490 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1a4a0 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
1a4b0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
1a4c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
1a4d0 28 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 4c 69 73  (platformNameLis
1a4e0 74 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  t == null)..    
1a4f0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
1a500 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
1a510 20 3d 20 22 6e 6f 20 70 6c 61 74 66 6f 72 6d 20   = "no platform 
1a520 6e 61 6d 65 73 20 66 6f 75 6e 64 22 3b 0d 0a 20  names found";.. 
1a530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
1a540 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
1a550 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
1a560 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 66             if (f
1a570 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 4c 69 73 74  rameworkNameList
1a580 2e 43 6f 75 6e 74 20 21 3d 20 70 6c 61 74 66 6f  .Count != platfo
1a590 72 6d 4e 61 6d 65 4c 69 73 74 2e 43 6f 75 6e 74  rmNameList.Count
1a5a0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
1a5b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1a5c0 20 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67    error = String
1a5d0 2e 46 6f 72 6d 61 74 28 22 66 72 61 6d 65 77 6f  .Format("framewo
1a5e0 72 6b 20 6e 61 6d 65 20 63 6f 75 6e 74 20 7b 30  rk name count {0
1a5f0 7d 20 64 6f 65 73 20 6e 6f 74 20 22 20 2b 0d 0a  } does not " +..
1a600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a610 20 20 20 20 22 6d 61 74 63 68 20 70 6c 61 74 66      "match platf
1a620 6f 72 6d 20 6e 61 6d 65 20 63 6f 75 6e 74 20 7b  orm name count {
1a630 31 7d 22 2c 20 66 72 61 6d 65 77 6f 72 6b 4e 61  1}", frameworkNa
1a640 6d 65 4c 69 73 74 2e 43 6f 75 6e 74 2c 0d 0a 20  meList.Count,.. 
1a650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a660 20 20 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 4c     platformNameL
1a670 69 73 74 2e 43 6f 75 6e 74 29 3b 0d 0a 0d 0a 20  ist.Count);.... 
1a680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
1a690 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
1a6a0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
1a6b0 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 20 28             for (
1a6c0 69 6e 74 20 69 6e 64 65 78 20 3d 20 30 3b 20 69  int index = 0; i
1a6d0 6e 64 65 78 20 3c 20 66 72 61 6d 65 77 6f 72 6b  ndex < framework
1a6e0 4e 61 6d 65 4c 69 73 74 2e 43 6f 75 6e 74 3b 20  NameList.Count; 
1a6f0 69 6e 64 65 78 2b 2b 29 0d 0a 20 20 20 20 20 20  index++)..      
1a700 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1a710 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
1a720 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
1a730 4e 4f 54 45 3a 20 47 72 61 62 20 74 68 65 20 6e  NOTE: Grab the n
1a740 61 6d 65 20 6f 66 20 74 68 65 20 66 72 61 6d 65  ame of the frame
1a750 77 6f 72 6b 20 28 65 2e 67 2e 20 22 2e 4e 45 54  work (e.g. ".NET
1a760 46 72 61 6d 65 77 6f 72 6b 22 29 0d 0a 20 20 20  Framework")..   
1a770 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
1a780 20 20 20 20 20 20 61 6e 64 20 74 68 65 20 6e 61        and the na
1a790 6d 65 20 6f 66 20 74 68 65 20 70 6c 61 74 66 6f  me of the platfo
1a7a0 72 6d 20 28 65 2e 67 2e 20 22 57 69 6e 64 6f 77  rm (e.g. "Window
1a7b0 73 43 45 22 29 2e 0d 0a 20 20 20 20 20 20 20 20  sCE")...        
1a7c0 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
1a7d0 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
1a7e0 6e 67 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65  ng frameworkName
1a7f0 20 3d 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65   = frameworkName
1a800 4c 69 73 74 5b 69 6e 64 65 78 5d 3b 0d 0a 20 20  List[index];..  
1a810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
1a820 72 69 6e 67 20 70 6c 61 74 66 6f 72 6d 4e 61 6d  ring platformNam
1a830 65 20 3d 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65  e = platformName
1a840 4c 69 73 74 5b 69 6e 64 65 78 5d 3b 0d 0a 0d 0a  List[index];....
1a850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a860 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
1a870 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 47 72 61      // NOTE: Gra
1a880 62 20 74 68 65 20 73 75 70 70 6f 72 74 65 64 20  b the supported 
1a890 76 65 72 73 69 6f 6e 73 20 6f 66 20 74 68 69 73  versions of this
1a8a0 20 70 61 72 74 69 63 75 6c 61 72 0d 0a 20 20 20   particular..   
1a8b0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
1a8c0 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 2e        framework.
1a8d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1a8e0 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
1a8f0 20 20 20 20 20 20 56 65 72 73 69 6f 6e 4c 69 73        VersionLis
1a900 74 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69  t frameworkVersi
1a910 6f 6e 4c 69 73 74 3b 0d 0a 0d 0a 20 20 20 20 20  onList;....     
1a920 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21             if (!
1a930 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e  frameworkVersion
1a940 4d 61 70 2e 54 72 79 47 65 74 56 61 6c 75 65 28  Map.TryGetValue(
1a950 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1a960 20 20 20 20 20 20 20 20 20 20 66 72 61 6d 65 77            framew
1a970 6f 72 6b 4e 61 6d 65 2c 20 6f 75 74 20 66 72 61  orkName, out fra
1a980 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 4c 69 73  meworkVersionLis
1a990 74 29 20 7c 7c 0d 0a 20 20 20 20 20 20 20 20 20  t) ||..         
1a9a0 20 20 20 20 20 20 20 20 20 20 20 28 66 72 61 6d             (fram
1a9b0 65 77 6f 72 6b 56 65 72 73 69 6f 6e 4c 69 73 74  eworkVersionList
1a9c0 20 3d 3d 20 6e 75 6c 6c 29 29 0d 0a 20 20 20 20   == null))..    
1a9d0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
1a9e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a9f0 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20     continue;..  
1aa00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
1aa10 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1aa20 20 20 20 66 6f 72 65 61 63 68 20 28 56 65 72 73     foreach (Vers
1aa30 69 6f 6e 20 66 72 61 6d 65 77 6f 72 6b 56 65 72  ion frameworkVer
1aa40 73 69 6f 6e 20 69 6e 20 66 72 61 6d 65 77 6f 72  sion in framewor
1aa50 6b 56 65 72 73 69 6f 6e 4c 69 73 74 29 0d 0a 20  kVersionList).. 
1aa60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
1aa70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1aa80 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 54        TraceOps.T
1aa90 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20  race(..         
1aaa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
1aab0 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77  racePriority.Low
1aac0 65 72 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63  er, traceCallbac
1aad0 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  k, String.Format
1aae0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
1aaf0 20 20 20 20 20 20 20 20 20 20 20 22 66 72 61 6d             "fram
1ab00 65 77 6f 72 6b 4e 61 6d 65 20 3d 20 7b 30 7d 2c  eworkName = {0},
1ab10 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f   frameworkVersio
1ab20 6e 20 3d 20 7b 31 7d 2c 20 22 20 2b 0d 0a 20 20  n = {1}, " +..  
1ab30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ab40 20 20 20 20 20 20 22 70 6c 61 74 66 6f 72 6d 4e        "platformN
1ab50 61 6d 65 20 3d 20 7b 32 7d 22 2c 20 46 6f 72 44  ame = {2}", ForD
1ab60 69 73 70 6c 61 79 28 66 72 61 6d 65 77 6f 72 6b  isplay(framework
1ab70 4e 61 6d 65 29 2c 0d 0a 20 20 20 20 20 20 20 20  Name),..        
1ab80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ab90 46 6f 72 44 69 73 70 6c 61 79 28 66 72 61 6d 65  ForDisplay(frame
1aba0 77 6f 72 6b 56 65 72 73 69 6f 6e 29 2c 0d 0a 20  workVersion),.. 
1abb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1abc0 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61         ForDispla
1abd0 79 28 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 29 29  y(platformName))
1abe0 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29  , traceCategory)
1abf0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
1ac00 20 20 20 20 20 20 20 20 20 69 66 20 28 21 48 61           if (!Ha
1ac10 76 65 46 72 61 6d 65 77 6f 72 6b 28 0d 0a 20 20  veFramework(..  
1ac20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ac30 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65            rootKe
1ac40 79 2c 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65  y, frameworkName
1ac50 2c 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69  , frameworkVersi
1ac60 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on,..           
1ac70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ac80 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c 20 77   platformName, w
1ac90 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 29  hatIf, verbose))
1aca0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1acb0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1acc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1acd0 20 54 72 61 63 65 4f 70 73 2e 54 72 61 63 65 28   TraceOps.Trace(
1ace0 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f  TracePriority.Lo
1acf0 77 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b  w, traceCallback
1ad00 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
1ad10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
1ad20 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b 20 6e  .NET Framework n
1ad30 6f 74 20 66 6f 75 6e 64 2c 20 73 6b 69 70 70 69  ot found, skippi
1ad40 6e 67 2e 2e 2e 22 2c 0d 0a 20 20 20 20 20 20 20  ng...",..       
1ad50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ad60 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
1ad70 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
1ad80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ad90 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20  continue;..     
1ada0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
1adb0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1adc0 20 20 20 20 20 20 20 20 69 66 20 28 63 61 6c 6c          if (call
1add0 62 61 63 6b 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  back == null).. 
1ade0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1adf0 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b         continue;
1ae00 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1ae10 20 20 20 20 20 20 20 20 69 66 20 28 21 63 61 6c          if (!cal
1ae20 6c 62 61 63 6b 28 0d 0a 20 20 20 20 20 20 20 20  lback(..        
1ae30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ae40 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 66 72 61      rootKey, fra
1ae50 6d 65 77 6f 72 6b 4e 61 6d 65 2c 20 66 72 61 6d  meworkName, fram
1ae60 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 0d 0a 20  eworkVersion,.. 
1ae70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ae80 20 20 20 20 20 20 20 20 20 20 20 70 6c 61 74 66             platf
1ae90 6f 72 6d 4e 61 6d 65 2c 20 63 6c 69 65 6e 74 44  ormName, clientD
1aea0 61 74 61 2c 20 77 68 61 74 49 66 2c 20 76 65 72  ata, whatIf, ver
1aeb0 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  bose,..         
1aec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aed0 20 20 20 72 65 66 20 65 72 72 6f 72 29 29 0d 0a     ref error))..
1aee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aef0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1af00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
1af10 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
1af20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1af30 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
1af40 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
1af50 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
1af60 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65       return true
1af70 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  ;..        }..  
1af80 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
1af90 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
1afa0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1afb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1afc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1afd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1afe0 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23  ///....        #
1aff0 72 65 67 69 6f 6e 20 50 65 72 2d 56 69 73 75 61  region Per-Visua
1b000 6c 20 53 74 75 64 69 6f 20 56 65 72 73 69 6f 6e  l Studio Version
1b010 20 48 61 6e 64 6c 69 6e 67 0d 0a 20 20 20 20 20   Handling..     
1b020 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
1b030 63 20 76 6f 69 64 20 49 6e 69 74 69 61 6c 69 7a  c void Initializ
1b040 65 41 6c 6c 56 73 56 65 72 73 69 6f 6e 73 28 0d  eAllVsVersions(.
1b050 0a 20 20 20 20 20 20 20 20 20 20 20 20 43 6f 6e  .            Con
1b060 66 69 67 75 72 61 74 69 6f 6e 20 63 6f 6e 66 69  figuration confi
1b070 67 75 72 61 74 69 6f 6e 0d 0a 20 20 20 20 20 20  guration..      
1b080 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
1b090 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1b0a0 69 66 20 28 76 73 52 6f 6f 74 4b 65 79 20 3d 3d  if (vsRootKey ==
1b0b0 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
1b0c0 20 20 20 20 20 20 20 20 76 73 52 6f 6f 74 4b 65          vsRootKe
1b0d0 79 20 3d 20 52 65 67 69 73 74 72 79 2e 4c 6f 63  y = Registry.Loc
1b0e0 61 6c 4d 61 63 68 69 6e 65 3b 0d 0a 0d 0a 20 20  alMachine;....  
1b0f0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76 73            if (vs
1b100 41 64 6f 4e 65 74 54 65 63 68 6e 6f 6c 6f 67 79  AdoNetTechnology
1b110 49 64 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  Id == null)..   
1b120 20 20 20 20 20 20 20 20 20 20 20 20 20 76 73 41               vsA
1b130 64 6f 4e 65 74 54 65 63 68 6e 6f 6c 6f 67 79 49  doNetTechnologyI
1b140 64 20 3d 20 6e 65 77 20 47 75 69 64 28 0d 0a 20  d = new Guid(.. 
1b150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b160 20 20 20 22 37 37 41 42 39 41 39 44 2d 37 38 42     "77AB9A9D-78B
1b170 39 2d 34 42 41 37 2d 39 31 41 43 2d 38 37 33 46  9-4BA7-91AC-873F
1b180 35 33 33 38 46 31 44 32 22 29 3b 0d 0a 0d 0a 20  5338F1D2");.... 
1b190 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76             if (v
1b1a0 73 50 61 63 6b 61 67 65 49 64 20 3d 3d 20 6e 75  sPackageId == nu
1b1b0 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
1b1c0 20 20 20 20 20 76 73 50 61 63 6b 61 67 65 49 64       vsPackageId
1b1d0 20 3d 20 6e 65 77 20 47 75 69 64 28 0d 0a 20 20   = new Guid(..  
1b1e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b1f0 20 20 22 44 43 42 45 36 43 38 44 2d 30 45 35 37    "DCBE6C8D-0E57
1b200 2d 34 30 39 39 2d 41 31 38 33 2d 39 38 46 46 37  -4099-A183-98FF7
1b210 34 43 36 34 44 39 43 22 29 3b 0d 0a 0d 0a 20 20  4C64D9C");....  
1b220 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76 73            if (vs
1b230 53 65 72 76 69 63 65 49 64 20 3d 3d 20 6e 75 6c  ServiceId == nul
1b240 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
1b250 20 20 20 20 76 73 53 65 72 76 69 63 65 49 64 20      vsServiceId 
1b260 3d 20 6e 65 77 20 47 75 69 64 28 0d 0a 20 20 20  = new Guid(..   
1b270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b280 20 22 44 43 42 45 36 43 38 44 2d 30 45 35 37 2d   "DCBE6C8D-0E57-
1b290 34 30 39 39 2d 41 31 38 33 2d 39 38 46 46 37 34  4099-A183-98FF74
1b2a0 43 36 34 44 39 44 22 29 3b 0d 0a 0d 0a 20 20 20  C64D9D");....   
1b2b0 20 20 20 20 20 20 20 20 20 69 66 20 28 76 73 44           if (vsD
1b2c0 61 74 61 53 6f 75 72 63 65 73 49 64 20 3d 3d 20  ataSourcesId == 
1b2d0 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
1b2e0 20 20 20 20 20 20 20 76 73 44 61 74 61 53 6f 75         vsDataSou
1b2f0 72 63 65 73 49 64 20 3d 20 6e 65 77 20 47 75 69  rcesId = new Gui
1b300 64 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d(..            
1b310 20 20 20 20 20 20 20 20 22 30 45 42 41 41 42 36          "0EBAAB6
1b320 45 2d 43 41 38 30 2d 34 42 34 41 2d 38 44 44 46  E-CA80-4B4A-8DDF
1b330 2d 43 42 45 36 42 46 30 35 38 43 37 31 22 29 3b  -CBE6BF058C71");
1b340 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1b350 69 66 20 28 76 73 44 61 74 61 50 72 6f 76 69 64  if (vsDataProvid
1b360 65 72 49 64 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  erId == null).. 
1b370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76                 v
1b380 73 44 61 74 61 50 72 6f 76 69 64 65 72 49 64 20  sDataProviderId 
1b390 3d 20 6e 65 77 20 47 75 69 64 28 0d 0a 20 20 20  = new Guid(..   
1b3a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b3b0 20 22 30 45 42 41 41 42 36 45 2d 43 41 38 30 2d   "0EBAAB6E-CA80-
1b3c0 34 42 34 41 2d 38 44 44 46 2d 43 42 45 36 42 46  4B4A-8DDF-CBE6BF
1b3d0 30 35 38 43 37 30 22 29 3b 0d 0a 0d 0a 20 20 20  058C70");....   
1b3e0 20 20 20 20 20 20 20 20 20 69 66 20 28 76 73 56           if (vsV
1b3f0 65 72 73 69 6f 6e 4c 69 73 74 20 3d 3d 20 6e 75  ersionList == nu
1b400 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
1b410 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1b420 20 20 20 20 76 73 56 65 72 73 69 6f 6e 4c 69 73      vsVersionLis
1b430 74 20 3d 20 6e 65 77 20 56 65 72 73 69 6f 6e 4c  t = new VersionL
1b440 69 73 74 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ist();....      
1b450 20 20 20 20 20 20 20 20 20 20 2f 2f 20 76 73 56            // vsV
1b460 65 72 73 69 6f 6e 4c 69 73 74 2e 41 64 64 28 6e  ersionList.Add(n
1b470 65 77 20 56 65 72 73 69 6f 6e 28 38 2c 20 30 29  ew Version(8, 0)
1b480 29 3b 20 2f 2f 20 56 69 73 75 61 6c 20 53 74 75  ); // Visual Stu
1b490 64 69 6f 20 32 30 30 35 0d 0a 0d 0a 20 20 20 20  dio 2005....    
1b4a0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
1b4b0 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d  (configuration =
1b4c0 3d 20 6e 75 6c 6c 29 20 7c 7c 20 21 63 6f 6e 66  = null) || !conf
1b4d0 69 67 75 72 61 74 69 6f 6e 2e 4e 6f 56 73 32 30  iguration.NoVs20
1b4e0 30 38 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  08)..           
1b4f0 20 20 20 20 20 20 20 20 20 76 73 56 65 72 73 69           vsVersi
1b500 6f 6e 4c 69 73 74 2e 41 64 64 28 6e 65 77 20 56  onList.Add(new V
1b510 65 72 73 69 6f 6e 28 39 2c 20 30 29 29 3b 20 2f  ersion(9, 0)); /
1b520 2f 20 56 69 73 75 61 6c 20 53 74 75 64 69 6f 20  / Visual Studio 
1b530 32 30 30 38 0d 0a 0d 0a 20 20 20 20 20 20 20 20  2008....        
1b540 20 20 20 20 20 20 20 20 69 66 20 28 28 63 6f 6e          if ((con
1b550 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20 6e 75  figuration == nu
1b560 6c 6c 29 20 7c 7c 20 21 63 6f 6e 66 69 67 75 72  ll) || !configur
1b570 61 74 69 6f 6e 2e 4e 6f 56 73 32 30 31 30 29 0d  ation.NoVs2010).
1b580 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1b590 20 20 20 20 20 76 73 56 65 72 73 69 6f 6e 4c 69       vsVersionLi
1b5a0 73 74 2e 41 64 64 28 6e 65 77 20 56 65 72 73 69  st.Add(new Versi
1b5b0 6f 6e 28 31 30 2c 20 30 29 29 3b 2f 2f 20 56 69  on(10, 0));// Vi
1b5c0 73 75 61 6c 20 53 74 75 64 69 6f 20 32 30 31 30  sual Studio 2010
1b5d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
1b5e0 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
1b5f0 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
1b600 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b610 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b620 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b630 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
1b640 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
1b650 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 48 61 76   static bool Hav
1b660 65 56 73 56 65 72 73 69 6f 6e 28 0d 0a 20 20 20  eVsVersion(..   
1b670 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72           Registr
1b680 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20  yKey rootKey,.. 
1b690 20 20 20 20 20 20 20 20 20 20 20 56 65 72 73 69             Versi
1b6a0 6f 6e 20 76 73 56 65 72 73 69 6f 6e 2c 0d 0a 20  on vsVersion,.. 
1b6b0 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
1b6c0 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20  whatIf,..       
1b6d0 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73       bool verbos
1b6e0 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29  e..            )
1b6f0 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
1b700 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
1b710 66 6f 72 6d 61 74 20 3d 20 22 53 6f 66 74 77 61  format = "Softwa
1b720 72 65 5c 5c 4d 69 63 72 6f 73 6f 66 74 5c 5c 56  re\\Microsoft\\V
1b730 69 73 75 61 6c 53 74 75 64 69 6f 5c 5c 7b 30 7d  isualStudio\\{0}
1b740 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ";..            
1b750 73 74 72 69 6e 67 20 6b 65 79 4e 61 6d 65 20 3d  string keyName =
1b760 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 66   String.Format(f
1b770 6f 72 6d 61 74 2c 20 76 73 56 65 72 73 69 6f 6e  ormat, vsVersion
1b780 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
1b790 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67    using (MockReg
1b7a0 69 73 74 72 79 4b 65 79 20 6b 65 79 20 3d 20 52  istryKey key = R
1b7b0 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 4f 70  egistryHelper.Op
1b7c0 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20  enSubKey(..     
1b7d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
1b7e0 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e 61 6d 65 2c  ootKey, keyName,
1b7f0 20 66 61 6c 73 65 2c 20 77 68 61 74 49 66 2c 20   false, whatIf, 
1b800 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20  verbose))..     
1b810 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
1b820 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6b 65            if (ke
1b830 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  y == null)..    
1b840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b850 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d  return false;...
1b860 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1b870 20 6f 62 6a 65 63 74 20 76 61 6c 75 65 20 3d 20   object value = 
1b880 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 47  RegistryHelper.G
1b890 65 74 56 61 6c 75 65 28 0d 0a 20 20 20 20 20 20  etValue(..      
1b8a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65                ke
1b8b0 79 2c 20 22 49 6e 73 74 61 6c 6c 44 69 72 22 2c  y, "InstallDir",
1b8c0 20 6e 75 6c 6c 2c 20 77 68 61 74 49 66 2c 20 76   null, whatIf, v
1b8d0 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20  erbose);....    
1b8e0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
1b8f0 21 28 76 61 6c 75 65 20 69 73 20 73 74 72 69 6e  !(value is strin
1b900 67 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  g))..           
1b910 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
1b920 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  false;....      
1b930 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
1b940 20 64 69 72 65 63 74 6f 72 79 20 3d 20 28 73 74   directory = (st
1b950 72 69 6e 67 29 76 61 6c 75 65 3b 0d 0a 0d 0a 20  ring)value;.... 
1b960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
1b970 66 20 28 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c  f (String.IsNull
1b980 4f 72 45 6d 70 74 79 28 64 69 72 65 63 74 6f 72  OrEmpty(director
1b990 79 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  y))..           
1b9a0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
1b9b0 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  false;....      
1b9c0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21 44            if (!D
1b9d0 69 72 65 63 74 6f 72 79 2e 45 78 69 73 74 73 28  irectory.Exists(
1b9e0 64 69 72 65 63 74 6f 72 79 29 29 0d 0a 20 20 20  directory))..   
1b9f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ba00 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
1ba10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1ba20 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a    return true;..
1ba30 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
1ba40 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
1ba50 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
1ba60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ba70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ba80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ba90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
1baa0 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
1bab0 74 61 74 69 63 20 62 6f 6f 6c 20 46 6f 72 45 61  tatic bool ForEa
1bac0 63 68 56 73 56 65 72 73 69 6f 6e 52 65 67 69 73  chVsVersionRegis
1bad0 74 72 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  try(..          
1bae0 20 20 56 69 73 75 61 6c 53 74 75 64 69 6f 52 65    VisualStudioRe
1baf0 67 69 73 74 72 79 43 61 6c 6c 62 61 63 6b 20 63  gistryCallback c
1bb00 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20  allback,..      
1bb10 20 20 20 20 20 20 47 75 69 64 20 70 61 63 6b 61        Guid packa
1bb20 67 65 49 64 2c 0d 0a 20 20 20 20 20 20 20 20 20  geId,..         
1bb30 20 20 20 47 75 69 64 20 73 65 72 76 69 63 65 49     Guid serviceI
1bb40 64 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d,..            
1bb50 47 75 69 64 20 64 61 74 61 53 6f 75 72 63 65 49  Guid dataSourceI
1bb60 64 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d,..            
1bb70 47 75 69 64 20 64 61 74 61 50 72 6f 76 69 64 65  Guid dataProvide
1bb80 72 49 64 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  rId,..          
1bb90 20 20 6f 62 6a 65 63 74 20 63 6c 69 65 6e 74 44    object clientD
1bba0 61 74 61 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ata,..          
1bbb0 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a    bool whatIf,..
1bbc0 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
1bbd0 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20   verbose,..     
1bbe0 20 20 20 20 20 20 20 72 65 66 20 73 74 72 69 6e         ref strin
1bbf0 67 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20  g error..       
1bc00 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
1bc10 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 52  {..            R
1bc20 65 67 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b  egistryKey rootK
1bc30 65 79 20 3d 20 76 73 52 6f 6f 74 4b 65 79 3b 0d  ey = vsRootKey;.
1bc40 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
1bc50 66 20 28 72 6f 6f 74 4b 65 79 20 3d 3d 20 6e 75  f (rootKey == nu
1bc60 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
1bc70 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1bc80 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69 6e 76      error = "inv
1bc90 61 6c 69 64 20 72 6f 6f 74 20 6b 65 79 22 3b 0d  alid root key";.
1bca0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1bcb0 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
1bcc0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
1bcd0 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
1bce0 28 21 4f 62 6a 65 63 74 2e 52 65 66 65 72 65 6e  (!Object.Referen
1bcf0 63 65 45 71 75 61 6c 73 28 72 6f 6f 74 4b 65 79  ceEquals(rootKey
1bd00 2c 20 52 65 67 69 73 74 72 79 2e 43 75 72 72 65  , Registry.Curre
1bd10 6e 74 55 73 65 72 29 20 26 26 0d 0a 20 20 20 20  ntUser) &&..    
1bd20 20 20 20 20 20 20 20 20 20 20 20 20 21 4f 62 6a              !Obj
1bd30 65 63 74 2e 52 65 66 65 72 65 6e 63 65 45 71 75  ect.ReferenceEqu
1bd40 61 6c 73 28 72 6f 6f 74 4b 65 79 2c 20 52 65 67  als(rootKey, Reg
1bd50 69 73 74 72 79 2e 4c 6f 63 61 6c 4d 61 63 68 69  istry.LocalMachi
1bd60 6e 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ne))..          
1bd70 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
1bd80 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 72 6f       error = "ro
1bd90 6f 74 20 6b 65 79 20 6d 75 73 74 20 62 65 20 70  ot key must be p
1bda0 65 72 2d 75 73 65 72 20 6f 72 20 70 65 72 2d 6d  er-user or per-m
1bdb0 61 63 68 69 6e 65 22 3b 0d 0a 20 20 20 20 20 20  achine";..      
1bdc0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
1bdd0 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
1bde0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
1bdf0 20 20 20 20 20 20 69 66 20 28 76 73 56 65 72 73        if (vsVers
1be00 69 6f 6e 4c 69 73 74 20 3d 3d 20 6e 75 6c 6c 29  ionList == null)
1be10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
1be20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1be30 20 65 72 72 6f 72 20 3d 20 22 6e 6f 20 56 53 20   error = "no VS 
1be40 76 65 72 73 69 6f 6e 73 20 66 6f 75 6e 64 22 3b  versions found";
1be50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1be60 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
1be70 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
1be80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 66 6f  ..            fo
1be90 72 65 61 63 68 20 28 56 65 72 73 69 6f 6e 20 76  reach (Version v
1bea0 73 56 65 72 73 69 6f 6e 20 69 6e 20 76 73 56 65  sVersion in vsVe
1beb0 72 73 69 6f 6e 4c 69 73 74 29 0d 0a 20 20 20 20  rsionList)..    
1bec0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
1bed0 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
1bee0 4f 70 73 2e 54 72 61 63 65 28 0d 0a 20 20 20 20  Ops.Trace(..    
1bef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bf00 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f  TracePriority.Lo
1bf10 77 65 72 2c 20 74 72 61 63 65 43 61 6c 6c 62 61  wer, traceCallba
1bf20 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ck, String.Forma
1bf30 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
1bf40 20 20 20 20 20 20 20 20 22 76 73 56 65 72 73 69          "vsVersi
1bf50 6f 6e 20 3d 20 7b 30 7d 22 2c 20 46 6f 72 44 69  on = {0}", ForDi
1bf60 73 70 6c 61 79 28 76 73 56 65 72 73 69 6f 6e 29  splay(vsVersion)
1bf70 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
1bf80 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74          traceCat
1bf90 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
1bfa0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21             if (!
1bfb0 48 61 76 65 56 73 56 65 72 73 69 6f 6e 28 72 6f  HaveVsVersion(ro
1bfc0 6f 74 4b 65 79 2c 20 76 73 56 65 72 73 69 6f 6e  otKey, vsVersion
1bfd0 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73  , whatIf, verbos
1bfe0 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e))..           
1bff0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1c000 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
1c010 65 4f 70 73 2e 54 72 61 63 65 28 54 72 61 63 65  eOps.Trace(Trace
1c020 50 72 69 6f 72 69 74 79 2e 4c 6f 77 2c 20 74 72  Priority.Low, tr
1c030 61 63 65 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20  aceCallback,..  
1c040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c050 20 20 20 20 20 20 22 56 69 73 75 61 6c 20 53 74        "Visual St
1c060 75 64 69 6f 20 76 65 72 73 69 6f 6e 20 6e 6f 74  udio version not
1c070 20 66 6f 75 6e 64 2c 20 73 6b 69 70 70 69 6e 67   found, skipping
1c080 2e 2e 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  ...",..         
1c090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
1c0a0 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
1c0b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1c0c0 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d        continue;.
1c0d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1c0e0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
1c0f0 20 20 20 20 20 20 69 66 20 28 63 61 6c 6c 62 61        if (callba
1c100 63 6b 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ck == null)..   
1c110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c120 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 0d 0a 20 20   continue;....  
1c130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
1c140 20 28 21 63 61 6c 6c 62 61 63 6b 28 0d 0a 20 20   (!callback(..  
1c150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c160 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 76        rootKey, v
1c170 73 56 65 72 73 69 6f 6e 2c 20 70 61 63 6b 61 67  sVersion, packag
1c180 65 49 64 2c 20 73 65 72 76 69 63 65 49 64 2c 0d  eId, serviceId,.
1c190 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1c1a0 20 20 20 20 20 20 20 20 20 64 61 74 61 53 6f 75           dataSou
1c1b0 72 63 65 49 64 2c 20 64 61 74 61 50 72 6f 76 69  rceId, dataProvi
1c1c0 64 65 72 49 64 2c 20 63 6c 69 65 6e 74 44 61 74  derId, clientDat
1c1d0 61 2c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20  a, whatIf,..    
1c1e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c1f0 20 20 20 20 76 65 72 62 6f 73 65 2c 20 72 65 66      verbose, ref
1c200 20 65 72 72 6f 72 29 29 0d 0a 20 20 20 20 20 20   error))..      
1c210 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1c220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c230 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
1c240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c250 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
1c260 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1c270 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20  return true;..  
1c280 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
1c290 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
1c2a0 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
1c2b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c2c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c2d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c2e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
1c2f0 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f  ..        #regio
1c300 6e 20 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20  n Configuration 
1c310 46 69 6c 65 20 48 61 6e 64 6c 69 6e 67 0d 0a 20  File Handling.. 
1c320 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
1c330 74 61 74 69 63 20 62 6f 6f 6c 20 41 64 64 44 62  tatic bool AddDb
1c340 50 72 6f 76 69 64 65 72 46 61 63 74 6f 72 79 28  ProviderFactory(
1c350 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
1c360 72 69 6e 67 20 66 69 6c 65 4e 61 6d 65 2c 0d 0a  ring fileName,..
1c370 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
1c380 6e 67 20 69 6e 76 61 72 69 61 6e 74 2c 0d 0a 20  ng invariant,.. 
1c390 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
1c3a0 67 20 6e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20  g name,..       
1c3b0 20 20 20 20 20 73 74 72 69 6e 67 20 64 65 73 63       string desc
1c3c0 72 69 70 74 69 6f 6e 2c 0d 0a 20 20 20 20 20 20  ription,..      
1c3d0 20 20 20 20 20 20 73 74 72 69 6e 67 20 74 79 70        string typ
1c3e0 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20  eName,..        
1c3f0 20 20 20 20 41 73 73 65 6d 62 6c 79 4e 61 6d 65      AssemblyName
1c400 20 61 73 73 65 6d 62 6c 79 4e 61 6d 65 2c 0d 0a   assemblyName,..
1c410 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
1c420 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20   whatIf,..      
1c430 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f        bool verbo
1c440 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se,..           
1c450 20 72 65 66 20 62 6f 6f 6c 20 73 61 76 65 64 2c   ref bool saved,
1c460 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
1c470 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a  f string error..
1c480 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
1c490 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
1c4a0 20 20 20 20 20 20 62 6f 6f 6c 20 64 69 72 74 79        bool dirty
1c4b0 20 3d 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20   = false;..     
1c4c0 20 20 20 20 20 20 20 58 6d 6c 44 6f 63 75 6d 65         XmlDocume
1c4d0 6e 74 20 64 6f 63 75 6d 65 6e 74 20 3d 20 6e 65  nt document = ne
1c4e0 77 20 58 6d 6c 44 6f 63 75 6d 65 6e 74 28 29 3b  w XmlDocument();
1c4f0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1c500 64 6f 63 75 6d 65 6e 74 2e 50 72 65 73 65 72 76  document.Preserv
1c510 65 57 68 69 74 65 73 70 61 63 65 20 3d 20 74 72  eWhitespace = tr
1c520 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
1c530 20 64 6f 63 75 6d 65 6e 74 2e 4c 6f 61 64 28 66   document.Load(f
1c540 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20  ileName);....   
1c550 20 20 20 20 20 20 20 20 20 58 6d 6c 45 6c 65 6d           XmlElem
1c560 65 6e 74 20 65 6c 65 6d 65 6e 74 20 3d 20 64 6f  ent element = do
1c570 63 75 6d 65 6e 74 2e 53 65 6c 65 63 74 53 69 6e  cument.SelectSin
1c580 67 6c 65 4e 6f 64 65 28 53 74 72 69 6e 67 2e 46  gleNode(String.F
1c590 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
1c5a0 20 20 20 20 20 20 20 20 58 50 61 74 68 46 6f 72          XPathFor
1c5b0 41 64 64 45 6c 65 6d 65 6e 74 2c 20 69 6e 76 61  AddElement, inva
1c5c0 72 69 61 6e 74 29 29 20 61 73 20 58 6d 6c 45 6c  riant)) as XmlEl
1c5d0 65 6d 65 6e 74 3b 0d 0a 0d 0a 20 20 20 20 20 20  ement;....      
1c5e0 20 20 20 20 20 20 69 66 20 28 65 6c 65 6d 65 6e        if (elemen
1c5f0 74 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  t == null)..    
1c600 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
1c610 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
1c620 67 5b 5d 20 65 6c 65 6d 65 6e 74 4e 61 6d 65 73  g[] elementNames
1c630 20 3d 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20   = {..          
1c640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 73                "s
1c650 79 73 74 65 6d 2e 64 61 74 61 22 2c 20 22 44 62  ystem.data", "Db
1c660 50 72 6f 76 69 64 65 72 46 61 63 74 6f 72 69 65  ProviderFactorie
1c670 73 22 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s"..            
1c680 20 20 20 20 20 20 20 20 7d 3b 0d 0a 0d 0a 20 20          };....  
1c690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 58 6d                Xm
1c6a0 6c 45 6c 65 6d 65 6e 74 20 70 72 65 76 69 6f 75  lElement previou
1c6b0 73 45 6c 65 6d 65 6e 74 20 3d 0d 0a 20 20 20 20  sElement =..    
1c6c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c6d0 64 6f 63 75 6d 65 6e 74 2e 44 6f 63 75 6d 65 6e  document.Documen
1c6e0 74 45 6c 65 6d 65 6e 74 3b 20 2f 2a 20 63 6f 6e  tElement; /* con
1c6f0 66 69 67 75 72 61 74 69 6f 6e 20 2a 2f 0d 0a 0d  figuration */...
1c700 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1c710 20 66 6f 72 65 61 63 68 20 28 73 74 72 69 6e 67   foreach (string
1c720 20 65 6c 65 6d 65 6e 74 4e 61 6d 65 20 69 6e 20   elementName in 
1c730 65 6c 65 6d 65 6e 74 4e 61 6d 65 73 29 0d 0a 20  elementNames).. 
1c740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
1c750 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1c760 20 20 20 20 20 20 65 6c 65 6d 65 6e 74 20 3d 20        element = 
1c770 70 72 65 76 69 6f 75 73 45 6c 65 6d 65 6e 74 2e  previousElement.
1c780 53 65 6c 65 63 74 53 69 6e 67 6c 65 4e 6f 64 65  SelectSingleNode
1c790 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
1c7a0 20 20 20 20 20 20 20 20 20 20 20 65 6c 65 6d 65             eleme
1c7b0 6e 74 4e 61 6d 65 29 20 61 73 20 58 6d 6c 45 6c  ntName) as XmlEl
1c7c0 65 6d 65 6e 74 3b 0d 0a 0d 0a 20 20 20 20 20 20  ement;....      
1c7d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
1c7e0 20 28 65 6c 65 6d 65 6e 74 20 3d 3d 20 6e 75 6c   (element == nul
1c7f0 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
1c800 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
1c810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c820 20 20 20 65 6c 65 6d 65 6e 74 20 3d 20 64 6f 63     element = doc
1c830 75 6d 65 6e 74 2e 43 72 65 61 74 65 45 6c 65 6d  ument.CreateElem
1c840 65 6e 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ent(..          
1c850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c860 20 20 65 6c 65 6d 65 6e 74 4e 61 6d 65 2c 20 53    elementName, S
1c870 74 72 69 6e 67 2e 45 6d 70 74 79 29 3b 0d 0a 0d  tring.Empty);...
1c880 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1c890 20 20 20 20 20 20 20 20 20 70 72 65 76 69 6f 75           previou
1c8a0 73 45 6c 65 6d 65 6e 74 2e 41 70 70 65 6e 64 43  sElement.AppendC
1c8b0 68 69 6c 64 28 65 6c 65 6d 65 6e 74 29 3b 0d 0a  hild(element);..
1c8c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c8d0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
1c8e0 20 20 20 20 20 20 20 20 20 20 20 20 20 70 72 65               pre
1c8f0 76 69 6f 75 73 45 6c 65 6d 65 6e 74 20 3d 20 65  viousElement = e
1c900 6c 65 6d 65 6e 74 3b 0d 0a 20 20 20 20 20 20 20  lement;..       
1c910 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
1c920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c                el
1c930 65 6d 65 6e 74 20 3d 20 64 6f 63 75 6d 65 6e 74  ement = document
1c940 2e 43 72 65 61 74 65 45 6c 65 6d 65 6e 74 28 0d  .CreateElement(.
1c950 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1c960 20 20 20 20 20 22 61 64 64 22 2c 20 53 74 72 69       "add", Stri
1c970 6e 67 2e 45 6d 70 74 79 29 3b 0d 0a 0d 0a 20 20  ng.Empty);....  
1c980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 72                pr
1c990 65 76 69 6f 75 73 45 6c 65 6d 65 6e 74 2e 41 70  eviousElement.Ap
1c9a0 70 65 6e 64 43 68 69 6c 64 28 65 6c 65 6d 65 6e  pendChild(elemen
1c9b0 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  t);....         
1c9c0 20 20 20 20 20 20 20 64 69 72 74 79 20 3d 20 74         dirty = t
1c9d0 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  rue;..          
1c9e0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
1c9f0 20 20 20 69 66 20 28 21 53 74 72 69 6e 67 2e 45     if (!String.E
1ca00 71 75 61 6c 73 28 65 6c 65 6d 65 6e 74 2e 47 65  quals(element.Ge
1ca10 74 41 74 74 72 69 62 75 74 65 28 22 6e 61 6d 65  tAttribute("name
1ca20 22 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  "),..           
1ca30 20 20 20 20 20 20 20 20 20 6e 61 6d 65 2c 20 53           name, S
1ca40 74 72 69 6e 67 43 6f 6d 70 61 72 69 73 6f 6e 2e  tringComparison.
1ca50 49 6e 76 61 72 69 61 6e 74 43 75 6c 74 75 72 65  InvariantCulture
1ca60 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
1ca70 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
1ca80 20 20 20 65 6c 65 6d 65 6e 74 2e 53 65 74 41 74     element.SetAt
1ca90 74 72 69 62 75 74 65 28 22 6e 61 6d 65 22 2c 20  tribute("name", 
1caa0 6e 61 6d 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  name);..        
1cab0 20 20 20 20 20 20 20 20 64 69 72 74 79 20 3d 20          dirty = 
1cac0 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  true;..         
1cad0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
1cae0 20 20 20 20 69 66 20 28 21 53 74 72 69 6e 67 2e      if (!String.
1caf0 45 71 75 61 6c 73 28 65 6c 65 6d 65 6e 74 2e 47  Equals(element.G
1cb00 65 74 41 74 74 72 69 62 75 74 65 28 22 69 6e 76  etAttribute("inv
1cb10 61 72 69 61 6e 74 22 29 2c 0d 0a 20 20 20 20 20  ariant"),..     
1cb20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
1cb30 6e 76 61 72 69 61 6e 74 2c 20 53 74 72 69 6e 67  nvariant, String
1cb40 43 6f 6d 70 61 72 69 73 6f 6e 2e 49 6e 76 61 72  Comparison.Invar
1cb50 69 61 6e 74 43 75 6c 74 75 72 65 29 29 0d 0a 20  iantCulture)).. 
1cb60 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
1cb70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c                el
1cb80 65 6d 65 6e 74 2e 53 65 74 41 74 74 72 69 62 75  ement.SetAttribu
1cb90 74 65 28 22 69 6e 76 61 72 69 61 6e 74 22 2c 20  te("invariant", 
1cba0 69 6e 76 61 72 69 61 6e 74 29 3b 0d 0a 20 20 20  invariant);..   
1cbb0 20 20 20 20 20 20 20 20 20 20 20 20 20 64 69 72               dir
1cbc0 74 79 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20  ty = true;..    
1cbd0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
1cbe0 20 20 20 20 20 20 20 20 20 69 66 20 28 21 53 74           if (!St
1cbf0 72 69 6e 67 2e 45 71 75 61 6c 73 28 65 6c 65 6d  ring.Equals(elem
1cc00 65 6e 74 2e 47 65 74 41 74 74 72 69 62 75 74 65  ent.GetAttribute
1cc10 28 22 64 65 73 63 72 69 70 74 69 6f 6e 22 29 2c  ("description"),
1cc20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1cc30 20 20 20 20 20 20 64 65 73 63 72 69 70 74 69 6f        descriptio
1cc40 6e 2c 20 53 74 72 69 6e 67 43 6f 6d 70 61 72 69  n, StringCompari
1cc50 73 6f 6e 2e 49 6e 76 61 72 69 61 6e 74 43 75 6c  son.InvariantCul
1cc60 74 75 72 65 29 29 0d 0a 20 20 20 20 20 20 20 20  ture))..        
1cc70 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1cc80 20 20 20 20 20 20 20 65 6c 65 6d 65 6e 74 2e 53         element.S
1cc90 65 74 41 74 74 72 69 62 75 74 65 28 22 64 65 73  etAttribute("des
1cca0 63 72 69 70 74 69 6f 6e 22 2c 20 64 65 73 63 72  cription", descr
1ccb0 69 70 74 69 6f 6e 29 3b 0d 0a 20 20 20 20 20 20  iption);..      
1ccc0 20 20 20 20 20 20 20 20 20 20 64 69 72 74 79 20            dirty 
1ccd0 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20  = true;..       
1cce0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
1ccf0 20 20 20 20 20 20 73 74 72 69 6e 67 20 66 75 6c        string ful
1cd00 6c 54 79 70 65 4e 61 6d 65 20 3d 20 53 74 72 69  lTypeName = Stri
1cd10 6e 67 2e 46 6f 72 6d 61 74 28 22 7b 30 7d 2c 20  ng.Format("{0}, 
1cd20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  {1}",..         
1cd30 20 20 20 20 20 20 20 74 79 70 65 4e 61 6d 65 2c         typeName,
1cd40 20 61 73 73 65 6d 62 6c 79 4e 61 6d 65 29 3b 0d   assemblyName);.
1cd50 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
1cd60 66 20 28 21 53 74 72 69 6e 67 2e 45 71 75 61 6c  f (!String.Equal
1cd70 73 28 65 6c 65 6d 65 6e 74 2e 47 65 74 41 74 74  s(element.GetAtt
1cd80 72 69 62 75 74 65 28 22 74 79 70 65 22 29 2c 0d  ribute("type"),.
1cd90 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1cda0 20 20 20 20 20 66 75 6c 6c 54 79 70 65 4e 61 6d       fullTypeNam
1cdb0 65 2c 20 53 74 72 69 6e 67 43 6f 6d 70 61 72 69  e, StringCompari
1cdc0 73 6f 6e 2e 49 6e 76 61 72 69 61 6e 74 43 75 6c  son.InvariantCul
1cdd0 74 75 72 65 29 29 0d 0a 20 20 20 20 20 20 20 20  ture))..        
1cde0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1cdf0 20 20 20 20 20 20 20 65 6c 65 6d 65 6e 74 2e 53         element.S
1ce00 65 74 41 74 74 72 69 62 75 74 65 28 22 74 79 70  etAttribute("typ
1ce10 65 22 2c 20 66 75 6c 6c 54 79 70 65 4e 61 6d 65  e", fullTypeName
1ce20 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
1ce30 20 20 20 20 64 69 72 74 79 20 3d 20 74 72 75 65      dirty = true
1ce40 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
1ce50 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1ce60 69 66 20 28 64 69 72 74 79 29 0d 0a 20 20 20 20  if (dirty)..    
1ce70 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
1ce80 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76             if (v
1ce90 65 72 62 6f 73 65 29 0d 0a 20 20 20 20 20 20 20  erbose)..       
1cea0 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
1ceb0 63 65 4f 70 73 2e 54 72 61 63 65 28 0d 0a 20 20  ceOps.Trace(..  
1cec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ced0 20 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72        TracePrior
1cee0 69 74 79 2e 4c 6f 77 65 73 74 2c 20 74 72 61 63  ity.Lowest, trac
1cef0 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e  eCallback, Strin
1cf00 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
1cf10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cf20 20 20 20 22 65 6c 65 6d 65 6e 74 20 3d 20 7b 30     "element = {0
1cf30 7d 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 65  }", ForDisplay(e
1cf40 6c 65 6d 65 6e 74 29 29 2c 20 74 72 61 63 65 43  lement)), traceC
1cf50 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
1cf60 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
1cf70 28 21 77 68 61 74 49 66 29 0d 0a 20 20 20 20 20  (!whatIf)..     
1cf80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
1cf90 6f 63 75 6d 65 6e 74 2e 53 61 76 65 28 66 69 6c  ocument.Save(fil
1cfa0 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  eName);....     
1cfb0 20 20 20 20 20 20 20 20 20 20 20 73 61 76 65 64             saved
1cfc0 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20   = true;..      
1cfd0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
1cfe0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72         return tr
1cff0 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ue;..        }..
1d000 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
1d010 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d020 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d030 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d040 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d050 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69  /....        pri
1d060 76 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f 6c  vate static bool
1d070 20 52 65 6d 6f 76 65 44 62 50 72 6f 76 69 64 65   RemoveDbProvide
1d080 72 46 61 63 74 6f 72 79 28 0d 0a 20 20 20 20 20  rFactory(..     
1d090 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 66 69         string fi
1d0a0 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20  leName,..       
1d0b0 20 20 20 20 20 73 74 72 69 6e 67 20 69 6e 76 61       string inva
1d0c0 72 69 61 6e 74 2c 0d 0a 20 20 20 20 20 20 20 20  riant,..        
1d0d0 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c      bool whatIf,
1d0e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
1d0f0 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20  ol verbose,..   
1d100 20 20 20 20 20 20 20 20 20 72 65 66 20 62 6f 6f           ref boo
1d110 6c 20 73 61 76 65 64 2c 0d 0a 20 20 20 20 20 20  l saved,..      
1d120 20 20 20 20 20 20 72 65 66 20 73 74 72 69 6e 67        ref string
1d130 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20   error..        
1d140 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b      )..        {
1d150 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
1d160 6f 6c 20 64 69 72 74 79 20 3d 20 66 61 6c 73 65  ol dirty = false
1d170 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 58  ;..            X
1d180 6d 6c 44 6f 63 75 6d 65 6e 74 20 64 6f 63 75 6d  mlDocument docum
1d190 65 6e 74 20 3d 20 6e 65 77 20 58 6d 6c 44 6f 63  ent = new XmlDoc
1d1a0 75 6d 65 6e 74 28 29 3b 0d 0a 0d 0a 20 20 20 20  ument();....    
1d1b0 20 20 20 20 20 20 20 20 64 6f 63 75 6d 65 6e 74          document
1d1c0 2e 50 72 65 73 65 72 76 65 57 68 69 74 65 73 70  .PreserveWhitesp
1d1d0 61 63 65 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20  ace = true;..   
1d1e0 20 20 20 20 20 20 20 20 20 64 6f 63 75 6d 65 6e           documen
1d1f0 74 2e 4c 6f 61 64 28 66 69 6c 65 4e 61 6d 65 29  t.Load(fileName)
1d200 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
1d210 20 58 6d 6c 45 6c 65 6d 65 6e 74 20 65 6c 65 6d   XmlElement elem
1d220 65 6e 74 20 3d 20 64 6f 63 75 6d 65 6e 74 2e 53  ent = document.S
1d230 65 6c 65 63 74 53 69 6e 67 6c 65 4e 6f 64 65 28  electSingleNode(
1d240 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
1d250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d260 58 50 61 74 68 46 6f 72 41 64 64 45 6c 65 6d 65  XPathForAddEleme
1d270 6e 74 2c 20 69 6e 76 61 72 69 61 6e 74 29 29 20  nt, invariant)) 
1d280 61 73 20 58 6d 6c 45 6c 65 6d 65 6e 74 3b 0d 0a  as XmlElement;..
1d290 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
1d2a0 20 28 65 6c 65 6d 65 6e 74 20 21 3d 20 6e 75 6c   (element != nul
1d2b0 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
1d2c0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
1d2d0 20 20 20 65 6c 65 6d 65 6e 74 2e 50 61 72 65 6e     element.Paren
1d2e0 74 4e 6f 64 65 2e 52 65 6d 6f 76 65 43 68 69 6c  tNode.RemoveChil
1d2f0 64 28 65 6c 65 6d 65 6e 74 29 3b 0d 0a 20 20 20  d(element);..   
1d300 20 20 20 20 20 20 20 20 20 20 20 20 20 64 69 72               dir
1d310 74 79 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20  ty = true;..    
1d320 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
1d330 20 20 20 20 20 20 20 20 20 65 6c 65 6d 65 6e 74           element
1d340 20 3d 20 64 6f 63 75 6d 65 6e 74 2e 53 65 6c 65   = document.Sele
1d350 63 74 53 69 6e 67 6c 65 4e 6f 64 65 28 53 74 72  ctSingleNode(Str
1d360 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
1d370 20 20 20 20 20 20 20 20 20 20 20 20 20 58 50 61               XPa
1d380 74 68 46 6f 72 52 65 6d 6f 76 65 45 6c 65 6d 65  thForRemoveEleme
1d390 6e 74 2c 20 69 6e 76 61 72 69 61 6e 74 29 29 20  nt, invariant)) 
1d3a0 61 73 20 58 6d 6c 45 6c 65 6d 65 6e 74 3b 0d 0a  as XmlElement;..
1d3b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
1d3c0 20 28 65 6c 65 6d 65 6e 74 20 21 3d 20 6e 75 6c   (element != nul
1d3d0 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
1d3e0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
1d3f0 20 20 20 65 6c 65 6d 65 6e 74 2e 50 61 72 65 6e     element.Paren
1d400 74 4e 6f 64 65 2e 52 65 6d 6f 76 65 43 68 69 6c  tNode.RemoveChil
1d410 64 28 65 6c 65 6d 65 6e 74 29 3b 0d 0a 20 20 20  d(element);..   
1d420 20 20 20 20 20 20 20 20 20 20 20 20 20 64 69 72               dir
1d430 74 79 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20  ty = true;..    
1d440 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
1d450 20 20 20 20 20 20 20 20 20 69 66 20 28 64 69 72           if (dir
1d460 74 79 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ty)..           
1d470 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1d480 20 20 20 20 69 66 20 28 76 65 72 62 6f 73 65 29      if (verbose)
1d490 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1d4a0 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 54        TraceOps.T
1d4b0 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20  race(..         
1d4c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
1d4d0 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77  racePriority.Low
1d4e0 65 73 74 2c 20 74 72 61 63 65 43 61 6c 6c 62 61  est, traceCallba
1d4f0 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ck, String.Forma
1d500 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
1d510 20 20 20 20 20 20 20 20 20 20 20 20 22 65 6c 65              "ele
1d520 6d 65 6e 74 20 3d 20 7b 30 7d 22 2c 20 46 6f 72  ment = {0}", For
1d530 44 69 73 70 6c 61 79 28 65 6c 65 6d 65 6e 74 29  Display(element)
1d540 29 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72 79  ), traceCategory
1d550 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
1d560 20 20 20 20 20 20 69 66 20 28 21 77 68 61 74 49        if (!whatI
1d570 66 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f)..            
1d580 20 20 20 20 20 20 20 20 64 6f 63 75 6d 65 6e 74          document
1d590 2e 53 61 76 65 28 66 69 6c 65 4e 61 6d 65 29 3b  .Save(fileName);
1d5a0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1d5b0 20 20 20 20 73 61 76 65 64 20 3d 20 74 72 75 65      saved = true
1d5c0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
1d5d0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1d5e0 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20  return true;..  
1d5f0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
1d600 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
1d610 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d620 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d630 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d640 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
1d650 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
1d660 61 74 69 63 20 62 6f 6f 6c 20 50 72 6f 63 65 73  atic bool Proces
1d670 73 44 62 50 72 6f 76 69 64 65 72 46 61 63 74 6f  sDbProviderFacto
1d680 72 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ry(..           
1d690 20 73 74 72 69 6e 67 20 66 69 6c 65 4e 61 6d 65   string fileName
1d6a0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  ,..            s
1d6b0 74 72 69 6e 67 20 69 6e 76 61 72 69 61 6e 74 2c  tring invariant,
1d6c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
1d6d0 72 69 6e 67 20 6e 61 6d 65 2c 0d 0a 20 20 20 20  ring name,..    
1d6e0 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 64          string d
1d6f0 65 73 63 72 69 70 74 69 6f 6e 2c 0d 0a 20 20 20  escription,..   
1d700 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
1d710 74 79 70 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20  typeName,..     
1d720 20 20 20 20 20 20 20 41 73 73 65 6d 62 6c 79 4e         AssemblyN
1d730 61 6d 65 20 61 73 73 65 6d 62 6c 79 4e 61 6d 65  ame assemblyName
1d740 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6f  ,..            o
1d750 62 6a 65 63 74 20 63 6c 69 65 6e 74 44 61 74 61  bject clientData
1d760 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
1d770 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20  ool whatIf,..   
1d780 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65           bool ve
1d790 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 20  rbose,..        
1d7a0 20 20 20 20 72 65 66 20 62 6f 6f 6c 20 73 61 76      ref bool sav
1d7b0 65 64 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ed,..           
1d7c0 20 72 65 66 20 73 74 72 69 6e 67 20 65 72 72 6f   ref string erro
1d7d0 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29  r..            )
1d7e0 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
1d7f0 20 20 20 20 20 20 20 20 20 41 6e 79 50 61 69 72           AnyPair
1d800 3c 73 74 72 69 6e 67 2c 20 62 6f 6f 6c 3e 20 70  <string, bool> p
1d810 61 69 72 20 3d 20 63 6c 69 65 6e 74 44 61 74 61  air = clientData
1d820 20 61 73 20 41 6e 79 50 61 69 72 3c 73 74 72 69   as AnyPair<stri
1d830 6e 67 2c 20 62 6f 6f 6c 3e 3b 0d 0a 0d 0a 20 20  ng, bool>;....  
1d840 20 20 20 20 20 20 20 20 20 20 69 66 20 28 70 61            if (pa
1d850 69 72 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ir == null)..   
1d860 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
1d870 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
1d880 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 66 72 61  r = "invalid fra
1d890 6d 65 77 6f 72 6b 20 63 6f 6e 66 69 67 20 63 61  mework config ca
1d8a0 6c 6c 62 61 63 6b 20 64 61 74 61 22 3b 0d 0a 20  llback data";.. 
1d8b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
1d8c0 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
1d8d0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
1d8e0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 70             if (p
1d8f0 61 69 72 2e 59 29 0d 0a 20 20 20 20 20 20 20 20  air.Y)..        
1d900 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1d910 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 52 65         return Re
1d920 6d 6f 76 65 44 62 50 72 6f 76 69 64 65 72 46 61  moveDbProviderFa
1d930 63 74 6f 72 79 28 0d 0a 20 20 20 20 20 20 20 20  ctory(..        
1d940 20 20 20 20 20 20 20 20 20 20 20 20 66 69 6c 65              file
1d950 4e 61 6d 65 2c 20 69 6e 76 61 72 69 61 6e 74 2c  Name, invariant,
1d960 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65   whatIf, verbose
1d970 2c 20 72 65 66 20 73 61 76 65 64 2c 0d 0a 20 20  , ref saved,..  
1d980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d990 20 20 72 65 66 20 65 72 72 6f 72 29 20 26 26 0d    ref error) &&.
1d9a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1d9b0 20 41 64 64 44 62 50 72 6f 76 69 64 65 72 46 61   AddDbProviderFa
1d9c0 63 74 6f 72 79 28 0d 0a 20 20 20 20 20 20 20 20  ctory(..        
1d9d0 20 20 20 20 20 20 20 20 20 20 20 20 66 69 6c 65              file
1d9e0 4e 61 6d 65 2c 20 69 6e 76 61 72 69 61 6e 74 2c  Name, invariant,
1d9f0 20 6e 61 6d 65 2c 20 64 65 73 63 72 69 70 74 69   name, descripti
1da00 6f 6e 2c 20 74 79 70 65 4e 61 6d 65 2c 0d 0a 20  on, typeName,.. 
1da10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1da20 20 20 20 61 73 73 65 6d 62 6c 79 4e 61 6d 65 2c     assemblyName,
1da30 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65   whatIf, verbose
1da40 2c 20 72 65 66 20 73 61 76 65 64 2c 20 72 65 66  , ref saved, ref
1da50 20 65 72 72 6f 72 29 3b 0d 0a 20 20 20 20 20 20   error);..      
1da60 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
1da70 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20       else..     
1da80 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
1da90 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
1daa0 20 52 65 6d 6f 76 65 44 62 50 72 6f 76 69 64 65   RemoveDbProvide
1dab0 72 46 61 63 74 6f 72 79 28 0d 0a 20 20 20 20 20  rFactory(..     
1dac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66                 f
1dad0 69 6c 65 4e 61 6d 65 2c 20 69 6e 76 61 72 69 61  ileName, invaria
1dae0 6e 74 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62  nt, whatIf, verb
1daf0 6f 73 65 2c 20 72 65 66 20 73 61 76 65 64 2c 0d  ose, ref saved,.
1db00 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1db10 20 20 20 20 20 72 65 66 20 65 72 72 6f 72 29 3b       ref error);
1db20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
1db30 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
1db40 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
1db50 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
1db60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1db70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1db80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1db90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1dba0 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65  /....        #re
1dbb0 67 69 6f 6e 20 41 73 73 65 6d 62 6c 79 20 46 6f  gion Assembly Fo
1dbc0 6c 64 65 72 73 20 48 61 6e 64 6c 69 6e 67 0d 0a  lders Handling..
1dbd0 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
1dbe0 73 74 61 74 69 63 20 73 74 72 69 6e 67 20 47 65  static string Ge
1dbf0 74 41 73 73 65 6d 62 6c 79 46 6f 6c 64 65 72 73  tAssemblyFolders
1dc00 4b 65 79 4e 61 6d 65 28 0d 0a 20 20 20 20 20 20  KeyName(..      
1dc10 20 20 20 20 20 20 73 74 72 69 6e 67 20 66 72 61        string fra
1dc20 6d 65 77 6f 72 6b 4e 61 6d 65 2c 0d 0a 20 20 20  meworkName,..   
1dc30 20 20 20 20 20 20 20 20 20 56 65 72 73 69 6f 6e           Version
1dc40 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f   frameworkVersio
1dc50 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n,..            
1dc60 73 74 72 69 6e 67 20 70 6c 61 74 66 6f 72 6d 4e  string platformN
1dc70 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ame..           
1dc80 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20   )..        {.. 
1dc90 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
1dca0 67 20 66 6f 72 6d 61 74 20 3d 20 21 53 74 72 69  g format = !Stri
1dcb0 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79  ng.IsNullOrEmpty
1dcc0 28 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 29 20 3f  (platformName) ?
1dcd0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1dce0 20 20 22 53 6f 66 74 77 61 72 65 5c 5c 4d 69 63    "Software\\Mic
1dcf0 72 6f 73 6f 66 74 5c 5c 7b 30 7d 5c 5c 76 7b 31  rosoft\\{0}\\v{1
1dd00 7d 5c 5c 7b 32 7d 5c 5c 41 73 73 65 6d 62 6c 79  }\\{2}\\Assembly
1dd10 46 6f 6c 64 65 72 73 45 78 22 20 3a 0d 0a 20 20  FoldersEx" :..  
1dd20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 53                "S
1dd30 6f 66 74 77 61 72 65 5c 5c 4d 69 63 72 6f 73 6f  oftware\\Microso
1dd40 66 74 5c 5c 7b 30 7d 5c 5c 76 7b 31 7d 5c 5c 41  ft\\{0}\\v{1}\\A
1dd50 73 73 65 6d 62 6c 79 46 6f 6c 64 65 72 73 45 78  ssemblyFoldersEx
1dd60 22 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  ";....          
1dd70 20 20 72 65 74 75 72 6e 20 53 74 72 69 6e 67 2e    return String.
1dd80 46 6f 72 6d 61 74 28 66 6f 72 6d 61 74 2c 20 66  Format(format, f
1dd90 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 20 66 72  rameworkName, fr
1dda0 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 0d  ameworkVersion,.
1ddb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1ddc0 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 29 3b 0d   platformName);.
1ddd0 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
1dde0 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
1ddf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1de00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1de10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1de20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
1de30 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
1de40 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 41 64 64   static bool Add
1de50 54 6f 41 73 73 65 6d 62 6c 79 46 6f 6c 64 65 72  ToAssemblyFolder
1de60 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s(..            
1de70 52 65 67 69 73 74 72 79 4b 65 79 20 72 6f 6f 74  RegistryKey root
1de80 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  Key,..          
1de90 20 20 73 74 72 69 6e 67 20 66 72 61 6d 65 77 6f    string framewo
1dea0 72 6b 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20  rkName,..       
1deb0 20 20 20 20 20 56 65 72 73 69 6f 6e 20 66 72 61       Version fra
1dec0 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 0d 0a  meworkVersion,..
1ded0 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
1dee0 6e 67 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c  ng platformName,
1def0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
1df00 72 69 6e 67 20 73 75 62 4b 65 79 4e 61 6d 65 2c  ring subKeyName,
1df10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
1df20 72 69 6e 67 20 64 69 72 65 63 74 6f 72 79 2c 0d  ring directory,.
1df30 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
1df40 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20  l whatIf,..     
1df50 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62         bool verb
1df60 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ose,..          
1df70 20 20 72 65 66 20 73 74 72 69 6e 67 20 65 72 72    ref string err
1df80 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  or..            
1df90 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
1dfa0 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
1dfb0 20 6b 65 79 4e 61 6d 65 20 3d 20 47 65 74 41 73   keyName = GetAs
1dfc0 73 65 6d 62 6c 79 46 6f 6c 64 65 72 73 4b 65 79  semblyFoldersKey
1dfd0 4e 61 6d 65 28 0d 0a 20 20 20 20 20 20 20 20 20  Name(..         
1dfe0 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b         framework
1dff0 4e 61 6d 65 2c 20 66 72 61 6d 65 77 6f 72 6b 56  Name, frameworkV
1e000 65 72 73 69 6f 6e 2c 20 70 6c 61 74 66 6f 72 6d  ersion, platform
1e010 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  Name);....      
1e020 20 20 20 20 20 20 75 73 69 6e 67 20 28 4d 6f 63        using (Moc
1e030 6b 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65 79  kRegistryKey key
1e040 20 3d 20 52 65 67 69 73 74 72 79 48 65 6c 70 65   = RegistryHelpe
1e050 72 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20  r.OpenSubKey(.. 
1e060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e070 20 20 20 72 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e     rootKey, keyN
1e080 61 6d 65 2c 20 74 72 75 65 2c 20 77 68 61 74 49  ame, true, whatI
1e090 66 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20  f, verbose))..  
1e0a0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1e0b0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
1e0c0 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  (key == null).. 
1e0d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
1e0e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1e0f0 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 53 74        error = St
1e100 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
1e110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e120 20 20 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74        "could not
1e130 20 6f 70 65 6e 20 72 65 67 69 73 74 72 79 20 6b   open registry k
1e140 65 79 3a 20 7b 30 7d 5c 5c 7b 31 7d 22 2c 0d 0a  ey: {0}\\{1}",..
1e150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e160 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c          rootKey,
1e170 20 6b 65 79 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20   keyName);....  
1e180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e190 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
1e1a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1e1b0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
1e1c0 20 20 20 20 20 20 75 73 69 6e 67 20 28 4d 6f 63        using (Moc
1e1d0 6b 52 65 67 69 73 74 72 79 4b 65 79 20 73 75 62  kRegistryKey sub
1e1e0 4b 65 79 20 3d 20 52 65 67 69 73 74 72 79 48 65  Key = RegistryHe
1e1f0 6c 70 65 72 2e 43 72 65 61 74 65 53 75 62 4b 65  lper.CreateSubKe
1e200 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
1e210 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 2c              key,
1e220 20 73 75 62 4b 65 79 4e 61 6d 65 2c 20 77 68 61   subKeyName, wha
1e230 74 49 66 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a  tIf, verbose))..
1e240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e250 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
1e260 20 20 20 20 20 20 20 69 66 20 28 73 75 62 4b 65         if (subKe
1e270 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  y == null)..    
1e280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e290 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
1e2a0 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
1e2b0 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74   = String.Format
1e2c0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
1e2d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
1e2e0 63 6f 75 6c 64 20 6e 6f 74 20 63 72 65 61 74 65  could not create
1e2f0 20 72 65 67 69 73 74 72 79 20 6b 65 79 3a 20 7b   registry key: {
1e300 30 7d 5c 5c 7b 31 7d 22 2c 0d 0a 20 20 20 20 20  0}\\{1}",..     
1e310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e320 20 20 20 20 20 20 20 6b 65 79 2c 20 73 75 62 4b         key, subK
1e330 65 79 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20  eyName);....    
1e340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e350 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
1e360 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
1e370 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
1e380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e390 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 53  RegistryHelper.S
1e3a0 65 74 56 61 6c 75 65 28 0d 0a 20 20 20 20 20 20  etValue(..      
1e3b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e3c0 20 20 73 75 62 4b 65 79 2c 20 6e 75 6c 6c 2c 20    subKey, null, 
1e3d0 64 69 72 65 63 74 6f 72 79 2c 20 77 68 61 74 49  directory, whatI
1e3e0 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a 20 20  f, verbose);..  
1e3f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
1e400 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
1e410 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
1e420 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20  turn true;..    
1e430 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
1e440 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
1e450 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e460 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e470 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e480 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
1e490 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74      private stat
1e4a0 69 63 20 62 6f 6f 6c 20 52 65 6d 6f 76 65 46 72  ic bool RemoveFr
1e4b0 6f 6d 41 73 73 65 6d 62 6c 79 46 6f 6c 64 65 72  omAssemblyFolder
1e4c0 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s(..            
1e4d0 52 65 67 69 73 74 72 79 4b 65 79 20 72 6f 6f 74  RegistryKey root
1e4e0 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  Key,..          
1e4f0 20 20 73 74 72 69 6e 67 20 66 72 61 6d 65 77 6f    string framewo
1e500 72 6b 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20  rkName,..       
1e510 20 20 20 20 20 56 65 72 73 69 6f 6e 20 66 72 61       Version fra
1e520 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 0d 0a  meworkVersion,..
1e530 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
1e540 6e 67 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c  ng platformName,
1e550 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
1e560 72 69 6e 67 20 73 75 62 4b 65 79 4e 61 6d 65 2c  ring subKeyName,
1e570 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
1e580 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20  ol whatIf,..    
1e590 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72          bool ver
1e5a0 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  bose,..         
1e5b0 20 20 20 72 65 66 20 73 74 72 69 6e 67 20 65 72     ref string er
1e5c0 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ror..           
1e5d0 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20   )..        {.. 
1e5e0 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
1e5f0 67 20 6b 65 79 4e 61 6d 65 20 3d 20 47 65 74 41  g keyName = GetA
1e600 73 73 65 6d 62 6c 79 46 6f 6c 64 65 72 73 4b 65  ssemblyFoldersKe
1e610 79 4e 61 6d 65 28 0d 0a 20 20 20 20 20 20 20 20  yName(..        
1e620 20 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72          framewor
1e630 6b 4e 61 6d 65 2c 20 66 72 61 6d 65 77 6f 72 6b  kName, framework
1e640 56 65 72 73 69 6f 6e 2c 20 70 6c 61 74 66 6f 72  Version, platfor
1e650 6d 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  mName);....     
1e660 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 4d 6f         using (Mo
1e670 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65  ckRegistryKey ke
1e680 79 20 3d 20 52 65 67 69 73 74 72 79 48 65 6c 70  y = RegistryHelp
1e690 65 72 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a  er.OpenSubKey(..
1e6a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e6b0 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 6b 65 79      rootKey, key
1e6c0 4e 61 6d 65 2c 20 66 61 6c 73 65 2c 20 77 68 61  Name, false, wha
1e6d0 74 49 66 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a  tIf, verbose))..
1e6e0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
1e6f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
1e700 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d  f (key == null).
1e710 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1e720 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1e730 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
1e740 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
1e750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e760 20 20 20 20 20 20 20 20 22 63 6f 75 6c 64 20 6e          "could n
1e770 6f 74 20 6f 70 65 6e 20 72 65 67 69 73 74 72 79  ot open registry
1e780 20 6b 65 79 3a 20 7b 30 7d 5c 5c 7b 31 7d 22 2c   key: {0}\\{1}",
1e790 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1e7a0 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65            rootKe
1e7b0 79 2c 20 6b 65 79 4e 61 6d 65 29 3b 0d 0a 0d 0a  y, keyName);....
1e7c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e7d0 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
1e7e0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
1e7f0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
1e800 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79          Registry
1e810 48 65 6c 70 65 72 2e 44 65 6c 65 74 65 53 75 62  Helper.DeleteSub
1e820 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  Key(..          
1e830 20 20 20 20 20 20 20 20 20 20 6b 65 79 2c 20 73            key, s
1e840 75 62 4b 65 79 4e 61 6d 65 2c 20 77 68 61 74 49  ubKeyName, whatI
1e850 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a 20 20  f, verbose);..  
1e860 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
1e870 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
1e880 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20  n true;..       
1e890 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f   }....        //
1e8a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e8b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e8c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e8d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e8e0 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
1e8f0 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
1e900 62 6f 6f 6c 20 50 72 6f 63 65 73 73 41 73 73 65  bool ProcessAsse
1e910 6d 62 6c 79 46 6f 6c 64 65 72 73 28 0d 0a 20 20  mblyFolders(..  
1e920 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74            Regist
1e930 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a  ryKey rootKey,..
1e940 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
1e950 6e 67 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65  ng frameworkName
1e960 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 56  ,..            V
1e970 65 72 73 69 6f 6e 20 66 72 61 6d 65 77 6f 72 6b  ersion framework
1e980 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20  Version,..      
1e990 20 20 20 20 20 20 73 74 72 69 6e 67 20 70 6c 61        string pla
1e9a0 74 66 6f 72 6d 4e 61 6d 65 2c 0d 0a 20 20 20 20  tformName,..    
1e9b0 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 63          object c
1e9c0 6c 69 65 6e 74 44 61 74 61 2c 0d 0a 20 20 20 20  lientData,..    
1e9d0 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61          bool wha
1e9e0 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf,..          
1e9f0 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d    bool verbose,.
1ea00 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66  .            ref
1ea10 20 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20   string error.. 
1ea20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
1ea30 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1ea40 20 20 20 20 20 41 6e 79 50 61 69 72 3c 73 74 72       AnyPair<str
1ea50 69 6e 67 2c 20 62 6f 6f 6c 3e 20 70 61 69 72 20  ing, bool> pair 
1ea60 3d 20 63 6c 69 65 6e 74 44 61 74 61 20 61 73 20  = clientData as 
1ea70 41 6e 79 50 61 69 72 3c 73 74 72 69 6e 67 2c 20  AnyPair<string, 
1ea80 62 6f 6f 6c 3e 3b 0d 0a 0d 0a 20 20 20 20 20 20  bool>;....      
1ea90 20 20 20 20 20 20 69 66 20 28 70 61 69 72 20 3d        if (pair =
1eaa0 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
1eab0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1eac0 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
1ead0 22 69 6e 76 61 6c 69 64 20 66 72 61 6d 65 77 6f  "invalid framewo
1eae0 72 6b 20 63 61 6c 6c 62 61 63 6b 20 64 61 74 61  rk callback data
1eaf0 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ";..            
1eb00 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
1eb10 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
1eb20 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1eb30 69 66 20 28 70 61 69 72 2e 59 29 0d 0a 20 20 20  if (pair.Y)..   
1eb40 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
1eb50 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
1eb60 72 6e 20 52 65 6d 6f 76 65 46 72 6f 6d 41 73 73  rn RemoveFromAss
1eb70 65 6d 62 6c 79 46 6f 6c 64 65 72 73 28 0d 0a 20  emblyFolders(.. 
1eb80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1eb90 20 20 20 72 6f 6f 74 4b 65 79 2c 20 66 72 61 6d     rootKey, fram
1eba0 65 77 6f 72 6b 4e 61 6d 65 2c 20 66 72 61 6d 65  eworkName, frame
1ebb0 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 20 70 6c 61  workVersion, pla
1ebc0 74 66 6f 72 6d 4e 61 6d 65 2c 0d 0a 20 20 20 20  tformName,..    
1ebd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ebe0 4c 65 67 61 63 79 50 72 6f 6a 65 63 74 4e 61 6d  LegacyProjectNam
1ebf0 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f  e, whatIf, verbo
1ec00 73 65 2c 20 72 65 66 20 65 72 72 6f 72 29 20 26  se, ref error) &
1ec10 26 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  &..             
1ec20 20 20 20 41 64 64 54 6f 41 73 73 65 6d 62 6c 79     AddToAssembly
1ec30 46 6f 6c 64 65 72 73 28 0d 0a 20 20 20 20 20 20  Folders(..      
1ec40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f                ro
1ec50 6f 74 4b 65 79 2c 20 66 72 61 6d 65 77 6f 72 6b  otKey, framework
1ec60 4e 61 6d 65 2c 20 66 72 61 6d 65 77 6f 72 6b 56  Name, frameworkV
1ec70 65 72 73 69 6f 6e 2c 20 70 6c 61 74 66 6f 72 6d  ersion, platform
1ec80 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  Name,..         
1ec90 20 20 20 20 20 20 20 20 20 20 20 50 72 6f 6a 65             Proje
1eca0 63 74 4e 61 6d 65 2c 20 70 61 69 72 2e 58 2c 20  ctName, pair.X, 
1ecb0 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 2c  whatIf, verbose,
1ecc0 20 72 65 66 20 65 72 72 6f 72 29 3b 0d 0a 20 20   ref error);..  
1ecd0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
1ece0 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20           else.. 
1ecf0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
1ed00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
1ed10 74 75 72 6e 20 52 65 6d 6f 76 65 46 72 6f 6d 41  turn RemoveFromA
1ed20 73 73 65 6d 62 6c 79 46 6f 6c 64 65 72 73 28 0d  ssemblyFolders(.
1ed30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1ed40 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 66 72       rootKey, fr
1ed50 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 20 66 72 61  ameworkName, fra
1ed60 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 20 70  meworkVersion, p
1ed70 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c 0d 0a 20 20  latformName,..  
1ed80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ed90 20 20 50 72 6f 6a 65 63 74 4e 61 6d 65 2c 20 77    ProjectName, w
1eda0 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 2c 20  hatIf, verbose, 
1edb0 72 65 66 20 65 72 72 6f 72 29 3b 0d 0a 20 20 20  ref error);..   
1edc0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
1edd0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23      }..        #
1ede0 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
1edf0 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
1ee00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ee10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ee20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ee30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
1ee40 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
1ee50 56 69 73 75 61 6c 20 53 74 75 64 69 6f 20 48 61  Visual Studio Ha
1ee60 6e 64 6c 69 6e 67 0d 0a 20 20 20 20 20 20 20 20  ndling..        
1ee70 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 73  private static s
1ee80 74 72 69 6e 67 20 47 65 74 56 73 4b 65 79 4e 61  tring GetVsKeyNa
1ee90 6d 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me(..           
1eea0 20 56 65 72 73 69 6f 6e 20 76 73 56 65 72 73 69   Version vsVersi
1eeb0 6f 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  on..            
1eec0 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
1eed0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
1eee0 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22   String.Format("
1eef0 53 6f 66 74 77 61 72 65 5c 5c 4d 69 63 72 6f 73  Software\\Micros
1ef00 6f 66 74 5c 5c 56 69 73 75 61 6c 53 74 75 64 69  oft\\VisualStudi
1ef10 6f 5c 5c 7b 30 7d 22 2c 0d 0a 20 20 20 20 20 20  o\\{0}",..      
1ef20 20 20 20 20 20 20 20 20 20 20 76 73 56 65 72 73            vsVers
1ef30 69 6f 6e 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d  ion);..        }
1ef40 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
1ef50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ef60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ef70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ef80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ef90 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23  ///....        #
1efa0 72 65 67 69 6f 6e 20 56 69 73 75 61 6c 20 53 74  region Visual St
1efb0 75 64 69 6f 20 44 61 74 61 20 53 6f 75 72 63 65  udio Data Source
1efc0 20 48 61 6e 64 6c 69 6e 67 0d 0a 20 20 20 20 20   Handling..     
1efd0 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
1efe0 63 20 62 6f 6f 6c 20 41 64 64 56 73 44 61 74 61  c bool AddVsData
1eff0 53 6f 75 72 63 65 28 0d 0a 20 20 20 20 20 20 20  Source(..       
1f000 20 20 20 20 20 52 65 67 69 73 74 72 79 4b 65 79       RegistryKey
1f010 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 20 20   rootKey,..     
1f020 20 20 20 20 20 20 20 56 65 72 73 69 6f 6e 20 76         Version v
1f030 73 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20  sVersion,..     
1f040 20 20 20 20 20 20 20 47 75 69 64 20 64 61 74 61         Guid data
1f050 53 6f 75 72 63 65 49 64 2c 0d 0a 20 20 20 20 20  SourceId,..     
1f060 20 20 20 20 20 20 20 47 75 69 64 20 64 61 74 61         Guid data
1f070 50 72 6f 76 69 64 65 72 49 64 2c 0d 0a 20 20 20  ProviderId,..   
1f080 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68           bool wh
1f090 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20  atIf,..         
1f0a0 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c     bool verbose,
1f0b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
1f0c0 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a  f string error..
1f0d0 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
1f0e0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
1f0f0 20 20 20 20 20 20 73 74 72 69 6e 67 20 6b 65 79        string key
1f100 4e 61 6d 65 20 3d 20 47 65 74 56 73 4b 65 79 4e  Name = GetVsKeyN
1f110 61 6d 65 28 76 73 56 65 72 73 69 6f 6e 29 3b 0d  ame(vsVersion);.
1f120 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 75  ...            u
1f130 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74  sing (MockRegist
1f140 72 79 4b 65 79 20 6b 65 79 20 3d 20 52 65 67 69  ryKey key = Regi
1f150 73 74 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53  stryHelper.OpenS
1f160 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20  ubKey(..        
1f170 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74              root
1f180 4b 65 79 2c 20 6b 65 79 4e 61 6d 65 2c 20 66 61  Key, keyName, fa
1f190 6c 73 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72  lse, whatIf, ver
1f1a0 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20  bose))..        
1f1b0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1f1c0 20 20 20 20 20 20 20 69 66 20 28 6b 65 79 20 3d         if (key =
1f1d0 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
1f1e0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
1f1f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f200 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46  error = String.F
1f210 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
1f220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f230 22 63 6f 75 6c 64 20 6e 6f 74 20 6f 70 65 6e 20  "could not open 
1f240 72 65 67 69 73 74 72 79 20 6b 65 79 3a 20 7b 30  registry key: {0
1f250 7d 5c 5c 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20  }\\{1}",..      
1f260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f270 20 20 72 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e 61    rootKey, keyNa
1f280 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  me);....        
1f290 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
1f2a0 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
1f2b0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
1f2c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f2d0 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73  using (MockRegis
1f2e0 74 72 79 4b 65 79 20 73 75 62 4b 65 79 20 3d 20  tryKey subKey = 
1f2f0 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 4f  RegistryHelper.O
1f300 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20  penSubKey(..    
1f310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f320 20 20 20 20 6b 65 79 2c 20 22 44 61 74 61 53 6f      key, "DataSo
1f330 75 72 63 65 73 22 2c 20 74 72 75 65 2c 20 77 68  urces", true, wh
1f340 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 29 0d  atIf, verbose)).
1f350 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1f360 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1f370 20 20 20 20 20 20 20 20 69 66 20 28 73 75 62 4b          if (subK
1f380 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ey == null)..   
1f390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f3a0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1f3b0 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
1f3c0 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  r = String.Forma
1f3d0 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
1f3e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f3f0 22 63 6f 75 6c 64 20 6e 6f 74 20 6f 70 65 6e 20  "could not open 
1f400 72 65 67 69 73 74 72 79 20 6b 65 79 3a 20 7b 30  registry key: {0
1f410 7d 5c 5c 44 61 74 61 53 6f 75 72 63 65 73 22 2c  }\\DataSources",
1f420 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1f430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65                ke
1f440 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
1f450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
1f460 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
1f470 20 20 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 20 20 20 20 75 73 69 6e 67             using
1f4a0 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65   (MockRegistryKe
1f4b0 79 20 64 61 74 61 53 6f 75 72 63 65 4b 65 79 20  y dataSourceKey 
1f4c0 3d 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72  = RegistryHelper
1f4d0 2e 43 72 65 61 74 65 53 75 62 4b 65 79 28 0d 0a  .CreateSubKey(..
1f4e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f4f0 20 20 20 20 20 20 20 20 20 20 20 20 73 75 62 4b              subK
1f500 65 79 2c 20 64 61 74 61 53 6f 75 72 63 65 49 64  ey, dataSourceId
1f510 2e 54 6f 53 74 72 69 6e 67 28 56 73 49 64 46 6f  .ToString(VsIdFo
1f520 72 6d 61 74 29 2c 20 77 68 61 74 49 66 2c 0d 0a  rmat), whatIf,..
1f530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f540 20 20 20 20 20 20 20 20 20 20 20 20 76 65 72 62              verb
1f550 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ose))..         
1f560 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
1f570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f580 20 20 20 20 20 20 69 66 20 28 64 61 74 61 53 6f        if (dataSo
1f590 75 72 63 65 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29  urceKey == null)
1f5a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1f5b0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1f5c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f5d0 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
1f5e0 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
1f5f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1f600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f610 20 22 63 6f 75 6c 64 20 6e 6f 74 20 63 72 65 61   "could not crea
1f620 74 65 20 72 65 67 69 73 74 72 79 20 6b 65 79 3a  te registry key:
1f630 20 7b 30 7d 5c 5c 7b 31 7d 22 2c 0d 0a 20 20 20   {0}\\{1}",..   
1f640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f650 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79               key
1f660 2c 20 64 61 74 61 53 6f 75 72 63 65 49 64 2e 54  , dataSourceId.T
1f670 6f 53 74 72 69 6e 67 28 56 73 49 64 46 6f 72 6d  oString(VsIdForm
1f680 61 74 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  at));....       
1f690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f6a0 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
1f6b0 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
1f6c0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
1f6d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1f6e0 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72           Registr
1f6f0 79 48 65 6c 70 65 72 2e 53 65 74 56 61 6c 75 65  yHelper.SetValue
1f700 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
1f710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
1f720 61 74 61 53 6f 75 72 63 65 4b 65 79 2c 20 6e 75  ataSourceKey, nu
1f730 6c 6c 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ll, String.Forma
1f740 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
1f750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f760 22 7b 30 7d 20 44 61 74 61 62 61 73 65 20 46 69  "{0} Database Fi
1f770 6c 65 22 2c 20 50 72 6f 6a 65 63 74 4e 61 6d 65  le", ProjectName
1f780 29 2c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20  ), whatIf,..    
1f790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f7a0 20 20 20 20 20 20 20 20 76 65 72 62 6f 73 65 29          verbose)
1f7b0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
1f7c0 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67               Reg
1f7d0 69 73 74 72 79 48 65 6c 70 65 72 2e 43 72 65 61  istryHelper.Crea
1f7e0 74 65 53 75 62 4b 65 79 28 64 61 74 61 53 6f 75  teSubKey(dataSou
1f7f0 72 63 65 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20  rceKey,..       
1f800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f810 20 20 20 20 20 53 74 72 69 6e 67 2e 46 6f 72 6d       String.Form
1f820 61 74 28 22 53 75 70 70 6f 72 74 69 6e 67 50 72  at("SupportingPr
1f830 6f 76 69 64 65 72 73 5c 5c 7b 30 7d 22 2c 0d 0a  oviders\\{0}",..
1f840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f850 20 20 20 20 20 20 20 20 20 20 20 20 64 61 74 61              data
1f860 50 72 6f 76 69 64 65 72 49 64 2e 54 6f 53 74 72  ProviderId.ToStr
1f870 69 6e 67 28 56 73 49 64 46 6f 72 6d 61 74 29 29  ing(VsIdFormat))
1f880 2c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20  , whatIf,..     
1f890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f8a0 20 20 20 20 20 20 20 76 65 72 62 6f 73 65 29 3b         verbose);
1f8b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1f8c0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
1f8d0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
1f8e0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
1f8f0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
1f900 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d  true;..        }
1f910 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
1f920 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f930 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f940 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f950 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f960 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70  ///....        p
1f970 72 69 76 61 74 65 20 73 74 61 74 69 63 20 62 6f  rivate static bo
1f980 6f 6c 20 52 65 6d 6f 76 65 56 73 44 61 74 61 53  ol RemoveVsDataS
1f990 6f 75 72 63 65 28 0d 0a 20 20 20 20 20 20 20 20  ource(..        
1f9a0 20 20 20 20 52 65 67 69 73 74 72 79 4b 65 79 20      RegistryKey 
1f9b0 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20  rootKey,..      
1f9c0 20 20 20 20 20 20 56 65 72 73 69 6f 6e 20 76 73        Version vs
1f9d0 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20  Version,..      
1f9e0 20 20 20 20 20 20 47 75 69 64 20 64 61 74 61 53        Guid dataS
1f9f0 6f 75 72 63 65 49 64 2c 0d 0a 20 20 20 20 20 20  ourceId,..      
1fa00 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49        bool whatI
1fa10 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f,..            
1fa20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a 20  bool verbose,.. 
1fa30 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20 73             ref s
1fa40 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20  tring error..   
1fa50 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
1fa60 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1fa70 20 20 20 73 74 72 69 6e 67 20 6b 65 79 4e 61 6d     string keyNam
1fa80 65 20 3d 20 47 65 74 56 73 4b 65 79 4e 61 6d 65  e = GetVsKeyName
1fa90 28 76 73 56 65 72 73 69 6f 6e 29 3b 0d 0a 0d 0a  (vsVersion);....
1faa0 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e              usin
1fab0 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b  g (MockRegistryK
1fac0 65 79 20 6b 65 79 20 3d 20 52 65 67 69 73 74 72  ey key = Registr
1fad0 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62 4b  yHelper.OpenSubK
1fae0 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey(..           
1faf0 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79           rootKey
1fb00 2c 20 6b 65 79 4e 61 6d 65 2c 20 66 61 6c 73 65  , keyName, false
1fb10 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73  , whatIf, verbos
1fb20 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e))..           
1fb30 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1fb40 20 20 20 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e      if (key == n
1fb50 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
1fb60 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1fb70 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
1fb80 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d  or = String.Form
1fb90 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
1fba0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 63 6f               "co
1fbb0 75 6c 64 20 6e 6f 74 20 6f 70 65 6e 20 72 65 67  uld not open reg
1fbc0 69 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c  istry key: {0}\\
1fbd0 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  {1}",..         
1fbe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
1fbf0 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e 61 6d 65 29  ootKey, keyName)
1fc00 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
1fc10 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
1fc20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
1fc30 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
1fc40 20 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69               usi
1fc50 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79  ng (MockRegistry
1fc60 4b 65 79 20 73 75 62 4b 65 79 20 3d 20 52 65 67  Key subKey = Reg
1fc70 69 73 74 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e  istryHelper.Open
1fc80 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20  SubKey(..       
1fc90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fca0 20 6b 65 79 2c 20 22 44 61 74 61 53 6f 75 72 63   key, "DataSourc
1fcb0 65 73 22 2c 20 74 72 75 65 2c 20 77 68 61 74 49  es", true, whatI
1fcc0 66 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20  f, verbose))..  
1fcd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
1fce0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1fcf0 20 20 20 20 20 69 66 20 28 73 75 62 4b 65 79 20       if (subKey 
1fd00 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
1fd10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
1fd20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1fd30 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
1fd40 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
1fd50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1fd60 20 20 20 20 20 20 20 20 20 20 20 20 20 22 63 6f               "co
1fd70 75 6c 64 20 6e 6f 74 20 6f 70 65 6e 20 72 65 67  uld not open reg
1fd80 69 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c  istry key: {0}\\
1fd90 44 61 74 61 53 6f 75 72 63 65 73 22 2c 0d 0a 20  DataSources",.. 
1fda0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fdb0 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 29 3b             key);
1fdc0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1fdd0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
1fde0 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn 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 20 20 20 20 52 65 67 69 73 74 72 79          Registry
1fe20 48 65 6c 70 65 72 2e 44 65 6c 65 74 65 53 75 62  Helper.DeleteSub
1fe30 4b 65 79 54 72 65 65 28 0d 0a 20 20 20 20 20 20  KeyTree(..      
1fe40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fe50 20 20 73 75 62 4b 65 79 2c 20 64 61 74 61 53 6f    subKey, dataSo
1fe60 75 72 63 65 49 64 2e 54 6f 53 74 72 69 6e 67 28  urceId.ToString(
1fe70 56 73 49 64 46 6f 72 6d 61 74 29 2c 20 77 68 61  VsIdFormat), wha
1fe80 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf,..          
1fe90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76 65                ve
1fea0 72 62 6f 73 65 29 3b 0d 0a 20 20 20 20 20 20 20  rbose);..       
1feb0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
1fec0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
1fed0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
1fee0 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d  true;..        }
1fef0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
1ff00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ff10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ff20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ff30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ff40 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70  ///....        p
1ff50 72 69 76 61 74 65 20 73 74 61 74 69 63 20 62 6f  rivate static bo
1ff60 6f 6c 20 50 72 6f 63 65 73 73 56 73 44 61 74 61  ol ProcessVsData
1ff70 53 6f 75 72 63 65 28 0d 0a 20 20 20 20 20 20 20  Source(..       
1ff80 20 20 20 20 20 52 65 67 69 73 74 72 79 4b 65 79       RegistryKey
1ff90 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 20 20   rootKey,..     
1ffa0 20 20 20 20 20 20 20 56 65 72 73 69 6f 6e 20 76         Version v
1ffb0 73 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20  sVersion,..     
1ffc0 20 20 20 20 20 20 20 47 75 69 64 20 70 61 63 6b         Guid pack
1ffd0 61 67 65 49 64 2c 20 2f 2a 20 4e 4f 54 20 55 53  ageId, /* NOT US
1ffe0 45 44 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20  ED */..         
1fff0 20 20 20 47 75 69 64 20 73 65 72 76 69 63 65 49     Guid serviceI
20000 64 2c 20 2f 2a 20 4e 4f 54 20 55 53 45 44 20 2a  d, /* NOT USED *
20010 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 47  /..            G
20020 75 69 64 20 64 61 74 61 53 6f 75 72 63 65 49 64  uid dataSourceId
20030 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 47  ,..            G
20040 75 69 64 20 64 61 74 61 50 72 6f 76 69 64 65 72  uid dataProvider
20050 49 64 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  Id,..           
20060 20 6f 62 6a 65 63 74 20 63 6c 69 65 6e 74 44 61   object clientDa
20070 74 61 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ta,..           
20080 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20   bool whatIf,.. 
20090 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
200a0 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20  verbose,..      
200b0 20 20 20 20 20 20 72 65 66 20 73 74 72 69 6e 67        ref string
200c0 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20   error..        
200d0 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b      )..        {
200e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 41 6e  ..            An
200f0 79 50 61 69 72 3c 73 74 72 69 6e 67 2c 20 62 6f  yPair<string, bo
20100 6f 6c 3e 20 70 61 69 72 20 3d 20 63 6c 69 65 6e  ol> pair = clien
20110 74 44 61 74 61 20 61 73 20 41 6e 79 50 61 69 72  tData as AnyPair
20120 3c 73 74 72 69 6e 67 2c 20 62 6f 6f 6c 3e 3b 0d  <string, bool>;.
20130 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
20140 66 20 28 70 61 69 72 20 3d 3d 20 6e 75 6c 6c 29  f (pair == null)
20150 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
20160 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
20170 20 65 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69   error = "invali
20180 64 20 56 53 20 63 61 6c 6c 62 61 63 6b 20 64 61  d VS callback da
20190 74 61 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ta";..          
201a0 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
201b0 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se;..           
201c0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
201d0 20 20 69 66 20 28 70 61 69 72 2e 59 29 0d 0a 20    if (pair.Y).. 
201e0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
201f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
20200 74 75 72 6e 20 41 64 64 56 73 44 61 74 61 53 6f  turn AddVsDataSo
20210 75 72 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20  urce(..         
20220 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b             rootK
20230 65 79 2c 20 76 73 56 65 72 73 69 6f 6e 2c 20 64  ey, vsVersion, d
20240 61 74 61 53 6f 75 72 63 65 49 64 2c 20 64 61 74  ataSourceId, dat
20250 61 50 72 6f 76 69 64 65 72 49 64 2c 0d 0a 20 20  aProviderId,..  
20260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20270 20 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73    whatIf, verbos
20280 65 2c 20 72 65 66 20 65 72 72 6f 72 29 3b 0d 0a  e, ref error);..
20290 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
202a0 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d             else.
202b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
202c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
202d0 72 65 74 75 72 6e 20 52 65 6d 6f 76 65 56 73 44  return RemoveVsD
202e0 61 74 61 53 6f 75 72 63 65 28 0d 0a 20 20 20 20  ataSource(..    
202f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20300 72 6f 6f 74 4b 65 79 2c 20 76 73 56 65 72 73 69  rootKey, vsVersi
20310 6f 6e 2c 20 64 61 74 61 53 6f 75 72 63 65 49 64  on, dataSourceId
20320 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73  , whatIf, verbos
20330 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
20340 20 20 20 20 20 20 20 20 72 65 66 20 65 72 72 6f          ref erro
20350 72 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  r);..           
20360 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20   }..        }.. 
20370 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
20380 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  n....        ///
20390 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
203a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
203b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
203c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
203d0 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
203e0 23 72 65 67 69 6f 6e 20 56 69 73 75 61 6c 20 53  #region Visual S
203f0 74 75 64 69 6f 20 44 61 74 61 20 50 72 6f 76 69  tudio Data Provi
20400 64 65 72 20 48 61 6e 64 6c 69 6e 67 0d 0a 20 20  der Handling..  
20410 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
20420 61 74 69 63 20 62 6f 6f 6c 20 41 64 64 56 73 44  atic bool AddVsD
20430 61 74 61 50 72 6f 76 69 64 65 72 28 0d 0a 20 20  ataProvider(..  
20440 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74            Regist
20450 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a  ryKey rootKey,..
20460 20 20 20 20 20 20 20 20 20 20 20 20 56 65 72 73              Vers
20470 69 6f 6e 20 76 73 56 65 72 73 69 6f 6e 2c 0d 0a  ion vsVersion,..
20480 20 20 20 20 20 20 20 20 20 20 20 20 47 75 69 64              Guid
20490 20 73 65 72 76 69 63 65 49 64 2c 0d 0a 20 20 20   serviceId,..   
204a0 20 20 20 20 20 20 20 20 20 47 75 69 64 20 64 61           Guid da
204b0 74 61 50 72 6f 76 69 64 65 72 49 64 2c 0d 0a 20  taProviderId,.. 
204c0 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
204d0 67 20 66 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20  g fileName,..   
204e0 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68           bool wh
204f0 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20  atIf,..         
20500 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c     bool verbose,
20510 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
20520 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a  f string error..
20530 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
20540 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
20550 20 20 20 20 20 20 69 66 20 28 76 73 41 64 6f 4e        if (vsAdoN
20560 65 74 54 65 63 68 6e 6f 6c 6f 67 79 49 64 20 3d  etTechnologyId =
20570 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
20580 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
20590 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
205a0 22 69 6e 76 61 6c 69 64 20 41 44 4f 2e 4e 45 54  "invalid ADO.NET
205b0 20 74 65 63 68 6e 6f 6c 6f 67 79 20 49 64 22 3b   technology Id";
205c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
205d0 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
205e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
205f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
20600 72 69 6e 67 20 6b 65 79 4e 61 6d 65 20 3d 20 47  ring keyName = G
20610 65 74 56 73 4b 65 79 4e 61 6d 65 28 76 73 56 65  etVsKeyName(vsVe
20620 72 73 69 6f 6e 29 3b 0d 0a 0d 0a 20 20 20 20 20  rsion);....     
20630 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 4d 6f         using (Mo
20640 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65  ckRegistryKey ke
20650 79 20 3d 20 52 65 67 69 73 74 72 79 48 65 6c 70  y = RegistryHelp
20660 65 72 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a  er.OpenSubKey(..
20670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20680 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 6b 65 79      rootKey, key
20690 4e 61 6d 65 2c 20 66 61 6c 73 65 2c 20 77 68 61  Name, false, wha
206a0 74 49 66 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a  tIf, verbose))..
206b0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
206c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
206d0 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d  f (key == null).
206e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
206f0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
20700 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
20710 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
20720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20730 20 20 20 20 20 20 20 20 22 63 6f 75 6c 64 20 6e          "could n
20740 6f 74 20 6f 70 65 6e 20 72 65 67 69 73 74 72 79  ot open registry
20750 20 6b 65 79 3a 20 7b 30 7d 5c 5c 7b 31 7d 22 2c   key: {0}\\{1}",
20760 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
20770 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65            rootKe
20780 79 2c 20 6b 65 79 4e 61 6d 65 29 3b 0d 0a 0d 0a  y, keyName);....
20790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
207a0 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
207b0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
207c0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
207d0 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 4d          using (M
207e0 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 73  ockRegistryKey s
207f0 75 62 4b 65 79 20 3d 20 52 65 67 69 73 74 72 79  ubKey = Registry
20800 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62 4b 65  Helper.OpenSubKe
20810 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
20820 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 2c              key,
20830 20 22 44 61 74 61 50 72 6f 76 69 64 65 72 73 22   "DataProviders"
20840 2c 20 74 72 75 65 2c 20 77 68 61 74 49 66 2c 20  , true, whatIf, 
20850 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20  verbose))..     
20860 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
20870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20880 20 20 69 66 20 28 73 75 62 4b 65 79 20 3d 3d 20    if (subKey == 
20890 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
208a0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
208b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
208c0 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 53 74        error = St
208d0 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
208e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
208f0 20 20 20 20 20 20 20 20 20 20 22 63 6f 75 6c 64            "could
20900 20 6e 6f 74 20 6f 70 65 6e 20 72 65 67 69 73 74   not open regist
20910 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 44 61 74  ry key: {0}\\Dat
20920 61 50 72 6f 76 69 64 65 72 73 22 2c 0d 0a 20 20  aProviders",..  
20930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20940 20 20 20 20 20 20 20 20 20 20 6b 65 79 29 3b 0d            key);.
20950 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
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 20 20 20 20 7d 0d                }.
20990 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
209a0 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 4d 6f         using (Mo
209b0 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 64 61  ckRegistryKey da
209c0 74 61 50 72 6f 76 69 64 65 72 4b 65 79 20 3d 20  taProviderKey = 
209d0 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 43  RegistryHelper.C
209e0 72 65 61 74 65 53 75 62 4b 65 79 28 0d 0a 20 20  reateSubKey(..  
209f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20a00 20 20 20 20 20 20 20 20 20 20 73 75 62 4b 65 79            subKey
20a10 2c 20 64 61 74 61 50 72 6f 76 69 64 65 72 49 64  , dataProviderId
20a20 2e 54 6f 53 74 72 69 6e 67 28 56 73 49 64 46 6f  .ToString(VsIdFo
20a30 72 6d 61 74 29 2c 20 77 68 61 74 49 66 2c 0d 0a  rmat), whatIf,..
20a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20a50 20 20 20 20 20 20 20 20 20 20 20 20 76 65 72 62              verb
20a60 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ose))..         
20a70 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
20a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20a90 20 20 20 20 20 20 69 66 20 28 64 61 74 61 50 72        if (dataPr
20aa0 6f 76 69 64 65 72 4b 65 79 20 3d 3d 20 6e 75 6c  oviderKey == nul
20ab0 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
20ac0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
20ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20ae0 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
20af0 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74   = String.Format
20b00 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
20b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20b20 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20 63 72     "could not cr
20b30 65 61 74 65 20 72 65 67 69 73 74 72 79 20 6b 65  eate registry ke
20b40 79 3a 20 7b 30 7d 5c 5c 7b 31 7d 22 2c 0d 0a 20  y: {0}\\{1}",.. 
20b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b                 k
20b70 65 79 2c 20 64 61 74 61 50 72 6f 76 69 64 65 72  ey, dataProvider
20b80 49 64 2e 54 6f 53 74 72 69 6e 67 28 56 73 49 64  Id.ToString(VsId
20b90 46 6f 72 6d 61 74 29 29 3b 0d 0a 0d 0a 20 20 20  Format));....   
20ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20bb0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
20bc0 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
20bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20be0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
20bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67               Reg
20c00 69 73 74 72 79 48 65 6c 70 65 72 2e 53 65 74 56  istryHelper.SetV
20c10 61 6c 75 65 28 0d 0a 20 20 20 20 20 20 20 20 20  alue(..         
20c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20c30 20 20 20 64 61 74 61 50 72 6f 76 69 64 65 72 4b     dataProviderK
20c40 65 79 2c 20 6e 75 6c 6c 2c 20 44 65 73 63 72 69  ey, null, Descri
20c50 70 74 69 6f 6e 2c 20 77 68 61 74 49 66 2c 0d 0a  ption, whatIf,..
20c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20c70 20 20 20 20 20 20 20 20 20 20 20 20 76 65 72 62              verb
20c80 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ose);....       
20c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20ca0 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e   RegistryHelper.
20cb0 53 65 74 56 61 6c 75 65 28 0d 0a 20 20 20 20 20  SetValue(..     
20cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20cd0 20 20 20 20 20 20 20 64 61 74 61 50 72 6f 76 69         dataProvi
20ce0 64 65 72 4b 65 79 2c 20 22 49 6e 76 61 72 69 61  derKey, "Invaria
20cf0 6e 74 4e 61 6d 65 22 2c 20 49 6e 76 61 72 69 61  ntName", Invaria
20d00 6e 74 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20  ntName,..       
20d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20d20 20 20 20 20 20 77 68 61 74 49 66 2c 20 76 65 72       whatIf, ver
20d30 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  bose);....      
20d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20d50 20 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72    RegistryHelper
20d60 2e 53 65 74 56 61 6c 75 65 28 0d 0a 20 20 20 20  .SetValue(..    
20d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20d80 20 20 20 20 20 20 20 20 64 61 74 61 50 72 6f 76          dataProv
20d90 69 64 65 72 4b 65 79 2c 20 22 54 65 63 68 6e 6f  iderKey, "Techno
20da0 6c 6f 67 79 22 2c 0d 0a 20 20 20 20 20 20 20 20  logy",..        
20db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20dc0 20 20 20 20 28 28 47 75 69 64 29 76 73 41 64 6f      ((Guid)vsAdo
20dd0 4e 65 74 54 65 63 68 6e 6f 6c 6f 67 79 49 64 29  NetTechnologyId)
20de0 2e 54 6f 53 74 72 69 6e 67 28 56 73 49 64 46 6f  .ToString(VsIdFo
20df0 72 6d 61 74 29 2c 0d 0a 20 20 20 20 20 20 20 20  rmat),..        
20e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20e10 20 20 20 20 77 68 61 74 49 66 2c 20 76 65 72 62      whatIf, verb
20e20 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ose);....       
20e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20e40 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e   RegistryHelper.
20e50 53 65 74 56 61 6c 75 65 28 0d 0a 20 20 20 20 20  SetValue(..     
20e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20e70 20 20 20 20 20 20 20 64 61 74 61 50 72 6f 76 69         dataProvi
20e80 64 65 72 4b 65 79 2c 20 22 43 6f 64 65 42 61 73  derKey, "CodeBas
20e90 65 22 2c 20 66 69 6c 65 4e 61 6d 65 2c 20 77 68  e", fileName, wh
20ea0 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20  atIf,..         
20eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20ec0 20 20 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a     verbose);....
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 52 65 67 69 73 74 72 79          Registry
20ef0 48 65 6c 70 65 72 2e 53 65 74 56 61 6c 75 65 28  Helper.SetValue(
20f00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
20f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 61                da
20f20 74 61 50 72 6f 76 69 64 65 72 4b 65 79 2c 20 22  taProviderKey, "
20f30 46 61 63 74 6f 72 79 53 65 72 76 69 63 65 22 2c  FactoryService",
20f40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
20f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65                se
20f60 72 76 69 63 65 49 64 2e 54 6f 53 74 72 69 6e 67  rviceId.ToString
20f70 28 56 73 49 64 46 6f 72 6d 61 74 29 2c 20 77 68  (VsIdFormat), wh
20f80 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d  atIf, verbose);.
20f90 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
20fa0 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73             Regis
20fb0 74 72 79 48 65 6c 70 65 72 2e 43 72 65 61 74 65  tryHelper.Create
20fc0 53 75 62 4b 65 79 28 64 61 74 61 50 72 6f 76 69  SubKey(dataProvi
20fd0 64 65 72 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20  derKey,..       
20fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20ff0 20 20 20 20 20 22 53 75 70 70 6f 72 74 65 64 4f       "SupportedO
21000 62 6a 65 63 74 73 5c 5c 44 61 74 61 43 6f 6e 6e  bjects\\DataConn
21010 65 63 74 69 6f 6e 55 49 43 6f 6e 74 72 6f 6c 22  ectionUIControl"
21020 2c 0d 0a 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 20 77                 w
21040 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 3b  hatIf, verbose);
21050 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
21060 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69              Regi
21070 73 74 72 79 48 65 6c 70 65 72 2e 43 72 65 61 74  stryHelper.Creat
21080 65 53 75 62 4b 65 79 28 64 61 74 61 50 72 6f 76  eSubKey(dataProv
21090 69 64 65 72 4b 65 79 2c 0d 0a 20 20 20 20 20 20  iderKey,..      
210a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
210b0 20 20 20 20 20 20 22 53 75 70 70 6f 72 74 65 64        "Supported
210c0 4f 62 6a 65 63 74 73 5c 5c 44 61 74 61 43 6f 6e  Objects\\DataCon
210d0 6e 65 63 74 69 6f 6e 50 72 6f 70 65 72 74 69 65  nectionPropertie
210e0 73 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s",..           
210f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21100 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65   whatIf, verbose
21110 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
21120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65                Re
21130 67 69 73 74 72 79 48 65 6c 70 65 72 2e 43 72 65  gistryHelper.Cre
21140 61 74 65 53 75 62 4b 65 79 28 64 61 74 61 50 72  ateSubKey(dataPr
21150 6f 76 69 64 65 72 4b 65 79 2c 0d 0a 20 20 20 20  oviderKey,..    
21160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21170 20 20 20 20 20 20 20 20 22 53 75 70 70 6f 72 74          "Support
21180 65 64 4f 62 6a 65 63 74 73 5c 5c 44 61 74 61 43  edObjects\\DataC
21190 6f 6e 6e 65 63 74 69 6f 6e 53 75 70 70 6f 72 74  onnectionSupport
211a0 22 2c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20  ", whatIf,..    
211b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
211c0 20 20 20 20 20 20 20 20 76 65 72 62 6f 73 65 29          verbose)
211d0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
211e0 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67               Reg
211f0 69 73 74 72 79 48 65 6c 70 65 72 2e 43 72 65 61  istryHelper.Crea
21200 74 65 53 75 62 4b 65 79 28 64 61 74 61 50 72 6f  teSubKey(dataPro
21210 76 69 64 65 72 4b 65 79 2c 0d 0a 20 20 20 20 20  viderKey,..     
21220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21230 20 20 20 20 20 20 20 22 53 75 70 70 6f 72 74 65         "Supporte
21240 64 4f 62 6a 65 63 74 73 5c 5c 44 61 74 61 4f 62  dObjects\\DataOb
21250 6a 65 63 74 53 75 70 70 6f 72 74 22 2c 20 77 68  jectSupport", wh
21260 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20  atIf,..         
21270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21280 20 20 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a     verbose);....
21290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
212a0 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79          Registry
212b0 48 65 6c 70 65 72 2e 43 72 65 61 74 65 53 75 62  Helper.CreateSub
212c0 4b 65 79 28 64 61 74 61 50 72 6f 76 69 64 65 72  Key(dataProvider
212d0 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  Key,..          
212e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
212f0 20 20 22 53 75 70 70 6f 72 74 65 64 4f 62 6a 65    "SupportedObje
21300 63 74 73 5c 5c 44 61 74 61 56 69 65 77 53 75 70  cts\\DataViewSup
21310 70 6f 72 74 22 2c 20 77 68 61 74 49 66 2c 0d 0a  port", whatIf,..
21320 20 20 20 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 76 65 72 62              verb
21340 6f 73 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ose);..         
21350 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
21360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
21370 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
21380 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
21390 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20  turn true;..    
213a0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
213b0 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
213c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
213d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
213e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
213f0 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
21400 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74      private stat
21410 69 63 20 62 6f 6f 6c 20 52 65 6d 6f 76 65 56 73  ic bool RemoveVs
21420 44 61 74 61 50 72 6f 76 69 64 65 72 28 0d 0a 20  DataProvider(.. 
21430 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73             Regis
21440 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d  tryKey rootKey,.
21450 0a 20 20 20 20 20 20 20 20 20 20 20 20 56 65 72  .            Ver
21460 73 69 6f 6e 20 76 73 56 65 72 73 69 6f 6e 2c 0d  sion vsVersion,.
21470 0a 20 20 20 20 20 20 20 20 20 20 20 20 47 75 69  .            Gui
21480 64 20 64 61 74 61 50 72 6f 76 69 64 65 72 49 64  d dataProviderId
21490 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
214a0 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20  ool whatIf,..   
214b0 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65           bool ve
214c0 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 20  rbose,..        
214d0 20 20 20 20 72 65 66 20 73 74 72 69 6e 67 20 65      ref string e
214e0 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20  rror..          
214f0 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a    )..        {..
21500 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
21510 6e 67 20 6b 65 79 4e 61 6d 65 20 3d 20 47 65 74  ng keyName = Get
21520 56 73 4b 65 79 4e 61 6d 65 28 76 73 56 65 72 73  VsKeyName(vsVers
21530 69 6f 6e 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ion);....       
21540 20 20 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b       using (Mock
21550 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65 79 20  RegistryKey key 
21560 3d 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72  = RegistryHelper
21570 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20  .OpenSubKey(..  
21580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21590 20 20 72 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e 61    rootKey, keyNa
215a0 6d 65 2c 20 66 61 6c 73 65 2c 20 77 68 61 74 49  me, false, whatI
215b0 66 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20  f, verbose))..  
215c0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
215d0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
215e0 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  (key == null).. 
215f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
21600 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
21610 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 53 74        error = St
21620 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
21630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21640 20 20 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74        "could not
21650 20 6f 70 65 6e 20 72 65 67 69 73 74 72 79 20 6b   open registry k
21660 65 79 3a 20 7b 30 7d 5c 5c 7b 31 7d 22 2c 0d 0a  ey: {0}\\{1}",..
21670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21680 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c          rootKey,
21690 20 6b 65 79 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20   keyName);....  
216a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
216b0 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
216c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
216d0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
216e0 20 20 20 20 20 20 75 73 69 6e 67 20 28 4d 6f 63        using (Moc
216f0 6b 52 65 67 69 73 74 72 79 4b 65 79 20 73 75 62  kRegistryKey sub
21700 4b 65 79 20 3d 20 52 65 67 69 73 74 72 79 48 65  Key = RegistryHe
21710 6c 70 65 72 2e 4f 70 65 6e 53 75 62 4b 65 79 28  lper.OpenSubKey(
21720 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
21730 20 20 20 20 20 20 20 20 20 20 6b 65 79 2c 20 22            key, "
21740 44 61 74 61 50 72 6f 76 69 64 65 72 73 22 2c 20  DataProviders", 
21750 74 72 75 65 2c 20 77 68 61 74 49 66 2c 20 76 65  true, whatIf, ve
21760 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20  rbose))..       
21770 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
21780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21790 69 66 20 28 73 75 62 4b 65 79 20 3d 3d 20 6e 75  if (subKey == nu
217a0 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
217b0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
217c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
217d0 20 20 20 20 65 72 72 6f 72 20 3d 20 53 74 72 69      error = Stri
217e0 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
217f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21800 20 20 20 20 20 20 20 20 22 63 6f 75 6c 64 20 6e          "could n
21810 6f 74 20 6f 70 65 6e 20 72 65 67 69 73 74 72 79  ot open registry
21820 20 6b 65 79 3a 20 7b 30 7d 5c 5c 44 61 74 61 50   key: {0}\\DataP
21830 72 6f 76 69 64 65 72 73 22 2c 0d 0a 20 20 20 20  roviders",..    
21840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21850 20 20 20 20 20 20 20 20 6b 65 79 29 3b 0d 0a 0d          key);...
21860 0a 20 20 20 20 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 20 20 20 20 7d 0d 0a 0d              }...
218a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
218b0 20 20 20 20 20 52 65 67 69 73 74 72 79 48 65 6c       RegistryHel
218c0 70 65 72 2e 44 65 6c 65 74 65 53 75 62 4b 65 79  per.DeleteSubKey
218d0 54 72 65 65 28 0d 0a 20 20 20 20 20 20 20 20 20  Tree(..         
218e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
218f0 75 62 4b 65 79 2c 20 64 61 74 61 50 72 6f 76 69  ubKey, dataProvi
21900 64 65 72 49 64 2e 54 6f 53 74 72 69 6e 67 28 56  derId.ToString(V
21910 73 49 64 46 6f 72 6d 61 74 29 2c 20 77 68 61 74  sIdFormat), what
21920 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  If,..           
21930 20 20 20 20 20 20 20 20 20 20 20 20 20 76 65 72               ver
21940 62 6f 73 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  bose);..        
21950 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
21960 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
21970 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74          return t
21980 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  rue;..        }.
21990 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
219a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
219b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
219c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
219d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
219e0 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72  //....        pr
219f0 69 76 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f  ivate static boo
21a00 6c 20 50 72 6f 63 65 73 73 56 73 44 61 74 61 50  l ProcessVsDataP
21a10 72 6f 76 69 64 65 72 28 0d 0a 20 20 20 20 20 20  rovider(..      
21a20 20 20 20 20 20 20 52 65 67 69 73 74 72 79 4b 65        RegistryKe
21a30 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 20  y rootKey,..    
21a40 20 20 20 20 20 20 20 20 56 65 72 73 69 6f 6e 20          Version 
21a50 76 73 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20  vsVersion,..    
21a60 20 20 20 20 20 20 20 20 47 75 69 64 20 70 61 63          Guid pac
21a70 6b 61 67 65 49 64 2c 20 2f 2a 20 4e 4f 54 20 55  kageId, /* NOT U
21a80 53 45 44 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20  SED */..        
21a90 20 20 20 20 47 75 69 64 20 73 65 72 76 69 63 65      Guid service
21aa0 49 64 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  Id,..           
21ab0 20 47 75 69 64 20 64 61 74 61 53 6f 75 72 63 65   Guid dataSource
21ac0 49 64 2c 20 2f 2a 20 4e 4f 54 20 55 53 45 44 20  Id, /* NOT USED 
21ad0 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  */..            
21ae0 47 75 69 64 20 64 61 74 61 50 72 6f 76 69 64 65  Guid dataProvide
21af0 72 49 64 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  rId,..          
21b00 20 20 6f 62 6a 65 63 74 20 63 6c 69 65 6e 74 44    object clientD
21b10 61 74 61 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ata,..          
21b20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a    bool whatIf,..
21b30 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
21b40 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20   verbose,..     
21b50 20 20 20 20 20 20 20 72 65 66 20 73 74 72 69 6e         ref strin
21b60 67 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20  g error..       
21b70 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
21b80 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 41  {..            A
21b90 6e 79 50 61 69 72 3c 73 74 72 69 6e 67 2c 20 62  nyPair<string, b
21ba0 6f 6f 6c 3e 20 70 61 69 72 20 3d 20 63 6c 69 65  ool> pair = clie
21bb0 6e 74 44 61 74 61 20 61 73 20 41 6e 79 50 61 69  ntData as AnyPai
21bc0 72 3c 73 74 72 69 6e 67 2c 20 62 6f 6f 6c 3e 3b  r<string, bool>;
21bd0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
21be0 69 66 20 28 70 61 69 72 20 3d 3d 20 6e 75 6c 6c  if (pair == null
21bf0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
21c00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
21c10 20 20 65 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c    error = "inval
21c20 69 64 20 56 53 20 63 61 6c 6c 62 61 63 6b 20 64  id VS callback d
21c30 61 74 61 22 3b 0d 0a 20 20 20 20 20 20 20 20 20  ata";..         
21c40 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
21c50 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lse;..          
21c60 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
21c70 20 20 20 69 66 20 28 70 61 69 72 2e 59 29 0d 0a     if (pair.Y)..
21c80 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
21c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
21ca0 65 74 75 72 6e 20 41 64 64 56 73 44 61 74 61 50  eturn AddVsDataP
21cb0 72 6f 76 69 64 65 72 28 0d 0a 20 20 20 20 20 20  rovider(..      
21cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f                ro
21cd0 6f 74 4b 65 79 2c 20 76 73 56 65 72 73 69 6f 6e  otKey, vsVersion
21ce0 2c 20 73 65 72 76 69 63 65 49 64 2c 20 64 61 74  , serviceId, dat
21cf0 61 50 72 6f 76 69 64 65 72 49 64 2c 20 70 61 69  aProviderId, pai
21d00 72 2e 58 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  r.X,..          
21d10 20 20 20 20 20 20 20 20 20 20 77 68 61 74 49 66            whatIf
21d20 2c 20 76 65 72 62 6f 73 65 2c 20 72 65 66 20 65  , verbose, ref e
21d30 72 72 6f 72 29 3b 0d 0a 20 20 20 20 20 20 20 20  rror);..        
21d40 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
21d50 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20     else..       
21d60 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
21d70 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 52          return R
21d80 65 6d 6f 76 65 56 73 44 61 74 61 50 72 6f 76 69  emoveVsDataProvi
21d90 64 65 72 28 0d 0a 20 20 20 20 20 20 20 20 20 20  der(..          
21da0 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65            rootKe
21db0 79 2c 20 76 73 56 65 72 73 69 6f 6e 2c 20 64 61  y, vsVersion, da
21dc0 74 61 50 72 6f 76 69 64 65 72 49 64 2c 20 77 68  taProviderId, wh
21dd0 61 74 49 66 2c 20 76 65 72 62 6f 73 65 2c 0d 0a  atIf, verbose,..
21de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21df0 20 20 20 20 72 65 66 20 65 72 72 6f 72 29 3b 0d      ref error);.
21e00 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
21e10 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
21e20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
21e30 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
21e40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21e50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21e60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21e70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21e80 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67  ....        #reg
21e90 69 6f 6e 20 56 69 73 75 61 6c 20 53 74 75 64 69  ion Visual Studi
21ea0 6f 20 50 61 63 6b 61 67 65 20 48 61 6e 64 6c 69  o Package Handli
21eb0 6e 67 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  ng..        priv
21ec0 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f 6c 20  ate static bool 
21ed0 41 64 64 56 73 50 61 63 6b 61 67 65 28 0d 0a 20  AddVsPackage(.. 
21ee0 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73             Regis
21ef0 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d  tryKey rootKey,.
21f00 0a 20 20 20 20 20 20 20 20 20 20 20 20 56 65 72  .            Ver
21f10 73 69 6f 6e 20 76 73 56 65 72 73 69 6f 6e 2c 0d  sion vsVersion,.
21f20 0a 20 20 20 20 20 20 20 20 20 20 20 20 47 75 69  .            Gui
21f30 64 20 70 61 63 6b 61 67 65 49 64 2c 0d 0a 20 20  d packageId,..  
21f40 20 20 20 20 20 20 20 20 20 20 47 75 69 64 20 73            Guid s
21f50 65 72 76 69 63 65 49 64 2c 0d 0a 20 20 20 20 20  erviceId,..     
21f60 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 66 69         string fi
21f70 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20  leName,..       
21f80 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66       bool whatIf
21f90 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
21fa0 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20  ool verbose,..  
21fb0 20 20 20 20 20 20 20 20 20 20 72 65 66 20 73 74            ref st
21fc0 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20 20  ring error..    
21fd0 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
21fe0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
21ff0 20 20 73 74 72 69 6e 67 20 6b 65 79 4e 61 6d 65    string keyName
22000 20 3d 20 47 65 74 56 73 4b 65 79 4e 61 6d 65 28   = GetVsKeyName(
22010 76 73 56 65 72 73 69 6f 6e 29 3b 0d 0a 0d 0a 20  vsVersion);.... 
22020 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67             using
22030 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65   (MockRegistryKe
22040 79 20 6b 65 79 20 3d 20 52 65 67 69 73 74 72 79  y key = Registry
22050 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62 4b 65  Helper.OpenSubKe
22060 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
22070 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c          rootKey,
22080 20 6b 65 79 4e 61 6d 65 2c 20 66 61 6c 73 65 2c   keyName, false,
22090 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65   whatIf, verbose
220a0 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
220b0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
220c0 20 20 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75     if (key == nu
220d0 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
220e0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
220f0 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
22100 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  r = String.Forma
22110 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
22120 20 20 20 20 20 20 20 20 20 20 20 20 22 63 6f 75              "cou
22130 6c 64 20 6e 6f 74 20 6f 70 65 6e 20 72 65 67 69  ld not open regi
22140 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 7b  stry key: {0}\\{
22150 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  1}",..          
22160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f                ro
22170 6f 74 4b 65 79 2c 20 6b 65 79 4e 61 6d 65 29 3b  otKey, keyName);
22180 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
22190 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
221a0 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
221b0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
221c0 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e              usin
221d0 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b  g (MockRegistryK
221e0 65 79 20 73 75 62 4b 65 79 20 3d 20 52 65 67 69  ey subKey = Regi
221f0 73 74 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53  stryHelper.OpenS
22200 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20  ubKey(..        
22210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22220 6b 65 79 2c 20 22 50 61 63 6b 61 67 65 73 22 2c  key, "Packages",
22230 20 74 72 75 65 2c 20 77 68 61 74 49 66 2c 20 76   true, whatIf, v
22240 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20  erbose))..      
22250 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
22260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22270 20 69 66 20 28 73 75 62 4b 65 79 20 3d 3d 20 6e   if (subKey == n
22280 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
22290 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
222a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
222b0 20 20 20 20 20 65 72 72 6f 72 20 3d 20 53 74 72       error = Str
222c0 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
222d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
222e0 20 20 20 20 20 20 20 20 20 22 63 6f 75 6c 64 20           "could 
222f0 6e 6f 74 20 6f 70 65 6e 20 72 65 67 69 73 74 72  not open registr
22300 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 50 61 63 6b  y key: {0}\\Pack
22310 61 67 65 73 22 2c 0d 0a 20 20 20 20 20 20 20 20  ages",..        
22320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22330 20 20 20 20 6b 65 79 29 3b 0d 0a 0d 0a 20 20 20      key);....   
22340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22350 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
22360 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
22370 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
22380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22390 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69   using (MockRegi
223a0 73 74 72 79 4b 65 79 20 70 61 63 6b 61 67 65 4b  stryKey packageK
223b0 65 79 20 3d 20 52 65 67 69 73 74 72 79 48 65 6c  ey = RegistryHel
223c0 70 65 72 2e 43 72 65 61 74 65 53 75 62 4b 65 79  per.CreateSubKey
223d0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
223e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
223f0 75 62 4b 65 79 2c 20 70 61 63 6b 61 67 65 49 64  ubKey, packageId
22400 2e 54 6f 53 74 72 69 6e 67 28 56 73 49 64 46 6f  .ToString(VsIdFo
22410 72 6d 61 74 29 2c 20 77 68 61 74 49 66 2c 0d 0a  rmat), whatIf,..
22420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22430 20 20 20 20 20 20 20 20 20 20 20 20 76 65 72 62              verb
22440 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ose))..         
22450 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
22460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22470 20 20 20 20 20 20 69 66 20 28 70 61 63 6b 61 67        if (packag
22480 65 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  eKey == null).. 
22490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
224a0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
224b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
224c0 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 53 74        error = St
224d0 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
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 20 20 20 22 63                "c
22500 6f 75 6c 64 20 6e 6f 74 20 63 72 65 61 74 65 20  ould not create 
22510 72 65 67 69 73 74 72 79 20 6b 65 79 3a 20 7b 30  registry key: {0
22520 7d 5c 5c 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20  }\\{1}",..      
22530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22540 20 20 20 20 20 20 20 20 20 20 6b 65 79 2c 20 70            key, p
22550 61 63 6b 61 67 65 49 64 2e 54 6f 53 74 72 69 6e  ackageId.ToStrin
22560 67 28 56 73 49 64 46 6f 72 6d 61 74 29 29 3b 0d  g(VsIdFormat));.
22570 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
22580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
22590 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
225a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
225b0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
225c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
225d0 20 20 20 52 65 67 69 73 74 72 79 48 65 6c 70 65     RegistryHelpe
225e0 72 2e 53 65 74 56 61 6c 75 65 28 70 61 63 6b 61  r.SetValue(packa
225f0 67 65 4b 65 79 2c 20 6e 75 6c 6c 2c 20 53 74 72  geKey, null, Str
22600 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
22610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22620 20 20 20 20 20 20 20 20 20 22 7b 30 7d 20 44 65           "{0} De
22630 73 69 67 6e 65 72 20 50 61 63 6b 61 67 65 22 2c  signer Package",
22640 20 50 72 6f 6a 65 63 74 4e 61 6d 65 29 2c 20 77   ProjectName), w
22650 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20  hatIf,..        
22660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22670 20 20 20 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d      verbose);...
22680 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
22690 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72           Registr
226a0 79 48 65 6c 70 65 72 2e 53 65 74 56 61 6c 75 65  yHelper.SetValue
226b0 28 70 61 63 6b 61 67 65 4b 65 79 2c 20 22 43 6c  (packageKey, "Cl
226c0 61 73 73 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  ass",..         
226d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
226e0 20 20 20 22 53 51 4c 69 74 65 2e 44 65 73 69 67     "SQLite.Desig
226f0 6e 65 72 2e 53 51 4c 69 74 65 50 61 63 6b 61 67  ner.SQLitePackag
22700 65 22 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62  e", whatIf, verb
22710 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ose);....       
22720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22730 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e   RegistryHelper.
22740 53 65 74 56 61 6c 75 65 28 70 61 63 6b 61 67 65  SetValue(package
22750 4b 65 79 2c 20 22 43 6f 64 65 42 61 73 65 22 2c  Key, "CodeBase",
22760 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
22770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 69                fi
22780 6c 65 4e 61 6d 65 2c 20 77 68 61 74 49 66 2c 20  leName, whatIf, 
22790 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20  verbose);....   
227a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
227b0 20 20 20 20 20 52 65 67 69 73 74 72 79 48 65 6c       RegistryHel
227c0 70 65 72 2e 53 65 74 56 61 6c 75 65 28 70 61 63  per.SetValue(pac
227d0 6b 61 67 65 4b 65 79 2c 20 22 49 44 22 2c 20 34  kageKey, "ID", 4
227e0 30 30 2c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20  00, whatIf,..   
227f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22800 20 20 20 20 20 20 20 20 20 76 65 72 62 6f 73 65           verbose
22810 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
22820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65                Re
22830 67 69 73 74 72 79 48 65 6c 70 65 72 2e 53 65 74  gistryHelper.Set
22840 56 61 6c 75 65 28 70 61 63 6b 61 67 65 4b 65 79  Value(packageKey
22850 2c 20 22 49 6e 70 72 6f 63 53 65 72 76 65 72 33  , "InprocServer3
22860 32 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  2",..           
22870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22880 20 50 61 74 68 2e 43 6f 6d 62 69 6e 65 28 45 6e   Path.Combine(En
22890 76 69 72 6f 6e 6d 65 6e 74 2e 53 79 73 74 65 6d  vironment.System
228a0 44 69 72 65 63 74 6f 72 79 2c 0d 0a 20 20 20 20  Directory,..    
228b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
228c0 20 20 20 20 20 20 20 20 20 20 20 20 22 6d 73 63              "msc
228d0 6f 72 65 65 2e 64 6c 6c 22 29 2c 20 77 68 61 74  oree.dll"), what
228e0 49 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d  If, verbose);...
228f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
22900 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72           Registr
22910 79 48 65 6c 70 65 72 2e 53 65 74 56 61 6c 75 65  yHelper.SetValue
22920 28 70 61 63 6b 61 67 65 4b 65 79 2c 20 22 43 6f  (packageKey, "Co
22930 6d 70 61 6e 79 4e 61 6d 65 22 2c 0d 0a 20 20 20  mpanyName",..   
22940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22950 20 20 20 20 20 20 20 20 20 22 68 74 74 70 3a 2f           "http:/
22960 2f 73 79 73 74 65 6d 2e 64 61 74 61 2e 73 71 6c  /system.data.sql
22970 69 74 65 2e 6f 72 67 2f 22 2c 20 77 68 61 74 49  ite.org/", whatI
22980 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a  f, verbose);....
22990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
229a0 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79          Registry
229b0 48 65 6c 70 65 72 2e 53 65 74 56 61 6c 75 65 28  Helper.SetValue(
229c0 70 61 63 6b 61 67 65 4b 65 79 2c 20 22 4d 69 6e  packageKey, "Min
229d0 45 64 69 74 69 6f 6e 22 2c 0d 0a 20 20 20 20 20  Edition",..     
229e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
229f0 20 20 20 20 20 20 20 22 73 74 61 6e 64 61 72 64         "standard
22a00 22 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f  ", whatIf, verbo
22a10 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  se);....        
22a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22a30 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 53  RegistryHelper.S
22a40 65 74 56 61 6c 75 65 28 70 61 63 6b 61 67 65 4b  etValue(packageK
22a50 65 79 2c 20 22 50 72 6f 64 75 63 74 4e 61 6d 65  ey, "ProductName
22a60 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
22a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22a80 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22 7b  String.Format("{
22a90 30 7d 20 44 65 73 69 67 6e 65 72 20 50 61 63 6b  0} Designer Pack
22aa0 61 67 65 22 2c 20 50 72 6f 6a 65 63 74 4e 61 6d  age", ProjectNam
22ab0 65 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e),..           
22ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22ad0 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65   whatIf, verbose
22ae0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
22af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65                Re
22b00 67 69 73 74 72 79 48 65 6c 70 65 72 2e 53 65 74  gistryHelper.Set
22b10 56 61 6c 75 65 28 70 61 63 6b 61 67 65 4b 65 79  Value(packageKey
22b20 2c 20 22 50 72 6f 64 75 63 74 56 65 72 73 69 6f  , "ProductVersio
22b30 6e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n",..           
22b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22b50 20 22 31 2e 30 22 2c 20 77 68 61 74 49 66 2c 20   "1.0", whatIf, 
22b60 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20  verbose);....   
22b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22b80 20 20 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b       using (Mock
22b90 52 65 67 69 73 74 72 79 4b 65 79 20 74 6f 6f 6c  RegistryKey tool
22ba0 62 6f 78 4b 65 79 20 3d 20 52 65 67 69 73 74 72  boxKey = Registr
22bb0 79 48 65 6c 70 65 72 2e 43 72 65 61 74 65 53 75  yHelper.CreateSu
22bc0 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20  bKey(..         
22bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22be0 20 20 20 20 20 20 20 70 61 63 6b 61 67 65 4b 65         packageKe
22bf0 79 2c 20 22 54 6f 6f 6c 62 6f 78 22 2c 20 77 68  y, "Toolbox", wh
22c00 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 29 0d  atIf, verbose)).
22c10 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
22c20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
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 20 69 66 20 28 74 6f 6f 6c          if (tool
22c50 62 6f 78 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d  boxKey == null).
22c60 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
22c70 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
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 20 20 20 20 20 20 20 20                  
22ca0 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46  error = String.F
22cb0 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
22cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22cd0 20 20 20 20 20 20 20 20 20 20 20 20 22 63 6f 75              "cou
22ce0 6c 64 20 6e 6f 74 20 63 72 65 61 74 65 20 72 65  ld not create re
22cf0 67 69 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c  gistry key: {0}\
22d00 5c 54 6f 6f 6c 62 6f 78 22 2c 0d 0a 20 20 20 20  \Toolbox",..    
22d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22d30 70 61 63 6b 61 67 65 4b 65 79 29 3b 0d 0a 0d 0a  packageKey);....
22d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22d60 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20  return false;.. 
22d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22d80 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
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 52 65 67 69              Regi
22db0 73 74 72 79 48 65 6c 70 65 72 2e 53 65 74 56 61  stryHelper.SetVa
22dc0 6c 75 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  lue(..          
22dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22de0 20 20 20 20 20 20 74 6f 6f 6c 62 6f 78 4b 65 79        toolboxKey
22df0 2c 20 22 44 65 66 61 75 6c 74 20 49 74 65 6d 73  , "Default Items
22e00 22 2c 20 33 2c 20 77 68 61 74 49 66 2c 0d 0a 20  ", 3, whatIf,.. 
22e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76                 v
22e30 65 72 62 6f 73 65 29 3b 0d 0a 20 20 20 20 20 20  erbose);..      
22e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22e50 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
22e60 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
22e70 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
22e80 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
22e90 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69   using (MockRegi
22ea0 73 74 72 79 4b 65 79 20 73 75 62 4b 65 79 20 3d  stryKey subKey =
22eb0 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e   RegistryHelper.
22ec0 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20  OpenSubKey(..   
22ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22ee0 20 20 20 20 20 6b 65 79 2c 20 22 4d 65 6e 75 73       key, "Menus
22ef0 22 2c 20 74 72 75 65 2c 20 77 68 61 74 49 66 2c  ", true, whatIf,
22f00 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20   verbose))..    
22f10 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
22f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22f30 20 20 20 69 66 20 28 73 75 62 4b 65 79 20 3d 3d     if (subKey ==
22f40 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
22f50 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
22f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22f70 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 53         error = S
22f80 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
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 22 63 6f 75 6c             "coul
22fb0 64 20 6e 6f 74 20 6f 70 65 6e 20 72 65 67 69 73  d not open regis
22fc0 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 4d 65  try key: {0}\\Me
22fd0 6e 75 73 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  nus",..         
22fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22ff0 20 20 20 6b 65 79 29 3b 0d 0a 0d 0a 20 20 20 20     key);....    
23000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23010 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
23020 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
23030 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
23040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23050 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 53  RegistryHelper.S
23060 65 74 56 61 6c 75 65 28 0d 0a 20 20 20 20 20 20  etValue(..      
23070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23080 20 20 73 75 62 4b 65 79 2c 20 70 61 63 6b 61 67    subKey, packag
23090 65 49 64 2e 54 6f 53 74 72 69 6e 67 28 56 73 49  eId.ToString(VsI
230a0 64 46 6f 72 6d 61 74 29 2c 20 22 2c 20 31 30 30  dFormat), ", 100
230b0 30 2c 20 33 22 2c 0d 0a 20 20 20 20 20 20 20 20  0, 3",..        
230c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
230d0 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29  whatIf, verbose)
230e0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
230f0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
23100 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 4d          using (M
23110 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 73  ockRegistryKey s
23120 75 62 4b 65 79 20 3d 20 52 65 67 69 73 74 72 79  ubKey = Registry
23130 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62 4b 65  Helper.OpenSubKe
23140 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
23150 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 2c              key,
23160 20 22 53 65 72 76 69 63 65 73 22 2c 20 74 72 75   "Services", tru
23170 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f  e, whatIf, verbo
23180 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  se))..          
23190 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
231a0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
231b0 28 73 75 62 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29  (subKey == null)
231c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
231d0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
231e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
231f0 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e   error = String.
23200 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
23210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23220 20 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20       "could not 
23230 6f 70 65 6e 20 72 65 67 69 73 74 72 79 20 6b 65  open registry ke
23240 79 3a 20 7b 30 7d 5c 5c 53 65 72 76 69 63 65 73  y: {0}\\Services
23250 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
23260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23270 6b 65 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  key);....       
23280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23290 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
232a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
232b0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
232c0 20 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69               usi
232d0 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79  ng (MockRegistry
232e0 4b 65 79 20 73 65 72 76 69 63 65 4b 65 79 20 3d  Key serviceKey =
232f0 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e   RegistryHelper.
23300 43 72 65 61 74 65 53 75 62 4b 65 79 28 0d 0a 20  CreateSubKey(.. 
23310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23320 20 20 20 20 20 20 20 20 20 20 20 73 75 62 4b 65             subKe
23330 79 2c 20 73 65 72 76 69 63 65 49 64 2e 54 6f 53  y, serviceId.ToS
23340 74 72 69 6e 67 28 56 73 49 64 46 6f 72 6d 61 74  tring(VsIdFormat
23350 29 2c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20  ), whatIf,..    
23360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23370 20 20 20 20 20 20 20 20 76 65 72 62 6f 73 65 29          verbose)
23380 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
23390 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
233a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
233b0 20 20 69 66 20 28 73 65 72 76 69 63 65 4b 65 79    if (serviceKey
233c0 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
233d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
233e0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
233f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23400 20 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67    error = String
23410 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
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 20 20 20 22 63 6f 75 6c 64            "could
23440 20 6e 6f 74 20 63 72 65 61 74 65 20 72 65 67 69   not create regi
23450 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 7b  stry key: {0}\\{
23460 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  1}",..          
23470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23480 20 20 20 20 20 20 6b 65 79 2c 20 73 65 72 76 69        key, servi
23490 63 65 49 64 2e 54 6f 53 74 72 69 6e 67 28 56 73  ceId.ToString(Vs
234a0 49 64 46 6f 72 6d 61 74 29 29 3b 0d 0a 0d 0a 20  IdFormat));.... 
234b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
234c0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
234d0 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
234e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
234f0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
23500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52                 R
23510 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 53 65  egistryHelper.Se
23520 74 56 61 6c 75 65 28 73 65 72 76 69 63 65 4b 65  tValue(serviceKe
23530 79 2c 20 6e 75 6c 6c 2c 0d 0a 20 20 20 20 20 20  y, null,..      
23540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23550 20 20 20 20 20 20 70 61 63 6b 61 67 65 49 64 2e        packageId.
23560 54 6f 53 74 72 69 6e 67 28 56 73 49 64 46 6f 72  ToString(VsIdFor
23570 6d 61 74 29 2c 20 77 68 61 74 49 66 2c 20 76 65  mat), whatIf, ve
23580 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  rbose);....     
23590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
235a0 20 20 20 52 65 67 69 73 74 72 79 48 65 6c 70 65     RegistryHelpe
235b0 72 2e 53 65 74 56 61 6c 75 65 28 73 65 72 76 69  r.SetValue(servi
235c0 63 65 4b 65 79 2c 20 22 4e 61 6d 65 22 2c 0d 0a  ceKey, "Name",..
235d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
235e0 20 20 20 20 20 20 20 20 20 20 20 20 53 74 72 69              Stri
235f0 6e 67 2e 46 6f 72 6d 61 74 28 22 7b 30 7d 20 44  ng.Format("{0} D
23600 65 73 69 67 6e 65 72 20 53 65 72 76 69 63 65 22  esigner Service"
23610 2c 20 50 72 6f 6a 65 63 74 4e 61 6d 65 29 2c 0d  , ProjectName),.
23620 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
23630 20 20 20 20 20 20 20 20 20 20 20 20 20 77 68 61               wha
23640 74 49 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a  tIf, verbose);..
23650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23660 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
23670 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
23680 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
23690 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72         return tr
236a0 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ue;..        }..
236b0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
236c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
236d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
236e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
236f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23700 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69  /....        pri
23710 76 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f 6c  vate static bool
23720 20 52 65 6d 6f 76 65 56 73 50 61 63 6b 61 67 65   RemoveVsPackage
23730 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 52  (..            R
23740 65 67 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b  egistryKey rootK
23750 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey,..           
23760 20 56 65 72 73 69 6f 6e 20 76 73 56 65 72 73 69   Version vsVersi
23770 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on,..           
23780 20 47 75 69 64 20 70 61 63 6b 61 67 65 49 64 2c   Guid packageId,
23790 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 47 75  ..            Gu
237a0 69 64 20 73 65 72 76 69 63 65 49 64 2c 0d 0a 20  id serviceId,.. 
237b0 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
237c0 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20  whatIf,..       
237d0 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73       bool verbos
237e0 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
237f0 72 65 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72  ref string error
23800 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d  ..            ).
23810 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
23820 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6b          string k
23830 65 79 4e 61 6d 65 20 3d 20 47 65 74 56 73 4b 65  eyName = GetVsKe
23840 79 4e 61 6d 65 28 76 73 56 65 72 73 69 6f 6e 29  yName(vsVersion)
23850 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
23860 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69   using (MockRegi
23870 73 74 72 79 4b 65 79 20 6b 65 79 20 3d 20 52 65  stryKey key = Re
23880 67 69 73 74 72 79 48 65 6c 70 65 72 2e 4f 70 65  gistryHelper.Ope
23890 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20  nSubKey(..      
238a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f                ro
238b0 6f 74 4b 65 79 2c 20 6b 65 79 4e 61 6d 65 2c 20  otKey, keyName, 
238c0 66 61 6c 73 65 2c 20 77 68 61 74 49 66 2c 20 76  false, whatIf, v
238d0 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20  erbose))..      
238e0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
238f0 20 20 20 20 20 20 20 20 20 69 66 20 28 6b 65 79           if (key
23900 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
23910 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
23920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23930 20 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67    error = String
23940 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
23950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23960 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20 6f 70 65    "could not ope
23970 6e 20 72 65 67 69 73 74 72 79 20 6b 65 79 3a 20  n registry key: 
23980 7b 30 7d 5c 5c 7b 31 7d 22 2c 0d 0a 20 20 20 20  {0}\\{1}",..    
23990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
239a0 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 6b 65 79      rootKey, key
239b0 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  Name);....      
239c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
239d0 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
239e0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
239f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
23a00 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67    using (MockReg
23a10 69 73 74 72 79 4b 65 79 20 73 75 62 4b 65 79 20  istryKey subKey 
23a20 3d 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72  = RegistryHelper
23a30 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20  .OpenSubKey(..  
23a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23a50 20 20 20 20 20 20 6b 65 79 2c 20 22 50 61 63 6b        key, "Pack
23a60 61 67 65 73 22 2c 20 74 72 75 65 2c 20 77 68 61  ages", true, wha
23a70 74 49 66 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a  tIf, verbose))..
23a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23a90 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
23aa0 20 20 20 20 20 20 20 69 66 20 28 73 75 62 4b 65         if (subKe
23ab0 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  y == null)..    
23ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23ad0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
23ae0 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
23af0 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74   = String.Format
23b00 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
23b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
23b20 63 6f 75 6c 64 20 6e 6f 74 20 6f 70 65 6e 20 72  could not open r
23b30 65 67 69 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d  egistry key: {0}
23b40 5c 5c 50 61 63 6b 61 67 65 73 22 2c 0d 0a 20 20  \\Packages",..  
23b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23b60 20 20 20 20 20 20 20 20 20 20 6b 65 79 29 3b 0d            key);.
23b70 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
23b80 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
23b90 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
23ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
23bb0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
23bc0 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79 48         RegistryH
23bd0 65 6c 70 65 72 2e 44 65 6c 65 74 65 53 75 62 4b  elper.DeleteSubK
23be0 65 79 54 72 65 65 28 0d 0a 20 20 20 20 20 20 20  eyTree(..       
23bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23c00 20 6b 65 79 2c 20 70 61 63 6b 61 67 65 49 64 2e   key, packageId.
23c10 54 6f 53 74 72 69 6e 67 28 56 73 49 64 46 6f 72  ToString(VsIdFor
23c20 6d 61 74 29 2c 20 77 68 61 74 49 66 2c 20 76 65  mat), whatIf, ve
23c30 72 62 6f 73 65 29 3b 0d 0a 20 20 20 20 20 20 20  rbose);..       
23c40 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
23c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 75 73                us
23c60 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72  ing (MockRegistr
23c70 79 4b 65 79 20 73 75 62 4b 65 79 20 3d 20 52 65  yKey subKey = Re
23c80 67 69 73 74 72 79 48 65 6c 70 65 72 2e 4f 70 65  gistryHelper.Ope
23c90 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20  nSubKey(..      
23ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23cb0 20 20 6b 65 79 2c 20 22 4d 65 6e 75 73 22 2c 20    key, "Menus", 
23cc0 74 72 75 65 2c 20 77 68 61 74 49 66 2c 20 76 65  true, whatIf, ve
23cd0 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20  rbose))..       
23ce0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
23cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23d00 69 66 20 28 73 75 62 4b 65 79 20 3d 3d 20 6e 75  if (subKey == nu
23d10 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
23d20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
23d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23d40 20 20 20 20 65 72 72 6f 72 20 3d 20 53 74 72 69      error = Stri
23d50 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
23d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23d70 20 20 20 20 20 20 20 20 22 63 6f 75 6c 64 20 6e          "could n
23d80 6f 74 20 6f 70 65 6e 20 72 65 67 69 73 74 72 79  ot open registry
23d90 20 6b 65 79 3a 20 7b 30 7d 5c 5c 4d 65 6e 75 73   key: {0}\\Menus
23da0 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
23db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23dc0 6b 65 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  key);....       
23dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23de0 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
23df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23e00 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
23e10 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67               Reg
23e20 69 73 74 72 79 48 65 6c 70 65 72 2e 44 65 6c 65  istryHelper.Dele
23e30 74 65 56 61 6c 75 65 28 0d 0a 20 20 20 20 20 20  teValue(..      
23e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23e50 20 20 73 75 62 4b 65 79 2c 20 70 61 63 6b 61 67    subKey, packag
23e60 65 49 64 2e 54 6f 53 74 72 69 6e 67 28 56 73 49  eId.ToString(VsI
23e70 64 46 6f 72 6d 61 74 29 2c 20 77 68 61 74 49 66  dFormat), whatIf
23e80 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
23e90 20 20 20 20 20 20 20 20 20 20 20 76 65 72 62 6f             verbo
23ea0 73 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  se);..          
23eb0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
23ec0 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67             using
23ed0 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65   (MockRegistryKe
23ee0 79 20 73 75 62 4b 65 79 20 3d 20 52 65 67 69 73  y subKey = Regis
23ef0 74 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75  tryHelper.OpenSu
23f00 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20  bKey(..         
23f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b                 k
23f20 65 79 2c 20 22 53 65 72 76 69 63 65 73 22 2c 20  ey, "Services", 
23f30 74 72 75 65 2c 20 77 68 61 74 49 66 2c 20 76 65  true, whatIf, ve
23f40 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20  rbose))..       
23f50 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
23f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23f70 69 66 20 28 73 75 62 4b 65 79 20 3d 3d 20 6e 75  if (subKey == nu
23f80 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
23f90 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
23fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23fb0 20 20 20 20 65 72 72 6f 72 20 3d 20 53 74 72 69      error = Stri
23fc0 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
23fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23fe0 20 20 20 20 20 20 20 20 22 63 6f 75 6c 64 20 6e          "could n
23ff0 6f 74 20 6f 70 65 6e 20 72 65 67 69 73 74 72 79  ot open registry
24000 20 6b 65 79 3a 20 7b 30 7d 5c 5c 53 65 72 76 69   key: {0}\\Servi
24010 63 65 73 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  ces",..         
24020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24030 20 20 20 6b 65 79 29 3b 0d 0a 0d 0a 20 20 20 20     key);....    
24040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24050 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
24060 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
24070 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
24080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24090 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 44  RegistryHelper.D
240a0 65 6c 65 74 65 53 75 62 4b 65 79 54 72 65 65 28  eleteSubKeyTree(
240b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
240c0 20 20 20 20 20 20 20 20 20 20 73 75 62 4b 65 79            subKey
240d0 2c 20 73 65 72 76 69 63 65 49 64 2e 54 6f 53 74  , serviceId.ToSt
240e0 72 69 6e 67 28 56 73 49 64 46 6f 72 6d 61 74 29  ring(VsIdFormat)
240f0 2c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20  , whatIf,..     
24100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24110 20 20 20 76 65 72 62 6f 73 65 29 3b 0d 0a 20 20     verbose);..  
24120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
24130 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
24140 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
24150 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20  turn true;..    
24160 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
24170 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
24180 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24190 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
241a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
241b0 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
241c0 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74      private stat
241d0 69 63 20 62 6f 6f 6c 20 50 72 6f 63 65 73 73 56  ic bool ProcessV
241e0 73 50 61 63 6b 61 67 65 28 0d 0a 20 20 20 20 20  sPackage(..     
241f0 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79 4b         RegistryK
24200 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20  ey rootKey,..   
24210 20 20 20 20 20 20 20 20 20 56 65 72 73 69 6f 6e           Version
24220 20 76 73 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20   vsVersion,..   
24230 20 20 20 20 20 20 20 20 20 47 75 69 64 20 70 61           Guid pa
24240 63 6b 61 67 65 49 64 2c 0d 0a 20 20 20 20 20 20  ckageId,..      
24250 20 20 20 20 20 20 47 75 69 64 20 73 65 72 76 69        Guid servi
24260 63 65 49 64 2c 0d 0a 20 20 20 20 20 20 20 20 20  ceId,..         
24270 20 20 20 47 75 69 64 20 64 61 74 61 53 6f 75 72     Guid dataSour
24280 63 65 49 64 2c 0d 0a 20 20 20 20 20 20 20 20 20  ceId,..         
24290 20 20 20 47 75 69 64 20 64 61 74 61 50 72 6f 76     Guid dataProv
242a0 69 64 65 72 49 64 2c 0d 0a 20 20 20 20 20 20 20  iderId,..       
242b0 20 20 20 20 20 6f 62 6a 65 63 74 20 63 6c 69 65       object clie
242c0 6e 74 44 61 74 61 2c 0d 0a 20 20 20 20 20 20 20  ntData,..       
242d0 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66       bool whatIf
242e0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
242f0 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20  ool verbose,..  
24300 20 20 20 20 20 20 20 20 20 20 72 65 66 20 73 74            ref st
24310 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20 20  ring error..    
24320 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
24330 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
24340 20 20 41 6e 79 50 61 69 72 3c 73 74 72 69 6e 67    AnyPair<string
24350 2c 20 62 6f 6f 6c 3e 20 70 61 69 72 20 3d 20 63  , bool> pair = c
24360 6c 69 65 6e 74 44 61 74 61 20 61 73 20 41 6e 79  lientData as Any
24370 50 61 69 72 3c 73 74 72 69 6e 67 2c 20 62 6f 6f  Pair<string, boo
24380 6c 3e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  l>;....         
24390 20 20 20 69 66 20 28 70 61 69 72 20 3d 3d 20 6e     if (pair == n
243a0 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
243b0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
243c0 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69 6e       error = "in
243d0 76 61 6c 69 64 20 56 53 20 63 61 6c 6c 62 61 63  valid VS callbac
243e0 6b 20 64 61 74 61 22 3b 0d 0a 20 20 20 20 20 20  k data";..      
243f0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
24400 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
24410 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
24420 20 20 20 20 20 20 69 66 20 28 70 61 69 72 2e 59        if (pair.Y
24430 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
24440 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
24450 20 20 72 65 74 75 72 6e 20 41 64 64 56 73 50 61    return AddVsPa
24460 63 6b 61 67 65 28 0d 0a 20 20 20 20 20 20 20 20  ckage(..        
24470 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74              root
24480 4b 65 79 2c 20 76 73 56 65 72 73 69 6f 6e 2c 20  Key, vsVersion, 
24490 70 61 63 6b 61 67 65 49 64 2c 20 73 65 72 76 69  packageId, servi
244a0 63 65 49 64 2c 20 70 61 69 72 2e 58 2c 20 77 68  ceId, pair.X, wh
244b0 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20  atIf,..         
244c0 20 20 20 20 20 20 20 20 20 20 20 76 65 72 62 6f             verbo
244d0 73 65 2c 20 72 65 66 20 65 72 72 6f 72 29 3b 0d  se, ref error);.
244e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
244f0 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65              else
24500 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
24510 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
24520 20 72 65 74 75 72 6e 20 52 65 6d 6f 76 65 56 73   return RemoveVs
24530 50 61 63 6b 61 67 65 28 0d 0a 20 20 20 20 20 20  Package(..      
24540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f                ro
24550 6f 74 4b 65 79 2c 20 76 73 56 65 72 73 69 6f 6e  otKey, vsVersion
24560 2c 20 70 61 63 6b 61 67 65 49 64 2c 20 73 65 72  , packageId, ser
24570 76 69 63 65 49 64 2c 20 77 68 61 74 49 66 2c 20  viceId, whatIf, 
24580 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20  verbose,..      
24590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
245a0 66 20 65 72 72 6f 72 29 3b 0d 0a 20 20 20 20 20  f error);..     
245b0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
245c0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e    }..        #en
245d0 64 72 65 67 69 6f 6e 0d 0a 20 20 20 20 20 20 20  dregion..       
245e0 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
245f0 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
24600 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24610 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24620 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24630 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
24640 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f  ..        #regio
24650 6e 20 41 70 70 6c 69 63 61 74 69 6f 6e 20 45 6e  n Application En
24660 74 72 79 20 50 6f 69 6e 74 0d 0a 20 20 20 20 20  try Point..     
24670 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
24680 63 20 69 6e 74 20 4d 61 69 6e 28 73 74 72 69 6e  c int Main(strin
24690 67 5b 5d 20 61 72 67 73 29 0d 0a 20 20 20 20 20  g[] args)..     
246a0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
246b0 20 20 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20    Configuration 
246c0 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d 20  configuration = 
246d0 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20  null;..         
246e0 20 20 20 73 74 72 69 6e 67 20 65 72 72 6f 72 20     string error 
246f0 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20  = null;....     
24700 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
24710 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24720 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24730 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24740 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
24750 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f            #regio
24760 6e 20 43 6f 6d 6d 61 6e 64 20 4c 69 6e 65 20 50  n Command Line P
24770 72 6f 63 65 73 73 69 6e 67 0d 0a 20 20 20 20 20  rocessing..     
24780 20 20 20 20 20 20 20 69 66 20 28 21 43 6f 6e 66         if (!Conf
24790 69 67 75 72 61 74 69 6f 6e 2e 46 72 6f 6d 41 72  iguration.FromAr
247a0 67 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  gs(..           
247b0 20 20 20 20 20 20 20 20 20 61 72 67 73 2c 20 74           args, t
247c0 72 75 65 2c 20 72 65 66 20 63 6f 6e 66 69 67 75  rue, ref configu
247d0 72 61 74 69 6f 6e 2c 20 72 65 66 20 65 72 72 6f  ration, ref erro
247e0 72 29 20 7c 7c 0d 0a 20 20 20 20 20 20 20 20 20  r) ||..         
247f0 20 20 20 20 20 20 20 21 43 6f 6e 66 69 67 75 72         !Configur
24800 61 74 69 6f 6e 2e 50 72 6f 63 65 73 73 28 0d 0a  ation.Process(..
24810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24820 20 20 20 20 61 72 67 73 2c 20 63 6f 6e 66 69 67      args, config
24830 75 72 61 74 69 6f 6e 2c 20 74 72 75 65 2c 20 72  uration, true, r
24840 65 66 20 65 72 72 6f 72 29 29 0d 0a 20 20 20 20  ef error))..    
24850 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
24860 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
24870 4f 70 73 2e 53 68 6f 77 4d 65 73 73 61 67 65 28  Ops.ShowMessage(
24880 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
24890 20 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72        TracePrior
248a0 69 74 79 2e 48 69 67 68 65 73 74 2c 20 74 72 61  ity.Highest, tra
248b0 63 65 43 61 6c 6c 62 61 63 6b 2c 20 74 68 69 73  ceCallback, this
248c0 41 73 73 65 6d 62 6c 79 2c 0d 0a 20 20 20 20 20  Assembly,..     
248d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
248e0 72 72 6f 72 2c 20 74 72 61 63 65 43 61 74 65 67  rror, traceCateg
248f0 6f 72 79 2c 20 4d 65 73 73 61 67 65 42 6f 78 42  ory, MessageBoxB
24900 75 74 74 6f 6e 73 2e 4f 4b 2c 0d 0a 20 20 20 20  uttons.OK,..    
24910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24920 4d 65 73 73 61 67 65 42 6f 78 49 63 6f 6e 2e 45  MessageBoxIcon.E
24930 72 72 6f 72 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  rror);....      
24940 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
24950 20 31 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20   1;..           
24960 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
24970 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
24980 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24990 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
249a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
249b0 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
249c0 20 20 20 20 20 49 6e 69 74 69 61 6c 69 7a 65 41       InitializeA
249d0 6c 6c 46 72 61 6d 65 77 6f 72 6b 73 28 63 6f 6e  llFrameworks(con
249e0 66 69 67 75 72 61 74 69 6f 6e 29 3b 0d 0a 20 20  figuration);..  
249f0 20 20 20 20 20 20 20 20 20 20 49 6e 69 74 69 61            Initia
24a00 6c 69 7a 65 41 6c 6c 56 73 56 65 72 73 69 6f 6e  lizeAllVsVersion
24a10 73 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 29  s(configuration)
24a20 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  ;..            #
24a30 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
24a40 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
24a50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24a60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24a70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24a80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
24a90 20 20 20 20 20 20 20 20 20 20 20 20 41 73 73 65              Asse
24aa0 6d 62 6c 79 4e 61 6d 65 20 61 73 73 65 6d 62 6c  mblyName assembl
24ab0 79 4e 61 6d 65 20 3d 20 41 73 73 65 6d 62 6c 79  yName = Assembly
24ac0 4e 61 6d 65 2e 47 65 74 41 73 73 65 6d 62 6c 79  Name.GetAssembly
24ad0 4e 61 6d 65 28 0d 0a 20 20 20 20 20 20 20 20 20  Name(..         
24ae0 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61         configura
24af0 74 69 6f 6e 2e 43 6f 72 65 46 69 6c 65 4e 61 6d  tion.CoreFileNam
24b00 65 29 3b 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d  e); /* throw */.
24b10 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
24b20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24b30 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
24b70 20 20 41 6e 79 50 61 69 72 3c 73 74 72 69 6e 67    AnyPair<string
24b80 2c 20 62 6f 6f 6c 3e 20 64 69 72 65 63 74 6f 72  , bool> director
24b90 79 50 61 69 72 20 3d 20 6e 65 77 20 41 6e 79 50  yPair = new AnyP
24ba0 61 69 72 3c 73 74 72 69 6e 67 2c 20 62 6f 6f 6c  air<string, bool
24bb0 3e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  >(..            
24bc0 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f      configuratio
24bd0 6e 2e 44 69 72 65 63 74 6f 72 79 2c 20 63 6f 6e  n.Directory, con
24be0 66 69 67 75 72 61 74 69 6f 6e 2e 49 6e 73 74 61  figuration.Insta
24bf0 6c 6c 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ll);....        
24c00 20 20 20 20 41 6e 79 50 61 69 72 3c 73 74 72 69      AnyPair<stri
24c10 6e 67 2c 20 62 6f 6f 6c 3e 20 66 69 6c 65 4e 61  ng, bool> fileNa
24c20 6d 65 50 61 69 72 20 3d 20 6e 65 77 20 41 6e 79  mePair = new Any
24c30 50 61 69 72 3c 73 74 72 69 6e 67 2c 20 62 6f 6f  Pair<string, boo
24c40 6c 3e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  l>(..           
24c50 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69       configurati
24c60 6f 6e 2e 44 65 73 69 67 6e 65 72 46 69 6c 65 4e  on.DesignerFileN
24c70 61 6d 65 2c 20 63 6f 6e 66 69 67 75 72 61 74 69  ame, configurati
24c80 6f 6e 2e 49 6e 73 74 61 6c 6c 29 3b 0d 0a 0d 0a  on.Install);....
24c90 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
24ca0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24cb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24cc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24cd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
24ce0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  ...            #
24cf0 72 65 67 69 6f 6e 20 2e 4e 45 54 20 47 41 43 20  region .NET GAC 
24d00 49 6e 73 74 61 6c 6c 2f 52 65 6d 6f 76 65 0d 0a  Install/Remove..
24d10 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
24d20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 48 61  configuration.Ha
24d30 73 46 6c 61 67 73 28 49 6e 73 74 61 6c 6c 46 6c  sFlags(InstallFl
24d40 61 67 73 2e 47 41 43 2c 20 74 72 75 65 29 29 0d  ags.GAC, true)).
24d50 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
24d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24d70 50 75 62 6c 69 73 68 20 70 75 62 6c 69 73 68 20  Publish publish 
24d80 3d 20 6e 65 77 20 50 75 62 6c 69 73 68 28 29 3b  = new Publish();
24d90 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
24da0 20 20 20 20 69 66 20 28 63 6f 6e 66 69 67 75 72      if (configur
24db0 61 74 69 6f 6e 2e 49 6e 73 74 61 6c 6c 29 0d 0a  ation.Install)..
24dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24dd0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
24de0 20 20 20 20 20 20 20 69 66 20 28 21 63 6f 6e 66         if (!conf
24df0 69 67 75 72 61 74 69 6f 6e 2e 57 68 61 74 49 66  iguration.WhatIf
24e00 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
24e10 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
24e20 73 68 2e 47 61 63 49 6e 73 74 61 6c 6c 28 63 6f  sh.GacInstall(co
24e30 6e 66 69 67 75 72 61 74 69 6f 6e 2e 43 6f 72 65  nfiguration.Core
24e40 46 69 6c 65 4e 61 6d 65 29 3b 20 2f 2a 20 74 68  FileName); /* th
24e50 72 6f 77 20 2a 2f 0d 0a 0d 0a 20 20 20 20 20 20  row */....      
24e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
24e70 61 63 65 4f 70 73 2e 54 72 61 63 65 28 0d 0a 20  aceOps.Trace(.. 
24e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24e90 20 20 20 20 20 20 20 54 72 61 63 65 50 72 69 6f         TracePrio
24ea0 72 69 74 79 2e 48 69 67 68 65 73 74 2c 20 74 72  rity.Highest, tr
24eb0 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72  aceCallback, Str
24ec0 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
24ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24ee0 20 20 20 20 20 22 47 61 63 49 6e 73 74 61 6c 6c       "GacInstall
24ef0 3a 20 61 73 73 65 6d 62 6c 79 50 61 74 68 20 3d  : assemblyPath =
24f00 20 7b 30 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20   {0}",..        
24f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24f20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 43 6f  configuration.Co
24f30 72 65 46 69 6c 65 4e 61 6d 65 29 2c 20 74 72 61  reFileName), tra
24f40 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
24f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24f60 20 20 20 20 69 66 20 28 21 63 6f 6e 66 69 67 75      if (!configu
24f70 72 61 74 69 6f 6e 2e 57 68 61 74 49 66 29 0d 0a  ration.WhatIf)..
24f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24f90 20 20 20 20 20 20 20 20 70 75 62 6c 69 73 68 2e          publish.
24fa0 47 61 63 49 6e 73 74 61 6c 6c 28 63 6f 6e 66 69  GacInstall(confi
24fb0 67 75 72 61 74 69 6f 6e 2e 4c 69 6e 71 46 69 6c  guration.LinqFil
24fc0 65 4e 61 6d 65 29 3b 20 2f 2a 20 74 68 72 6f 77  eName); /* throw
24fd0 20 2a 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20   */....         
24fe0 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
24ff0 4f 70 73 2e 54 72 61 63 65 28 0d 0a 20 20 20 20  Ops.Trace(..    
25000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25010 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69 74      TracePriorit
25020 79 2e 48 69 67 68 65 73 74 2c 20 74 72 61 63 65  y.Highest, trace
25030 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67  Callback, String
25040 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
25050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25060 20 20 22 47 61 63 49 6e 73 74 61 6c 6c 3a 20 61    "GacInstall: a
25070 73 73 65 6d 62 6c 79 50 61 74 68 20 3d 20 7b 30  ssemblyPath = {0
25080 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }",..           
25090 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
250a0 66 69 67 75 72 61 74 69 6f 6e 2e 4c 69 6e 71 46  figuration.LinqF
250b0 69 6c 65 4e 61 6d 65 29 2c 20 74 72 61 63 65 43  ileName), traceC
250c0 61 74 65 67 6f 72 79 29 3b 0d 0a 20 20 20 20 20  ategory);..     
250d0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
250e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c                el
250f0 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  se..            
25100 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
25110 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21             if (!
25120 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 57 68  configuration.Wh
25130 61 74 49 66 29 0d 0a 20 20 20 20 20 20 20 20 20  atIf)..         
25140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70                 p
25150 75 62 6c 69 73 68 2e 47 61 63 52 65 6d 6f 76 65  ublish.GacRemove
25160 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 4c  (configuration.L
25170 69 6e 71 46 69 6c 65 4e 61 6d 65 29 3b 20 2f 2a  inqFileName); /*
25180 20 74 68 72 6f 77 20 2a 2f 0d 0a 0d 0a 20 20 20   throw */....   
25190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
251a0 20 54 72 61 63 65 4f 70 73 2e 54 72 61 63 65 28   TraceOps.Trace(
251b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
251c0 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 50            TraceP
251d0 72 69 6f 72 69 74 79 2e 48 69 67 68 65 73 74 2c  riority.Highest,
251e0 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20   traceCallback, 
251f0 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
25200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25210 20 20 20 20 20 20 20 20 22 47 61 63 52 65 6d 6f          "GacRemo
25220 76 65 3a 20 61 73 73 65 6d 62 6c 79 50 61 74 68  ve: assemblyPath
25230 20 3d 20 7b 30 7d 22 2c 0d 0a 20 20 20 20 20 20   = {0}",..      
25240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25250 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e    configuration.
25260 4c 69 6e 71 46 69 6c 65 4e 61 6d 65 29 2c 20 74  LinqFileName), t
25270 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
25280 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
25290 20 20 20 20 20 20 69 66 20 28 21 63 6f 6e 66 69        if (!confi
252a0 67 75 72 61 74 69 6f 6e 2e 57 68 61 74 49 66 29  guration.WhatIf)
252b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
252c0 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 73            publis
252d0 68 2e 47 61 63 52 65 6d 6f 76 65 28 63 6f 6e 66  h.GacRemove(conf
252e0 69 67 75 72 61 74 69 6f 6e 2e 43 6f 72 65 46 69  iguration.CoreFi
252f0 6c 65 4e 61 6d 65 29 3b 20 2f 2a 20 74 68 72 6f  leName); /* thro
25300 77 20 2a 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  w */....        
25310 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
25320 65 4f 70 73 2e 54 72 61 63 65 28 0d 0a 20 20 20  eOps.Trace(..   
25330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25340 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69       TracePriori
25350 74 79 2e 48 69 67 68 65 73 74 2c 20 74 72 61 63  ty.Highest, trac
25360 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e  eCallback, Strin
25370 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
25380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25390 20 20 20 22 47 61 63 52 65 6d 6f 76 65 3a 20 61     "GacRemove: a
253a0 73 73 65 6d 62 6c 79 50 61 74 68 20 3d 20 7b 30  ssemblyPath = {0
253b0 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }",..           
253c0 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
253d0 66 69 67 75 72 61 74 69 6f 6e 2e 43 6f 72 65 46  figuration.CoreF
253e0 69 6c 65 4e 61 6d 65 29 2c 20 74 72 61 63 65 43  ileName), traceC
253f0 61 74 65 67 6f 72 79 29 3b 0d 0a 20 20 20 20 20  ategory);..     
25400 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
25410 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
25420 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67           #endreg
25430 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ion....         
25440 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
25450 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25460 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25470 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25480 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
25490 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 2e 4e        #region .N
254a0 45 54 20 41 73 73 65 6d 62 6c 79 46 6f 6c 64 65  ET AssemblyFolde
254b0 72 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  rs..            
254c0 69 66 20 28 63 6f 6e 66 69 67 75 72 61 74 69 6f  if (configuratio
254d0 6e 2e 48 61 73 46 6c 61 67 73 28 49 6e 73 74 61  n.HasFlags(Insta
254e0 6c 6c 46 6c 61 67 73 2e 41 73 73 65 6d 62 6c 79  llFlags.Assembly
254f0 46 6f 6c 64 65 72 73 2c 20 74 72 75 65 29 29 0d  Folders, true)).
25500 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
25510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25520 69 66 20 28 21 46 6f 72 45 61 63 68 46 72 61 6d  if (!ForEachFram
25530 65 77 6f 72 6b 52 65 67 69 73 74 72 79 28 50 72  eworkRegistry(Pr
25540 6f 63 65 73 73 41 73 73 65 6d 62 6c 79 46 6f 6c  ocessAssemblyFol
25550 64 65 72 73 2c 0d 0a 20 20 20 20 20 20 20 20 20  ders,..         
25560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
25570 69 72 65 63 74 6f 72 79 50 61 69 72 2c 20 63 6f  irectoryPair, co
25580 6e 66 69 67 75 72 61 74 69 6f 6e 2e 57 68 61 74  nfiguration.What
25590 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  If,..           
255a0 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
255b0 66 69 67 75 72 61 74 69 6f 6e 2e 56 65 72 62 6f  figuration.Verbo
255c0 73 65 2c 20 72 65 66 20 65 72 72 6f 72 29 29 0d  se, ref error)).
255d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
255e0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
255f0 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73          TraceOps
25600 2e 53 68 6f 77 4d 65 73 73 61 67 65 28 0d 0a 20  .ShowMessage(.. 
25610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25620 20 20 20 20 20 20 20 54 72 61 63 65 50 72 69 6f         TracePrio
25630 72 69 74 79 2e 48 69 67 68 65 73 74 2c 20 74 72  rity.Highest, tr
25640 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 6e 75 6c  aceCallback, nul
25650 6c 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l,..            
25660 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
25670 72 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72 79  r, traceCategory
25680 2c 20 4d 65 73 73 61 67 65 42 6f 78 42 75 74 74  , MessageBoxButt
25690 6f 6e 73 2e 4f 4b 2c 0d 0a 20 20 20 20 20 20 20  ons.OK,..       
256a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
256b0 20 4d 65 73 73 61 67 65 42 6f 78 49 63 6f 6e 2e   MessageBoxIcon.
256c0 45 72 72 6f 72 29 3b 0d 0a 0d 0a 20 20 20 20 20  Error);....     
256d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
256e0 65 74 75 72 6e 20 31 3b 0d 0a 20 20 20 20 20 20  eturn 1;..      
256f0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
25700 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
25710 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
25720 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  on....          
25730 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
25740 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25750 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25760 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25770 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
25780 20 20 20 20 20 23 72 65 67 69 6f 6e 20 2e 4e 45       #region .NE
25790 54 20 44 62 50 72 6f 76 69 64 65 72 46 61 63 74  T DbProviderFact
257a0 6f 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ory..           
257b0 20 69 66 20 28 63 6f 6e 66 69 67 75 72 61 74 69   if (configurati
257c0 6f 6e 2e 48 61 73 46 6c 61 67 73 28 49 6e 73 74  on.HasFlags(Inst
257d0 61 6c 6c 46 6c 61 67 73 2e 44 62 50 72 6f 76 69  allFlags.DbProvi
257e0 64 65 72 46 61 63 74 6f 72 79 2c 20 74 72 75 65  derFactory, true
257f0 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
25800 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
25810 20 20 20 62 6f 6f 6c 20 73 61 76 65 64 20 3d 20     bool saved = 
25820 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  false;....      
25830 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21 46            if (!F
25840 6f 72 45 61 63 68 46 72 61 6d 65 77 6f 72 6b 43  orEachFrameworkC
25850 6f 6e 66 69 67 28 50 72 6f 63 65 73 73 44 62 50  onfig(ProcessDbP
25860 72 6f 76 69 64 65 72 46 61 63 74 6f 72 79 2c 0d  roviderFactory,.
25870 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
25880 20 20 20 20 20 20 20 20 20 49 6e 76 61 72 69 61           Invaria
25890 6e 74 4e 61 6d 65 2c 20 50 72 6f 76 69 64 65 72  ntName, Provider
258a0 4e 61 6d 65 2c 20 44 65 73 63 72 69 70 74 69 6f  Name, Descriptio
258b0 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n,..            
258c0 20 20 20 20 20 20 20 20 20 20 20 20 46 61 63 74              Fact
258d0 6f 72 79 54 79 70 65 4e 61 6d 65 2c 20 61 73 73  oryTypeName, ass
258e0 65 6d 62 6c 79 4e 61 6d 65 2c 20 64 69 72 65 63  emblyName, direc
258f0 74 6f 72 79 50 61 69 72 2c 0d 0a 20 20 20 20 20  toryPair,..     
25900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25910 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e     configuration
25920 2e 57 68 61 74 49 66 2c 20 63 6f 6e 66 69 67 75  .WhatIf, configu
25930 72 61 74 69 6f 6e 2e 56 65 72 62 6f 73 65 2c 0d  ration.Verbose,.
25940 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
25950 20 20 20 20 20 20 20 20 20 72 65 66 20 73 61 76           ref sav
25960 65 64 2c 20 72 65 66 20 65 72 72 6f 72 29 29 0d  ed, ref error)).
25970 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
25980 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
25990 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73          TraceOps
259a0 2e 53 68 6f 77 4d 65 73 73 61 67 65 28 0d 0a 20  .ShowMessage(.. 
259b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
259c0 20 20 20 20 20 20 20 54 72 61 63 65 50 72 69 6f         TracePrio
259d0 72 69 74 79 2e 48 69 67 68 65 73 74 2c 20 74 72  rity.Highest, tr
259e0 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 6e 75 6c  aceCallback, nul
259f0 6c 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l,..            
25a00 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
25a10 72 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72 79  r, traceCategory
25a20 2c 20 4d 65 73 73 61 67 65 42 6f 78 42 75 74 74  , MessageBoxButt
25a30 6f 6e 73 2e 4f 4b 2c 0d 0a 20 20 20 20 20 20 20  ons.OK,..       
25a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25a50 20 4d 65 73 73 61 67 65 42 6f 78 49 63 6f 6e 2e   MessageBoxIcon.
25a60 45 72 72 6f 72 29 3b 0d 0a 0d 0a 20 20 20 20 20  Error);....     
25a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
25a80 65 74 75 72 6e 20 31 3b 0d 0a 20 20 20 20 20 20  eturn 1;..      
25a90 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
25aa0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
25ab0 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
25ac0 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  on....          
25ad0 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
25ae0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25af0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25b00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25b10 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
25b20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 56 53 20       #region VS 
25b30 50 61 63 6b 61 67 65 0d 0a 20 20 20 20 20 20 20  Package..       
25b40 20 20 20 20 20 69 66 20 28 63 6f 6e 66 69 67 75       if (configu
25b50 72 61 74 69 6f 6e 2e 48 61 73 46 6c 61 67 73 28  ration.HasFlags(
25b60 49 6e 73 74 61 6c 6c 46 6c 61 67 73 2e 56 73 50  InstallFlags.VsP
25b70 61 63 6b 61 67 65 2c 20 74 72 75 65 29 29 0d 0a  ackage, true))..
25b80 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
25b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
25ba0 66 20 28 21 46 6f 72 45 61 63 68 56 73 56 65 72  f (!ForEachVsVer
25bb0 73 69 6f 6e 52 65 67 69 73 74 72 79 28 50 72 6f  sionRegistry(Pro
25bc0 63 65 73 73 56 73 50 61 63 6b 61 67 65 2c 0d 0a  cessVsPackage,..
25bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25be0 20 20 20 20 20 20 20 20 28 47 75 69 64 29 76 73          (Guid)vs
25bf0 50 61 63 6b 61 67 65 49 64 2c 20 28 47 75 69 64  PackageId, (Guid
25c00 29 76 73 53 65 72 76 69 63 65 49 64 2c 0d 0a 20  )vsServiceId,.. 
25c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25c20 20 20 20 20 20 20 20 28 47 75 69 64 29 76 73 44         (Guid)vsD
25c30 61 74 61 53 6f 75 72 63 65 73 49 64 2c 20 28 47  ataSourcesId, (G
25c40 75 69 64 29 76 73 44 61 74 61 50 72 6f 76 69 64  uid)vsDataProvid
25c50 65 72 49 64 2c 0d 0a 20 20 20 20 20 20 20 20 20  erId,..         
25c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66                 f
25c70 69 6c 65 4e 61 6d 65 50 61 69 72 2c 20 63 6f 6e  ileNamePair, con
25c80 66 69 67 75 72 61 74 69 6f 6e 2e 57 68 61 74 49  figuration.WhatI
25c90 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f,..            
25ca0 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66              conf
25cb0 69 67 75 72 61 74 69 6f 6e 2e 56 65 72 62 6f 73  iguration.Verbos
25cc0 65 2c 20 72 65 66 20 65 72 72 6f 72 29 29 0d 0a  e, ref error))..
25cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25ce0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
25cf0 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e         TraceOps.
25d00 53 68 6f 77 4d 65 73 73 61 67 65 28 0d 0a 20 20  ShowMessage(..  
25d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25d20 20 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72        TracePrior
25d30 69 74 79 2e 48 69 67 68 65 73 74 2c 20 74 72 61  ity.Highest, tra
25d40 63 65 43 61 6c 6c 62 61 63 6b 2c 20 6e 75 6c 6c  ceCallback, null
25d50 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
25d60 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
25d70 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 2c  , traceCategory,
25d80 20 4d 65 73 73 61 67 65 42 6f 78 42 75 74 74 6f   MessageBoxButto
25d90 6e 73 2e 4f 4b 2c 0d 0a 20 20 20 20 20 20 20 20  ns.OK,..        
25da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25db0 4d 65 73 73 61 67 65 42 6f 78 49 63 6f 6e 2e 45  MessageBoxIcon.E
25dc0 72 72 6f 72 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  rror);....      
25dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
25de0 74 75 72 6e 20 31 3b 0d 0a 20 20 20 20 20 20 20  turn 1;..       
25df0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
25e00 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
25e10 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
25e20 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n....           
25e30 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
25e40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25e50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25e60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25e70 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
25e80 20 20 20 20 23 72 65 67 69 6f 6e 20 56 53 20 44      #region VS D
25e90 61 74 61 53 6f 75 72 63 65 0d 0a 20 20 20 20 20  ataSource..     
25ea0 20 20 20 20 20 20 20 69 66 20 28 63 6f 6e 66 69         if (confi
25eb0 67 75 72 61 74 69 6f 6e 2e 48 61 73 46 6c 61 67  guration.HasFlag
25ec0 73 28 49 6e 73 74 61 6c 6c 46 6c 61 67 73 2e 56  s(InstallFlags.V
25ed0 73 44 61 74 61 53 6f 75 72 63 65 2c 20 74 72 75  sDataSource, tru
25ee0 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e))..           
25ef0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
25f00 20 20 20 20 69 66 20 28 21 46 6f 72 45 61 63 68      if (!ForEach
25f10 56 73 56 65 72 73 69 6f 6e 52 65 67 69 73 74 72  VsVersionRegistr
25f20 79 28 50 72 6f 63 65 73 73 56 73 44 61 74 61 53  y(ProcessVsDataS
25f30 6f 75 72 63 65 2c 0d 0a 20 20 20 20 20 20 20 20  ource,..        
25f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25f50 28 47 75 69 64 29 76 73 50 61 63 6b 61 67 65 49  (Guid)vsPackageI
25f60 64 2c 20 28 47 75 69 64 29 76 73 53 65 72 76 69  d, (Guid)vsServi
25f70 63 65 49 64 2c 0d 0a 20 20 20 20 20 20 20 20 20  ceId,..         
25f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28                 (
25f90 47 75 69 64 29 76 73 44 61 74 61 53 6f 75 72 63  Guid)vsDataSourc
25fa0 65 73 49 64 2c 20 28 47 75 69 64 29 76 73 44 61  esId, (Guid)vsDa
25fb0 74 61 50 72 6f 76 69 64 65 72 49 64 2c 0d 0a 20  taProviderId,.. 
25fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25fd0 20 20 20 20 20 20 20 66 69 6c 65 4e 61 6d 65 50         fileNameP
25fe0 61 69 72 2c 20 63 6f 6e 66 69 67 75 72 61 74 69  air, configurati
25ff0 6f 6e 2e 57 68 61 74 49 66 2c 0d 0a 20 20 20 20  on.WhatIf,..    
26000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26010 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f      configuratio
26020 6e 2e 56 65 72 62 6f 73 65 2c 20 72 65 66 20 65  n.Verbose, ref e
26030 72 72 6f 72 29 29 0d 0a 20 20 20 20 20 20 20 20  rror))..        
26040 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
26050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
26060 72 61 63 65 4f 70 73 2e 53 68 6f 77 4d 65 73 73  raceOps.ShowMess
26070 61 67 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  age(..          
26080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
26090 61 63 65 50 72 69 6f 72 69 74 79 2e 48 69 67 68  acePriority.High
260a0 65 73 74 2c 20 74 72 61 63 65 43 61 6c 6c 62 61  est, traceCallba
260b0 63 6b 2c 20 6e 75 6c 6c 2c 0d 0a 20 20 20 20 20  ck, null,..     
260c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
260d0 20 20 20 65 72 72 6f 72 2c 20 74 72 61 63 65 43     error, traceC
260e0 61 74 65 67 6f 72 79 2c 20 4d 65 73 73 61 67 65  ategory, Message
260f0 42 6f 78 42 75 74 74 6f 6e 73 2e 4f 4b 2c 0d 0a  BoxButtons.OK,..
26100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26110 20 20 20 20 20 20 20 20 4d 65 73 73 61 67 65 42          MessageB
26120 6f 78 49 63 6f 6e 2e 45 72 72 6f 72 29 3b 0d 0a  oxIcon.Error);..
26130 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
26140 20 20 20 20 20 20 72 65 74 75 72 6e 20 31 3b 0d        return 1;.
26150 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
26160 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
26170 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  }..            #
26180 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
26190 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
261a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
261b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
261c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
261d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
261e0 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67              #reg
261f0 69 6f 6e 20 56 53 20 44 61 74 61 50 72 6f 76 69  ion VS DataProvi
26200 64 65 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20  der..           
26210 20 69 66 20 28 63 6f 6e 66 69 67 75 72 61 74 69   if (configurati
26220 6f 6e 2e 48 61 73 46 6c 61 67 73 28 49 6e 73 74  on.HasFlags(Inst
26230 61 6c 6c 46 6c 61 67 73 2e 56 73 44 61 74 61 50  allFlags.VsDataP
26240 72 6f 76 69 64 65 72 2c 20 74 72 75 65 29 29 0d  rovider, true)).
26250 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
26260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26270 69 66 20 28 21 46 6f 72 45 61 63 68 56 73 56 65  if (!ForEachVsVe
26280 72 73 69 6f 6e 52 65 67 69 73 74 72 79 28 50 72  rsionRegistry(Pr
26290 6f 63 65 73 73 56 73 44 61 74 61 50 72 6f 76 69  ocessVsDataProvi
262a0 64 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  der,..          
262b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 47                (G
262c0 75 69 64 29 76 73 50 61 63 6b 61 67 65 49 64 2c  uid)vsPackageId,
262d0 20 28 47 75 69 64 29 76 73 53 65 72 76 69 63 65   (Guid)vsService
262e0 49 64 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  Id,..           
262f0 20 20 20 20 20 20 20 20 20 20 20 20 20 28 47 75               (Gu
26300 69 64 29 76 73 44 61 74 61 53 6f 75 72 63 65 73  id)vsDataSources
26310 49 64 2c 20 28 47 75 69 64 29 76 73 44 61 74 61  Id, (Guid)vsData
26320 50 72 6f 76 69 64 65 72 49 64 2c 0d 0a 20 20 20  ProviderId,..   
26330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26340 20 20 20 20 20 66 69 6c 65 4e 61 6d 65 50 61 69       fileNamePai
26350 72 2c 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  r, configuration
26360 2e 57 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20  .WhatIf,..      
26370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26380 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e    configuration.
26390 56 65 72 62 6f 73 65 2c 20 72 65 66 20 65 72 72  Verbose, ref err
263a0 6f 72 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  or))..          
263b0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
263c0 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
263d0 63 65 4f 70 73 2e 53 68 6f 77 4d 65 73 73 61 67  ceOps.ShowMessag
263e0 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
263f0 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
26400 65 50 72 69 6f 72 69 74 79 2e 48 69 67 68 65 73  ePriority.Highes
26410 74 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b  t, traceCallback
26420 2c 20 6e 75 6c 6c 2c 0d 0a 20 20 20 20 20 20 20  , null,..       
26430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26440 20 65 72 72 6f 72 2c 20 74 72 61 63 65 43 61 74   error, traceCat
26450 65 67 6f 72 79 2c 20 4d 65 73 73 61 67 65 42 6f  egory, MessageBo
26460 78 42 75 74 74 6f 6e 73 2e 4f 4b 2c 0d 0a 20 20  xButtons.OK,..  
26470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26480 20 20 20 20 20 20 4d 65 73 73 61 67 65 42 6f 78        MessageBox
26490 49 63 6f 6e 2e 45 72 72 6f 72 29 3b 0d 0a 0d 0a  Icon.Error);....
264a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
264b0 20 20 20 20 72 65 74 75 72 6e 20 31 3b 0d 0a 20      return 1;.. 
264c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
264d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
264e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e  .            #en
264f0 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
26500 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
26510 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26520 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26530 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26540 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
26550 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f            TraceO
26560 70 73 2e 54 72 61 63 65 28 0d 0a 20 20 20 20 20  ps.Trace(..     
26570 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
26580 50 72 69 6f 72 69 74 79 2e 48 69 67 68 65 72 2c  Priority.Higher,
26590 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20   traceCallback, 
265a0 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
265b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
265c0 22 73 75 62 4b 65 79 73 43 72 65 61 74 65 64 20  "subKeysCreated 
265d0 3d 20 7b 30 7d 2c 20 73 75 62 4b 65 79 73 44 65  = {0}, subKeysDe
265e0 6c 65 74 65 64 20 3d 20 7b 31 7d 2c 20 22 20 2b  leted = {1}, " +
265f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
26600 20 20 22 6b 65 79 56 61 6c 75 65 73 53 65 74 20    "keyValuesSet 
26610 3d 20 7b 32 7d 2c 20 6b 65 79 56 61 6c 75 65 73  = {2}, keyValues
26620 44 65 6c 65 74 65 64 20 3d 20 7b 33 7d 22 2c 0d  Deleted = {3}",.
26630 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
26640 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e   RegistryHelper.
26650 53 75 62 4b 65 79 73 43 72 65 61 74 65 64 2c 20  SubKeysCreated, 
26660 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 53  RegistryHelper.S
26670 75 62 4b 65 79 73 44 65 6c 65 74 65 64 2c 0d 0a  ubKeysDeleted,..
26680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26690 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 4b  RegistryHelper.K
266a0 65 79 56 61 6c 75 65 73 53 65 74 2c 20 52 65 67  eyValuesSet, Reg
266b0 69 73 74 72 79 48 65 6c 70 65 72 2e 4b 65 79 56  istryHelper.KeyV
266c0 61 6c 75 65 73 44 65 6c 65 74 65 64 29 2c 0d 0a  aluesDeleted),..
266d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
266e0 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
266f0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
26700 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26710 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26720 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26730 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26740 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
26750 20 20 72 65 74 75 72 6e 20 30 3b 0d 0a 20 20 20    return 0;..   
26760 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
26770 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 20 20 20 20  #endregion..    
26780 7d 0d 0a 20 20 20 20 23 65 6e 64 72 65 67 69 6f  }..    #endregio
26790 6e 0d 0a 7d 0d 0a                                n..}..