System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact 38306341b470fac69a01ede9d9af0a641e1d57df:


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 49 6e 73 74 61 6c 6c  .        Install
0640: 65 72 2e 50 61 63 6b 61 67 65 20 70 61 63 6b 61  er.Package packa
0650: 67 65 2c 0d 0a 20 20 20 20 20 20 20 20 6f 62 6a  ge,..        obj
0660: 65 63 74 20 63 6c 69 65 6e 74 44 61 74 61 2c 0d  ect clientData,.
0670: 0a 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68  .        bool wh
0680: 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 62  atIf,..        b
0690: 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20  ool verbose,..  
06a0: 20 20 20 20 20 20 72 65 66 20 73 74 72 69 6e 67        ref string
06b0: 20 65 72 72 6f 72 0d 0a 20 20 20 20 29 3b 0d 0a   error..    );..
06c0: 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
06d0: 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ..    //////////
06e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
06f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0700: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0710: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0720: 2f 0d 0a 0d 0a 20 20 20 20 23 72 65 67 69 6f 6e  /....    #region
0730: 20 50 75 62 6c 69 63 20 45 6e 75 6d 65 72 61 74   Public Enumerat
0740: 69 6f 6e 73 0d 0a 20 20 20 20 5b 46 6c 61 67 73  ions..    [Flags
0750: 28 29 5d 0d 0a 20 20 20 20 70 75 62 6c 69 63 20  ()]..    public 
0760: 65 6e 75 6d 20 49 6e 73 74 61 6c 6c 46 6c 61 67  enum InstallFlag
0770: 73 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  s..    {..      
0780: 20 20 4e 6f 6e 65 20 3d 20 30 78 30 2c 0d 0a 20    None = 0x0,.. 
0790: 20 20 20 20 20 20 20 47 41 43 20 3d 20 30 78 31         GAC = 0x1
07a0: 2c 0d 0a 20 20 20 20 20 20 20 20 41 73 73 65 6d  ,..        Assem
07b0: 62 6c 79 46 6f 6c 64 65 72 73 20 3d 20 30 78 32  blyFolders = 0x2
07c0: 2c 0d 0a 20 20 20 20 20 20 20 20 44 62 50 72 6f  ,..        DbPro
07d0: 76 69 64 65 72 46 61 63 74 6f 72 79 20 3d 20 30  viderFactory = 0
07e0: 78 34 2c 0d 0a 20 20 20 20 20 20 20 20 56 73 50  x4,..        VsP
07f0: 61 63 6b 61 67 65 20 3d 20 30 78 38 2c 0d 0a 20  ackage = 0x8,.. 
0800: 20 20 20 20 20 20 20 56 73 44 61 74 61 53 6f 75         VsDataSou
0810: 72 63 65 20 3d 20 30 78 31 30 2c 0d 0a 20 20 20  rce = 0x10,..   
0820: 20 20 20 20 20 56 73 44 61 74 61 50 72 6f 76 69       VsDataProvi
0830: 64 65 72 20 3d 20 30 78 32 30 2c 0d 0a 20 20 20  der = 0x20,..   
0840: 20 20 20 20 20 46 72 61 6d 65 77 6f 72 6b 20 3d       Framework =
0850: 20 47 41 43 20 7c 20 41 73 73 65 6d 62 6c 79 46   GAC | AssemblyF
0860: 6f 6c 64 65 72 73 20 7c 20 44 62 50 72 6f 76 69  olders | DbProvi
0870: 64 65 72 46 61 63 74 6f 72 79 2c 0d 0a 20 20 20  derFactory,..   
0880: 20 20 20 20 20 56 73 20 3d 20 56 73 50 61 63 6b       Vs = VsPack
0890: 61 67 65 20 7c 20 56 73 44 61 74 61 53 6f 75 72  age | VsDataSour
08a0: 63 65 20 7c 20 56 73 44 61 74 61 50 72 6f 76 69  ce | VsDataProvi
08b0: 64 65 72 2c 0d 0a 20 20 20 20 20 20 20 20 41 6c  der,..        Al
08c0: 6c 20 3d 20 46 72 61 6d 65 77 6f 72 6b 20 7c 20  l = Framework | 
08d0: 56 73 2c 0d 0a 20 20 20 20 20 20 20 20 41 6c 6c  Vs,..        All
08e0: 4e 6f 47 41 43 20 3d 20 41 6c 6c 20 26 20 7e 47  NoGAC = All & ~G
08f0: 41 43 2c 0d 0a 20 20 20 20 20 20 20 20 44 65 66  AC,..        Def
0900: 61 75 6c 74 20 3d 20 41 6c 6c 0d 0a 20 20 20 20  ault = All..    
0910: 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  }....    ///////
0920: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0930: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0940: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0950: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0960: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 5b 46 6c 61  ////....    [Fla
0970: 67 73 28 29 5d 0d 0a 20 20 20 20 70 75 62 6c 69  gs()]..    publi
0980: 63 20 65 6e 75 6d 20 54 72 61 63 65 50 72 69 6f  c enum TracePrio
0990: 72 69 74 79 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  rity..    {..   
09a0: 20 20 20 20 20 4e 6f 6e 65 20 3d 20 30 78 30 2c       None = 0x0,
09b0: 0d 0a 20 20 20 20 20 20 20 20 4c 6f 77 65 73 74  ..        Lowest
09c0: 20 3d 20 30 78 31 2c 0d 0a 20 20 20 20 20 20 20   = 0x1,..       
09d0: 20 4c 6f 77 65 72 20 3d 20 30 78 32 2c 0d 0a 20   Lower = 0x2,.. 
09e0: 20 20 20 20 20 20 20 4c 6f 77 20 3d 20 30 78 34         Low = 0x4
09f0: 2c 0d 0a 20 20 20 20 20 20 20 20 4d 65 64 69 75  ,..        Mediu
0a00: 6d 20 3d 20 30 78 38 2c 0d 0a 20 20 20 20 20 20  m = 0x8,..      
0a10: 20 20 48 69 67 68 20 3d 20 30 78 31 30 2c 0d 0a    High = 0x10,..
0a20: 20 20 20 20 20 20 20 20 48 69 67 68 65 72 20 3d          Higher =
0a30: 20 30 78 32 30 2c 0d 0a 20 20 20 20 20 20 20 20   0x20,..        
0a40: 48 69 67 68 65 73 74 20 3d 20 30 78 34 30 2c 0d  Highest = 0x40,.
0a50: 0a 20 20 20 20 20 20 20 20 44 65 62 75 67 20 3d  .        Debug =
0a60: 20 4d 65 64 69 75 6d 2c 20 2f 2a 20 4e 4f 54 45   Medium, /* NOTE
0a70: 3a 20 44 65 66 61 75 6c 74 20 66 6f 72 20 64 65  : Default for de
0a80: 62 75 67 20 6d 65 73 73 61 67 65 73 2e 20 2a 2f  bug messages. */
0a90: 0d 0a 20 20 20 20 20 20 20 20 54 72 61 63 65 20  ..        Trace 
0aa0: 3d 20 4d 65 64 69 75 6d 20 20 2f 2a 20 4e 4f 54  = Medium  /* NOT
0ab0: 45 3a 20 44 65 66 61 75 6c 74 20 66 6f 72 20 74  E: Default for t
0ac0: 72 61 63 65 20 6d 65 73 73 61 67 65 73 2e 20 2a  race messages. *
0ad0: 2f 0d 0a 20 20 20 20 7d 0d 0a 20 20 20 20 23 65  /..    }..    #e
0ae0: 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
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 2f 2f 2f 2f 2f  ////////////////
0b20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0b30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
0b40: 20 20 20 23 72 65 67 69 6f 6e 20 49 6e 73 74 61     #region Insta
0b50: 6c 6c 65 72 20 43 6c 61 73 73 0d 0a 20 20 20 20  ller Class..    
0b60: 69 6e 74 65 72 6e 61 6c 20 73 74 61 74 69 63 20  internal static 
0b70: 63 6c 61 73 73 20 49 6e 73 74 61 6c 6c 65 72 0d  class Installer.
0b80: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
0b90: 23 72 65 67 69 6f 6e 20 50 72 69 76 61 74 65 20  #region Private 
0ba0: 48 65 6c 70 65 72 20 43 6c 61 73 73 65 73 0d 0a  Helper Classes..
0bb0: 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
0bc0: 41 6e 79 50 61 69 72 20 43 6c 61 73 73 0d 0a 20  AnyPair Class.. 
0bd0: 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
0be0: 65 61 6c 65 64 20 63 6c 61 73 73 20 41 6e 79 50  ealed class AnyP
0bf0: 61 69 72 3c 54 31 2c 20 54 32 3e 0d 0a 20 20 20  air<T1, T2>..   
0c00: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
0c10: 20 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c      #region Publ
0c20: 69 63 20 43 6f 6e 73 74 72 75 63 74 6f 72 73 0d  ic Constructors.
0c30: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d  .            //.
0c40: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20  .            // 
0c50: 57 41 52 4e 49 4e 47 3a 20 54 68 69 73 20 63 6f  WARNING: This co
0c60: 6e 73 74 72 75 63 74 6f 72 20 70 72 6f 64 75 63  nstructor produc
0c70: 65 73 20 61 6e 20 69 6d 6d 75 74 61 62 6c 65 20  es an immutable 
0c80: 22 65 6d 70 74 79 22 20 70 61 69 72 0d 0a 20 20  "empty" pair..  
0c90: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
0ca0: 20 20 20 20 20 20 6f 62 6a 65 63 74 2e 0d 0a 20        object... 
0cb0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
0cc0: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
0cd0: 63 20 41 6e 79 50 61 69 72 28 29 0d 0a 20 20 20  c AnyPair()..   
0ce0: 20 20 20 20 20 20 20 20 20 20 20 20 20 3a 20 62               : b
0cf0: 61 73 65 28 29 0d 0a 20 20 20 20 20 20 20 20 20  ase()..         
0d00: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
0d10: 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68        // do noth
0d20: 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  ing...          
0d30: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
0d40: 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0d70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0d80: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
0d90: 20 20 20 20 20 20 70 75 62 6c 69 63 20 41 6e 79        public Any
0da0: 50 61 69 72 28 54 31 20 78 29 0d 0a 20 20 20 20  Pair(T1 x)..    
0db0: 20 20 20 20 20 20 20 20 20 20 20 20 3a 20 74 68              : th
0dc0: 69 73 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20  is()..          
0dd0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
0de0: 20 20 20 20 20 74 68 69 73 2e 78 20 3d 20 78 3b       this.x = x;
0df0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
0e00: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0e40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0e50: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
0e60: 20 20 70 75 62 6c 69 63 20 41 6e 79 50 61 69 72    public AnyPair
0e70: 28 54 31 20 78 2c 20 54 32 20 79 29 0d 0a 20 20  (T1 x, T2 y)..  
0e80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3a 20                : 
0e90: 74 68 69 73 28 78 29 0d 0a 20 20 20 20 20 20 20  this(x)..       
0ea0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
0eb0: 20 20 20 20 20 20 20 20 74 68 69 73 2e 79 20 3d          this.y =
0ec0: 20 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20   y;..           
0ed0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
0ee0: 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
0ef0: 20 20 20 20 20 20 20 20 20 20 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 2f 2f 2f  ////////////////
0f20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0f30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
0f40: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65  .            #re
0f50: 67 69 6f 6e 20 50 75 62 6c 69 63 20 50 72 6f 70  gion Public Prop
0f60: 65 72 74 69 65 73 0d 0a 20 20 20 20 20 20 20 20  erties..        
0f70: 20 20 20 20 70 72 69 76 61 74 65 20 54 31 20 78      private T1 x
0f80: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ;..            p
0f90: 75 62 6c 69 63 20 54 31 20 58 0d 0a 20 20 20 20  ublic T1 X..    
0fa0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
0fb0: 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b             get {
0fc0: 20 72 65 74 75 72 6e 20 78 3b 20 7d 0d 0a 20 20   return x; }..  
0fd0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
0fe0: 20 20 20 20 20 20 20 20 20 20 20 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 2f 2f  ////////////////
1010: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1020: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
1030: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
1040: 69 76 61 74 65 20 54 32 20 79 3b 0d 0a 20 20 20  ivate T2 y;..   
1050: 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
1060: 54 32 20 59 0d 0a 20 20 20 20 20 20 20 20 20 20  T2 Y..          
1070: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
1080: 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72       get { retur
1090: 6e 20 79 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  n y; }..        
10a0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
10b0: 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 20     #endregion.. 
10c0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
10d0: 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
10e0: 20 20 20 20 20 20 20 20 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 2f  ////////////////
1110: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1120: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
1130: 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69  ...        #regi
1140: 6f 6e 20 54 72 61 63 65 4f 70 73 20 43 6c 61 73  on TraceOps Clas
1150: 73 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  s..        priva
1160: 74 65 20 73 74 61 74 69 63 20 63 6c 61 73 73 20  te static class 
1170: 54 72 61 63 65 4f 70 73 0d 0a 20 20 20 20 20 20  TraceOps..      
1180: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
1190: 20 23 72 65 67 69 6f 6e 20 50 72 69 76 61 74 65   #region Private
11a0: 20 43 6f 6e 73 74 61 6e 74 73 0d 0a 20 20 20 20   Constants..    
11b0: 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
11c0: 63 6f 6e 73 74 20 73 74 72 69 6e 67 20 44 65 66  const string Def
11d0: 61 75 6c 74 44 65 62 75 67 46 6f 72 6d 61 74 20  aultDebugFormat 
11e0: 3d 20 22 23 7b 30 7d 20 40 20 7b 31 7d 3a 20 7b  = "#{0} @ {1}: {
11f0: 32 7d 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  2}";..          
1200: 20 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20    private const 
1210: 73 74 72 69 6e 67 20 44 65 66 61 75 6c 74 54 72  string DefaultTr
1220: 61 63 65 46 6f 72 6d 61 74 20 3d 20 22 23 7b 30  aceFormat = "#{0
1230: 7d 20 40 20 7b 31 7d 3a 20 7b 32 7d 22 3b 0d 0a  } @ {1}: {2}";..
1240: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
1250: 69 76 61 74 65 20 63 6f 6e 73 74 20 73 74 72 69  ivate const stri
1260: 6e 67 20 49 73 6f 38 36 30 31 44 61 74 65 54 69  ng Iso8601DateTi
1270: 6d 65 4f 75 74 70 75 74 46 6f 72 6d 61 74 20 3d  meOutputFormat =
1280: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1290: 20 20 22 79 79 79 79 2e 4d 4d 2e 64 64 54 48 48    "yyyy.MM.ddTHH
12a0: 3a 6d 6d 3a 73 73 2e 66 66 66 66 66 66 66 22 3b  :mm:ss.fffffff";
12b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65  ..            #e
12c0: 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
12d0: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
12e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1300: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1310: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
1320: 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69             #regi
1330: 6f 6e 20 50 72 69 76 61 74 65 20 53 74 61 74 69  on Private Stati
1340: 63 20 44 61 74 61 0d 0a 20 20 20 20 20 20 20 20  c Data..        
1350: 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74      private stat
1360: 69 63 20 6f 62 6a 65 63 74 20 73 79 6e 63 52 6f  ic object syncRo
1370: 6f 74 20 3d 20 6e 65 77 20 6f 62 6a 65 63 74 28  ot = new object(
1380: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
1390: 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 6c  private static l
13a0: 6f 6e 67 20 6e 65 78 74 44 65 62 75 67 49 64 3b  ong nextDebugId;
13b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
13c0: 69 76 61 74 65 20 73 74 61 74 69 63 20 6c 6f 6e  ivate static lon
13d0: 67 20 6e 65 78 74 54 72 61 63 65 49 64 3b 0d 0a  g nextTraceId;..
13e0: 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
13f0: 61 74 65 20 73 74 61 74 69 63 20 54 72 61 63 65  ate static Trace
1400: 50 72 69 6f 72 69 74 79 20 64 65 62 75 67 50 72  Priority debugPr
1410: 69 6f 72 69 74 79 20 3d 20 54 72 61 63 65 50 72  iority = TracePr
1420: 69 6f 72 69 74 79 2e 44 65 62 75 67 3b 0d 0a 20  iority.Debug;.. 
1430: 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
1440: 74 65 20 73 74 61 74 69 63 20 54 72 61 63 65 50  te static TraceP
1450: 72 69 6f 72 69 74 79 20 74 72 61 63 65 50 72 69  riority tracePri
1460: 6f 72 69 74 79 20 3d 20 54 72 61 63 65 50 72 69  ority = TracePri
1470: 6f 72 69 74 79 2e 54 72 61 63 65 3b 0d 0a 20 20  ority.Trace;..  
1480: 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
1490: 65 20 73 74 61 74 69 63 20 73 74 72 69 6e 67 20  e static string 
14a0: 64 65 62 75 67 46 6f 72 6d 61 74 20 3d 20 44 65  debugFormat = De
14b0: 66 61 75 6c 74 44 65 62 75 67 46 6f 72 6d 61 74  faultDebugFormat
14c0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ;..            p
14d0: 72 69 76 61 74 65 20 73 74 61 74 69 63 20 73 74  rivate static st
14e0: 72 69 6e 67 20 74 72 61 63 65 46 6f 72 6d 61 74  ring traceFormat
14f0: 20 3d 20 44 65 66 61 75 6c 74 54 72 61 63 65 46   = DefaultTraceF
1500: 6f 72 6d 61 74 3b 0d 0a 20 20 20 20 20 20 20 20  ormat;..        
1510: 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
1520: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
1530: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1540: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1550: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1560: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1570: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
1580: 20 23 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20   #region Public 
1590: 53 74 61 74 69 63 20 50 72 6f 70 65 72 74 69 65  Static Propertie
15a0: 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  s..            p
15b0: 75 62 6c 69 63 20 73 74 61 74 69 63 20 54 72 61  ublic static Tra
15c0: 63 65 50 72 69 6f 72 69 74 79 20 44 65 62 75 67  cePriority Debug
15d0: 50 72 69 6f 72 69 74 79 0d 0a 20 20 20 20 20 20  Priority..      
15e0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
15f0: 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 6c           get { l
1600: 6f 63 6b 20 28 73 79 6e 63 52 6f 6f 74 29 20 7b  ock (syncRoot) {
1610: 20 72 65 74 75 72 6e 20 64 65 62 75 67 50 72 69   return debugPri
1620: 6f 72 69 74 79 3b 20 7d 20 7d 0d 0a 20 20 20 20  ority; } }..    
1630: 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
1640: 7b 20 6c 6f 63 6b 20 28 73 79 6e 63 52 6f 6f 74  { lock (syncRoot
1650: 29 20 7b 20 64 65 62 75 67 50 72 69 6f 72 69 74  ) { debugPriorit
1660: 79 20 3d 20 76 61 6c 75 65 3b 20 7d 20 7d 0d 0a  y = value; } }..
1670: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
1680: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
1690: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
16e0: 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 54 72  public static Tr
16f0: 61 63 65 50 72 69 6f 72 69 74 79 20 54 72 61 63  acePriority Trac
1700: 65 50 72 69 6f 72 69 74 79 0d 0a 20 20 20 20 20  ePriority..     
1710: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
1720: 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20            get { 
1730: 6c 6f 63 6b 20 28 73 79 6e 63 52 6f 6f 74 29 20  lock (syncRoot) 
1740: 7b 20 72 65 74 75 72 6e 20 74 72 61 63 65 50 72  { return tracePr
1750: 69 6f 72 69 74 79 3b 20 7d 20 7d 0d 0a 20 20 20  iority; } }..   
1760: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74               set
1770: 20 7b 20 6c 6f 63 6b 20 28 73 79 6e 63 52 6f 6f   { lock (syncRoo
1780: 74 29 20 7b 20 74 72 61 63 65 50 72 69 6f 72 69  t) { tracePriori
1790: 74 79 20 3d 20 76 61 6c 75 65 3b 20 7d 20 7d 0d  ty = value; } }.
17a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
17b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
17c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1800: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
1810: 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 73   public static s
1820: 74 72 69 6e 67 20 44 65 62 75 67 46 6f 72 6d 61  tring DebugForma
1830: 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  t..            {
1840: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1850: 20 20 67 65 74 20 7b 20 6c 6f 63 6b 20 28 73 79    get { lock (sy
1860: 6e 63 52 6f 6f 74 29 20 7b 20 72 65 74 75 72 6e  ncRoot) { return
1870: 20 64 65 62 75 67 46 6f 72 6d 61 74 3b 20 7d 20   debugFormat; } 
1880: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
1890: 20 20 20 73 65 74 20 7b 20 6c 6f 63 6b 20 28 73     set { lock (s
18a0: 79 6e 63 52 6f 6f 74 29 20 7b 20 64 65 62 75 67  yncRoot) { debug
18b0: 46 6f 72 6d 61 74 20 3d 20 76 61 6c 75 65 3b 20  Format = value; 
18c0: 7d 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  } }..           
18d0: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
18e0: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
18f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1900: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1910: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1920: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
1930: 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74       public stat
1940: 69 63 20 73 74 72 69 6e 67 20 54 72 61 63 65 46  ic string TraceF
1950: 6f 72 6d 61 74 0d 0a 20 20 20 20 20 20 20 20 20  ormat..         
1960: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
1970: 20 20 20 20 20 20 67 65 74 20 7b 20 6c 6f 63 6b        get { lock
1980: 20 28 73 79 6e 63 52 6f 6f 74 29 20 7b 20 72 65   (syncRoot) { re
1990: 74 75 72 6e 20 74 72 61 63 65 46 6f 72 6d 61 74  turn traceFormat
19a0: 3b 20 7d 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  ; } }..         
19b0: 20 20 20 20 20 20 20 73 65 74 20 7b 20 6c 6f 63         set { loc
19c0: 6b 20 28 73 79 6e 63 52 6f 6f 74 29 20 7b 20 74  k (syncRoot) { t
19d0: 72 61 63 65 46 6f 72 6d 61 74 20 3d 20 76 61 6c  raceFormat = val
19e0: 75 65 3b 20 7d 20 7d 0d 0a 20 20 20 20 20 20 20  ue; } }..       
19f0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
1a00: 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
1a10: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
1a20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a60: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
1a70: 20 23 72 65 67 69 6f 6e 20 49 6e 74 65 72 61 63   #region Interac
1a80: 74 69 76 65 20 53 75 70 70 6f 72 74 20 4d 65 74  tive Support Met
1a90: 68 6f 64 73 0d 0a 20 20 20 20 20 20 20 20 20 20  hods..          
1aa0: 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20    public static 
1ab0: 73 74 72 69 6e 67 20 47 65 74 41 73 73 65 6d 62  string GetAssemb
1ac0: 6c 79 54 69 74 6c 65 28 0d 0a 20 20 20 20 20 20  lyTitle(..      
1ad0: 20 20 20 20 20 20 20 20 20 20 41 73 73 65 6d 62            Assemb
1ae0: 6c 79 20 61 73 73 65 6d 62 6c 79 0d 0a 20 20 20  ly assembly..   
1af0: 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a               )..
1b00: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
1b10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
1b20: 66 20 28 61 73 73 65 6d 62 6c 79 20 21 3d 20 6e  f (assembly != n
1b30: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
1b40: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1b50: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79               try
1b60: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1b70: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1b80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b90: 20 69 66 20 28 61 73 73 65 6d 62 6c 79 2e 49 73   if (assembly.Is
1ba0: 44 65 66 69 6e 65 64 28 0d 0a 20 20 20 20 20 20  Defined(..      
1bb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bc0: 20 20 20 20 20 20 20 20 20 20 74 79 70 65 6f 66            typeof
1bd0: 28 41 73 73 65 6d 62 6c 79 54 69 74 6c 65 41 74  (AssemblyTitleAt
1be0: 74 72 69 62 75 74 65 29 2c 20 66 61 6c 73 65 29  tribute), false)
1bf0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
1c00: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
1c10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c20: 20 20 20 20 20 20 20 20 20 20 41 73 73 65 6d 62            Assemb
1c30: 6c 79 54 69 74 6c 65 41 74 74 72 69 62 75 74 65  lyTitleAttribute
1c40: 20 74 69 74 6c 65 20 3d 0d 0a 20 20 20 20 20 20   title =..      
1c50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c60: 20 20 20 20 20 20 20 20 20 20 28 41 73 73 65 6d            (Assem
1c70: 62 6c 79 54 69 74 6c 65 41 74 74 72 69 62 75 74  blyTitleAttribut
1c80: 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e)..            
1c90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ca0: 20 20 20 20 61 73 73 65 6d 62 6c 79 2e 47 65 74      assembly.Get
1cb0: 43 75 73 74 6f 6d 41 74 74 72 69 62 75 74 65 73  CustomAttributes
1cc0: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
1cd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ce0: 20 20 20 20 20 20 20 74 79 70 65 6f 66 28 41 73         typeof(As
1cf0: 73 65 6d 62 6c 79 54 69 74 6c 65 41 74 74 72 69  semblyTitleAttri
1d00: 62 75 74 65 29 2c 20 66 61 6c 73 65 29 5b 30 5d  bute), false)[0]
1d10: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
1d20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d30: 20 72 65 74 75 72 6e 20 74 69 74 6c 65 2e 54 69   return title.Ti
1d40: 74 6c 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  tle;..          
1d50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
1d60: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1d70: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
1d80: 20 20 20 20 20 20 20 20 20 20 20 20 63 61 74 63              catc
1d90: 68 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  h..             
1da0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
1db0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dc0: 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e    // do nothing.
1dd0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1de0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
1df0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
1e00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
1e10: 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20  turn null;..    
1e20: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
1e30: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
1e40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
1e80: 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
1e90: 69 63 20 73 74 61 74 69 63 20 44 69 61 6c 6f 67  ic static Dialog
1ea0: 52 65 73 75 6c 74 20 53 68 6f 77 4d 65 73 73 61  Result ShowMessa
1eb0: 67 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ge(..           
1ec0: 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69       TracePriori
1ed0: 74 79 20 74 72 61 63 65 50 72 69 6f 72 69 74 79  ty tracePriority
1ee0: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
1ef0: 20 20 20 54 72 61 63 65 43 61 6c 6c 62 61 63 6b     TraceCallback
1f00: 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d   debugCallback,.
1f10: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1f20: 20 54 72 61 63 65 43 61 6c 6c 62 61 63 6b 20 74   TraceCallback t
1f30: 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20  raceCallback,.. 
1f40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 41                 A
1f50: 73 73 65 6d 62 6c 79 20 61 73 73 65 6d 62 6c 79  ssembly assembly
1f60: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
1f70: 20 20 20 73 74 72 69 6e 67 20 6d 65 73 73 61 67     string messag
1f80: 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
1f90: 20 20 20 20 73 74 72 69 6e 67 20 63 61 74 65 67      string categ
1fa0: 6f 72 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ory,..          
1fb0: 20 20 20 20 20 20 4d 65 73 73 61 67 65 42 6f 78        MessageBox
1fc0: 42 75 74 74 6f 6e 73 20 62 75 74 74 6f 6e 73 2c  Buttons buttons,
1fd0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1fe0: 20 20 4d 65 73 73 61 67 65 42 6f 78 49 63 6f 6e    MessageBoxIcon
1ff0: 20 69 63 6f 6e 0d 0a 20 20 20 20 20 20 20 20 20   icon..         
2000: 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
2010: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
2020: 20 20 20 20 20 20 20 20 20 44 69 61 6c 6f 67 52           DialogR
2030: 65 73 75 6c 74 20 72 65 73 75 6c 74 20 3d 20 44  esult result = D
2040: 69 61 6c 6f 67 52 65 73 75 6c 74 2e 4f 4b 3b 0d  ialogResult.OK;.
2050: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
2060: 20 20 20 44 65 62 75 67 41 6e 64 54 72 61 63 65     DebugAndTrace
2070: 28 74 72 61 63 65 50 72 69 6f 72 69 74 79 2c 0d  (tracePriority,.
2080: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2090: 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61       debugCallba
20a0: 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63  ck, traceCallbac
20b0: 6b 2c 20 6d 65 73 73 61 67 65 2c 20 63 61 74 65  k, message, cate
20c0: 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
20d0: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 53 79            if (Sy
20e0: 73 74 65 6d 49 6e 66 6f 72 6d 61 74 69 6f 6e 2e  stemInformation.
20f0: 55 73 65 72 49 6e 74 65 72 61 63 74 69 76 65 29  UserInteractive)
2100: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2110: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
2120: 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
2130: 74 69 74 6c 65 20 3d 20 47 65 74 41 73 73 65 6d  title = GetAssem
2140: 62 6c 79 54 69 74 6c 65 28 61 73 73 65 6d 62 6c  blyTitle(assembl
2150: 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
2160: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 74             if (t
2170: 69 74 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  itle == null).. 
2180: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2190: 20 20 20 20 20 20 20 74 69 74 6c 65 20 3d 20 41         title = A
21a0: 70 70 6c 69 63 61 74 69 6f 6e 2e 50 72 6f 64 75  pplication.Produ
21b0: 63 74 4e 61 6d 65 3b 0d 0a 0d 0a 20 20 20 20 20  ctName;....     
21c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
21d0: 65 73 75 6c 74 20 3d 20 4d 65 73 73 61 67 65 42  esult = MessageB
21e0: 6f 78 2e 53 68 6f 77 28 6d 65 73 73 61 67 65 2c  ox.Show(message,
21f0: 20 74 69 74 6c 65 2c 20 62 75 74 74 6f 6e 73 2c   title, buttons,
2200: 20 69 63 6f 6e 29 3b 0d 0a 0d 0a 20 20 20 20 20   icon);....     
2210: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 44                 D
2220: 65 62 75 67 41 6e 64 54 72 61 63 65 28 74 72 61  ebugAndTrace(tra
2230: 63 65 50 72 69 6f 72 69 74 79 2c 0d 0a 20 20 20  cePriority,..   
2240: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2250: 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61       debugCallba
2260: 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63  ck, traceCallbac
2270: 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  k, String.Format
2280: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
2290: 20 20 20 20 20 20 20 20 20 20 20 22 55 73 65 72             "User
22a0: 20 63 68 6f 69 63 65 20 6f 66 20 7b 30 7d 2e 22   choice of {0}."
22b0: 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 72 65 73  , ForDisplay(res
22c0: 75 6c 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  ult)),..        
22d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22e0: 63 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  category);....  
22f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2300: 20 20 72 65 74 75 72 6e 20 72 65 73 75 6c 74 3b    return result;
2310: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2320: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
2330: 20 20 20 20 20 20 20 44 65 62 75 67 41 6e 64 54         DebugAndT
2340: 72 61 63 65 28 74 72 61 63 65 50 72 69 6f 72 69  race(tracePriori
2350: 74 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ty,..           
2360: 20 20 20 20 20 20 20 20 20 64 65 62 75 67 43 61           debugCa
2370: 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c  llback, traceCal
2380: 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f  lback, String.Fo
2390: 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
23a0: 20 20 20 20 20 20 20 20 20 20 20 22 44 65 66 61             "Defa
23b0: 75 6c 74 20 63 68 6f 69 63 65 20 6f 66 20 7b 30  ult choice of {0
23c0: 7d 2e 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  }.", ForDisplay(
23d0: 72 65 73 75 6c 74 29 29 2c 0d 0a 20 20 20 20 20  result)),..     
23e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
23f0: 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
2400: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
2410: 75 72 6e 20 72 65 73 75 6c 74 3b 0d 0a 20 20 20  urn result;..   
2420: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
2430: 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
2440: 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  on....          
2450: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
2460: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2470: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2480: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2490: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
24a0: 20 20 20 20 20 23 72 65 67 69 6f 6e 20 54 72 61       #region Tra
24b0: 63 69 6e 67 20 53 75 70 70 6f 72 74 20 4d 65 74  cing Support Met
24c0: 68 6f 64 73 0d 0a 20 20 20 20 20 20 20 20 20 20  hods..          
24d0: 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20    public static 
24e0: 6c 6f 6e 67 20 4e 65 78 74 44 65 62 75 67 49 64  long NextDebugId
24f0: 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ()..            
2500: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
2510: 20 20 20 72 65 74 75 72 6e 20 49 6e 74 65 72 6c     return Interl
2520: 6f 63 6b 65 64 2e 49 6e 63 72 65 6d 65 6e 74 28  ocked.Increment(
2530: 72 65 66 20 6e 65 78 74 44 65 62 75 67 49 64 29  ref nextDebugId)
2540: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
2550: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2560: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2570: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2580: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2590: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25a0: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
25b0: 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63     public static
25c0: 20 6c 6f 6e 67 20 4e 65 78 74 54 72 61 63 65 49   long NextTraceI
25d0: 64 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  d()..           
25e0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
25f0: 20 20 20 20 72 65 74 75 72 6e 20 49 6e 74 65 72      return Inter
2600: 6c 6f 63 6b 65 64 2e 49 6e 63 72 65 6d 65 6e 74  locked.Increment
2610: 28 72 65 66 20 6e 65 78 74 54 72 61 63 65 49 64  (ref nextTraceId
2620: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
2630: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
2640: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
2650: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2660: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2670: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2680: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
2690: 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69      public stati
26a0: 63 20 73 74 72 69 6e 67 20 54 69 6d 65 53 74 61  c string TimeSta
26b0: 6d 70 28 44 61 74 65 54 69 6d 65 20 64 61 74 65  mp(DateTime date
26c0: 54 69 6d 65 29 0d 0a 20 20 20 20 20 20 20 20 20  Time)..         
26d0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
26e0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 64 61 74        return dat
26f0: 65 54 69 6d 65 2e 54 6f 53 74 72 69 6e 67 28 49  eTime.ToString(I
2700: 73 6f 38 36 30 31 44 61 74 65 54 69 6d 65 4f 75  so8601DateTimeOu
2710: 74 70 75 74 46 6f 72 6d 61 74 29 3b 0d 0a 20 20  tputFormat);..  
2720: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
2730: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
2740: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2750: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2760: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2770: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
2780: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 4d  ..            [M
2790: 65 74 68 6f 64 49 6d 70 6c 28 4d 65 74 68 6f 64  ethodImpl(Method
27a0: 49 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e  ImplOptions.NoIn
27b0: 6c 69 6e 69 6e 67 29 5d 0d 0a 20 20 20 20 20 20  lining)]..      
27c0: 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
27d0: 61 74 69 63 20 73 74 72 69 6e 67 20 47 65 74 4d  atic string GetM
27e0: 65 74 68 6f 64 4e 61 6d 65 28 0d 0a 20 20 20 20  ethodName(..    
27f0: 20 20 20 20 20 20 20 20 20 20 20 20 53 74 61 63              Stac
2800: 6b 54 72 61 63 65 20 73 74 61 63 6b 54 72 61 63  kTrace stackTrac
2810: 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
2820: 20 20 20 20 69 6e 74 20 6c 65 76 65 6c 0d 0a 20      int level.. 
2830: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29                 )
2840: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
2850: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2860: 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20   try..          
2870: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
2880: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
2890: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
28a0: 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 49 66       // NOTE: If
28b0: 20 61 20 76 61 6c 69 64 20 73 74 61 63 6b 20 74   a valid stack t
28c0: 72 61 63 65 20 77 61 73 20 6e 6f 74 20 73 75 70  race was not sup
28d0: 70 6c 69 65 64 20 62 79 20 74 68 65 0d 0a 20 20  plied by the..  
28e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28f0: 20 20 2f 2f 20 20 20 20 20 20 20 63 61 6c 6c 65    //       calle
2900: 72 2c 20 63 72 65 61 74 65 20 6f 6e 65 20 6e 6f  r, create one no
2910: 77 20 62 61 73 65 64 20 6f 6e 20 74 68 65 20 63  w based on the c
2920: 75 72 72 65 6e 74 0d 0a 20 20 20 20 20 20 20 20  urrent..        
2930: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
2940: 20 20 20 20 20 65 78 65 63 75 74 69 6f 6e 20 73       execution s
2950: 74 61 63 6b 2e 0d 0a 20 20 20 20 20 20 20 20 20  tack...         
2960: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
2970: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2980: 20 20 20 69 66 20 28 73 74 61 63 6b 54 72 61 63     if (stackTrac
2990: 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  e == null)..    
29a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29b0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
29c0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
29d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29e0: 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20         // NOTE: 
29f0: 47 72 61 62 20 74 68 65 20 63 75 72 72 65 6e 74  Grab the current
2a00: 20 65 78 65 63 75 74 69 6f 6e 20 73 74 61 63 6b   execution stack
2a10: 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
2a20: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
2a30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a40: 20 20 20 20 20 20 20 73 74 61 63 6b 54 72 61 63         stackTrac
2a50: 65 20 3d 20 6e 65 77 20 53 74 61 63 6b 54 72 61  e = new StackTra
2a60: 63 65 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ce();....       
2a70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a80: 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
2a90: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
2aa0: 4e 4f 54 45 3a 20 41 6c 77 61 79 73 20 73 6b 69  NOTE: Always ski
2ab0: 70 20 74 68 69 73 20 63 61 6c 6c 20 66 72 61 6d  p this call fram
2ac0: 65 20 77 68 65 6e 20 77 65 20 63 61 70 74 75 72  e when we captur
2ad0: 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
2ae0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
2af0: 20 20 20 20 74 68 65 20 73 74 61 63 6b 20 74 72      the stack tr
2b00: 61 63 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  ace...          
2b10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
2b20: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2b30: 20 20 20 20 20 20 20 20 20 20 6c 65 76 65 6c 2b            level+
2b40: 2b 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  +;..            
2b50: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
2b60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b70: 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
2b80: 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45           // NOTE
2b90: 3a 20 47 65 74 20 74 68 65 20 73 70 65 63 69 66  : Get the specif
2ba0: 69 65 64 20 73 74 61 63 6b 20 66 72 61 6d 65 20  ied stack frame 
2bb0: 28 61 6c 77 61 79 73 20 61 64 64 20 6f 6e 65 20  (always add one 
2bc0: 74 6f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  to..            
2bd0: 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
2be0: 20 73 6b 69 70 20 74 68 69 73 20 6d 65 74 68 6f   skip this metho
2bf0: 64 29 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  d)...           
2c00: 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
2c10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c20: 20 53 74 61 63 6b 46 72 61 6d 65 20 73 74 61 63   StackFrame stac
2c30: 6b 46 72 61 6d 65 20 3d 20 73 74 61 63 6b 54 72  kFrame = stackTr
2c40: 61 63 65 2e 47 65 74 46 72 61 6d 65 28 6c 65 76  ace.GetFrame(lev
2c50: 65 6c 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  el);....        
2c60: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
2c70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c80: 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 47 65 74      // NOTE: Get
2c90: 20 74 68 65 20 6d 65 74 68 6f 64 20 66 6f 72 20   the method for 
2ca0: 74 68 65 20 73 74 61 63 6b 20 66 72 61 6d 65 2e  the stack frame.
2cb0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2cc0: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
2cd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4d 65                Me
2ce0: 74 68 6f 64 42 61 73 65 20 6d 65 74 68 6f 64 42  thodBase methodB
2cf0: 61 73 65 20 3d 20 73 74 61 63 6b 46 72 61 6d 65  ase = stackFrame
2d00: 2e 47 65 74 4d 65 74 68 6f 64 28 29 3b 0d 0a 0d  .GetMethod();...
2d10: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2d20: 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
2d30: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
2d40: 4e 4f 54 45 3a 20 47 65 74 20 74 68 65 20 74 79  NOTE: Get the ty
2d50: 70 65 20 66 6f 72 20 74 68 65 20 6d 65 74 68 6f  pe for the metho
2d60: 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d...            
2d70: 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
2d80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d90: 54 79 70 65 20 74 79 70 65 20 3d 20 6d 65 74 68  Type type = meth
2da0: 6f 64 42 61 73 65 2e 44 65 63 6c 61 72 69 6e 67  odBase.Declaring
2db0: 54 79 70 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  Type;....       
2dc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
2dd0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2de0: 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 47 65       // NOTE: Ge
2df0: 74 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68  t the name of th
2e00: 65 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20  e method...     
2e10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
2e20: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
2e30: 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6e 61         string na
2e40: 6d 65 20 3d 20 6d 65 74 68 6f 64 42 61 73 65 2e  me = methodBase.
2e50: 4e 61 6d 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  Name;....       
2e60: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
2e70: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2e80: 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 52 65       // NOTE: Re
2e90: 74 75 72 6e 20 74 68 65 20 70 72 6f 70 65 72 6c  turn the properl
2ea0: 79 20 66 6f 72 6d 61 74 74 65 64 20 72 65 73 75  y formatted resu
2eb0: 6c 74 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  lt...           
2ec0: 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
2ed0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ee0: 20 72 65 74 75 72 6e 20 53 74 72 69 6e 67 2e 46   return String.F
2ef0: 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
2f00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f10: 22 7b 30 7d 7b 31 7d 7b 32 7d 22 2c 20 74 79 70  "{0}{1}{2}", typ
2f20: 65 2e 4e 61 6d 65 2c 20 54 79 70 65 2e 44 65 6c  e.Name, Type.Del
2f30: 69 6d 69 74 65 72 2c 20 6e 61 6d 65 29 3b 0d 0a  imiter, name);..
2f40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f50: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
2f60: 20 20 20 63 61 74 63 68 0d 0a 20 20 20 20 20 20     catch..      
2f70: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
2f80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f90: 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d   // do nothing..
2fa0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2fb0: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
2fc0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c        return nul
2fd0: 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l;..            
2fe0: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
2ff0: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
3000: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3010: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3020: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3030: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
3040: 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69      public stati
3050: 63 20 76 6f 69 64 20 44 65 62 75 67 43 6f 72 65  c void DebugCore
3060: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
3070: 20 20 20 73 74 72 69 6e 67 20 6d 65 73 73 61 67     string messag
3080: 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
3090: 20 20 20 20 73 74 72 69 6e 67 20 63 61 74 65 67      string categ
30a0: 6f 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ory..           
30b0: 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
30c0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
30d0: 20 20 20 20 20 20 20 6c 6f 63 6b 20 28 73 79 6e         lock (syn
30e0: 63 52 6f 6f 74 29 0d 0a 20 20 20 20 20 20 20 20  cRoot)..        
30f0: 20 20 20 20 20 20 20 20 7b 0d 0a 23 69 66 20 44          {..#if D
3100: 45 42 55 47 0d 0a 20 20 20 20 20 20 20 20 20 20  EBUG..          
3110: 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
3120: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3130: 20 20 2f 2f 20 4e 4f 54 45 3a 20 57 72 69 74 65    // NOTE: Write
3140: 20 74 68 65 20 6d 65 73 73 61 67 65 20 74 6f 20   the message to 
3150: 61 6c 6c 20 74 68 65 20 61 63 74 69 76 65 20 64  all the active d
3160: 65 62 75 67 0d 0a 20 20 20 20 20 20 20 20 20 20  ebug..          
3170: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
3180: 20 20 20 6c 69 73 74 65 6e 65 72 73 2e 0d 0a 20     listeners... 
3190: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31a0: 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
31b0: 20 20 20 20 20 20 20 20 20 20 20 44 65 62 75 67             Debug
31c0: 2e 57 72 69 74 65 4c 69 6e 65 28 6d 65 73 73 61  .WriteLine(messa
31d0: 67 65 2c 20 63 61 74 65 67 6f 72 79 29 3b 0d 0a  ge, category);..
31e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31f0: 20 20 20 20 44 65 62 75 67 2e 46 6c 75 73 68 28      Debug.Flush(
3200: 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20  );..#else..     
3210: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
3220: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
3230: 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20         // NOTE: 
3240: 46 6f 72 20 61 20 62 75 69 6c 64 20 77 69 74 68  For a build with
3250: 6f 75 74 20 22 44 45 42 55 47 22 20 64 65 66 69  out "DEBUG" defi
3260: 6e 65 64 2c 20 77 65 20 63 61 6e 6e 6f 74 0d 0a  ned, we cannot..
3270: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3280: 20 20 20 20 2f 2f 20 20 20 20 20 20 20 73 69 6d      //       sim
3290: 70 6c 79 20 75 73 65 20 74 68 65 20 44 65 62 75  ply use the Debu
32a0: 67 20 63 6c 61 73 73 20 28 69 2e 65 2e 20 69 74  g class (i.e. it
32b0: 20 77 69 6c 6c 20 64 6f 0d 0a 20 20 20 20 20 20   will do..      
32c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
32d0: 20 20 20 20 20 20 20 6e 6f 74 68 69 6e 67 29 3b         nothing);
32e0: 20 74 68 65 72 65 66 6f 72 65 2c 20 75 73 65 20   therefore, use 
32f0: 74 68 65 20 63 6f 6e 73 6f 6c 65 20 64 69 72 65  the console dire
3300: 63 74 6c 79 0d 0a 20 20 20 20 20 20 20 20 20 20  ctly..          
3310: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
3320: 20 20 20 69 6e 73 74 65 61 64 2e 0d 0a 20 20 20     instead...   
3330: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3340: 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
3350: 20 20 20 20 20 20 20 20 20 43 6f 6e 73 6f 6c 65           Console
3360: 2e 57 72 69 74 65 4c 69 6e 65 28 53 74 72 69 6e  .WriteLine(Strin
3370: 67 2e 46 6f 72 6d 61 74 28 22 7b 31 7d 3a 20 7b  g.Format("{1}: {
3380: 30 7d 22 2c 20 6d 65 73 73 61 67 65 2c 0d 0a 20  0}", message,.. 
3390: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33a0: 20 20 20 20 20 20 20 63 61 74 65 67 6f 72 79 29         category)
33b0: 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20  );..#endif..    
33c0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
33d0: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
33e0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
33f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3400: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3410: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3420: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
3430: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
3440: 75 62 6c 69 63 20 73 74 61 74 69 63 20 76 6f 69  ublic static voi
3450: 64 20 54 72 61 63 65 43 6f 72 65 28 0d 0a 20 20  d TraceCore(..  
3460: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
3470: 72 69 6e 67 20 6d 65 73 73 61 67 65 2c 0d 0a 20  ring message,.. 
3480: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
3490: 74 72 69 6e 67 20 63 61 74 65 67 6f 72 79 0d 0a  tring category..
34a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34b0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
34c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
34d0: 20 20 6c 6f 63 6b 20 28 73 79 6e 63 52 6f 6f 74    lock (syncRoot
34e0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
34f0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
3500: 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
3510: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3520: 20 20 2f 2f 20 4e 4f 54 45 3a 20 57 72 69 74 65    // NOTE: Write
3530: 20 74 68 65 20 6d 65 73 73 61 67 65 20 74 6f 20   the message to 
3540: 61 6c 6c 20 74 68 65 20 61 63 74 69 76 65 20 74  all the active t
3550: 72 61 63 65 0d 0a 20 20 20 20 20 20 20 20 20 20  race..          
3560: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
3570: 20 20 20 6c 69 73 74 65 6e 65 72 73 2e 0d 0a 20     listeners... 
3580: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3590: 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
35a0: 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
35b0: 2e 57 72 69 74 65 4c 69 6e 65 28 6d 65 73 73 61  .WriteLine(messa
35c0: 67 65 2c 20 63 61 74 65 67 6f 72 79 29 3b 0d 0a  ge, category);..
35d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35e0: 20 20 20 20 54 72 61 63 65 2e 46 6c 75 73 68 28      Trace.Flush(
35f0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
3600: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
3610: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
3620: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
3630: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3640: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3650: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3660: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
3670: 20 20 20 20 20 20 20 5b 4d 65 74 68 6f 64 49 6d         [MethodIm
3680: 70 6c 28 4d 65 74 68 6f 64 49 6d 70 6c 4f 70 74  pl(MethodImplOpt
3690: 69 6f 6e 73 2e 4e 6f 49 6e 6c 69 6e 69 6e 67 29  ions.NoInlining)
36a0: 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ]..            p
36b0: 75 62 6c 69 63 20 73 74 61 74 69 63 20 73 74 72  ublic static str
36c0: 69 6e 67 20 44 65 62 75 67 41 6e 64 54 72 61 63  ing DebugAndTrac
36d0: 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
36e0: 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69 74      TracePriorit
36f0: 79 20 74 72 61 63 65 50 72 69 6f 72 69 74 79 2c  y tracePriority,
3700: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
3710: 20 20 54 72 61 63 65 43 61 6c 6c 62 61 63 6b 20    TraceCallback 
3720: 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a  debugCallback,..
3730: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3740: 54 72 61 63 65 43 61 6c 6c 62 61 63 6b 20 74 72  TraceCallback tr
3750: 61 63 65 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20  aceCallback,..  
3760: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 45 78                Ex
3770: 63 65 70 74 69 6f 6e 20 65 78 63 65 70 74 69 6f  ception exceptio
3780: 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n,..            
3790: 20 20 20 20 73 74 72 69 6e 67 20 63 61 74 65 67      string categ
37a0: 6f 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ory..           
37b0: 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
37c0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
37d0: 20 20 20 20 20 20 20 69 66 20 28 65 78 63 65 70         if (excep
37e0: 74 69 6f 6e 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20  tion != null).. 
37f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3800: 20 20 20 72 65 74 75 72 6e 20 44 65 62 75 67 41     return DebugA
3810: 6e 64 54 72 61 63 65 28 74 72 61 63 65 50 72 69  ndTrace(tracePri
3820: 6f 72 69 74 79 2c 20 64 65 62 75 67 43 61 6c 6c  ority, debugCall
3830: 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20  back,..         
3840: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
3850: 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 6e 65  raceCallback, ne
3860: 77 20 53 74 61 63 6b 54 72 61 63 65 28 65 78 63  w StackTrace(exc
3870: 65 70 74 69 6f 6e 2c 20 74 72 75 65 29 2c 20 30  eption, true), 0
3880: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
3890: 20 20 20 20 20 20 20 20 20 20 20 65 78 63 65 70             excep
38a0: 74 69 6f 6e 2e 54 6f 53 74 72 69 6e 67 28 29 2c  tion.ToString(),
38b0: 20 63 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20   category);.... 
38c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
38d0: 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 20 20 20  eturn null;..   
38e0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
38f0: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
3900: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3910: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3920: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3930: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
3940: 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 4d 65  .            [Me
3950: 74 68 6f 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49  thodImpl(MethodI
3960: 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c  mplOptions.NoInl
3970: 69 6e 69 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20  ining)]..       
3980: 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74       public stat
3990: 69 63 20 73 74 72 69 6e 67 20 44 65 62 75 67 41  ic string DebugA
39a0: 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20  ndTrace(..      
39b0: 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 50            TraceP
39c0: 72 69 6f 72 69 74 79 20 74 72 61 63 65 50 72 69  riority tracePri
39d0: 6f 72 69 74 79 2c 0d 0a 20 20 20 20 20 20 20 20  ority,..        
39e0: 20 20 20 20 20 20 20 20 54 72 61 63 65 43 61 6c          TraceCal
39f0: 6c 62 61 63 6b 20 64 65 62 75 67 43 61 6c 6c 62  lback debugCallb
3a00: 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ack,..          
3a10: 20 20 20 20 20 20 54 72 61 63 65 43 61 6c 6c 62        TraceCallb
3a20: 61 63 6b 20 74 72 61 63 65 43 61 6c 6c 62 61 63  ack traceCallbac
3a30: 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  k,..            
3a40: 20 20 20 20 73 74 72 69 6e 67 20 6d 65 73 73 61      string messa
3a50: 67 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ge,..           
3a60: 20 20 20 20 20 73 74 72 69 6e 67 20 63 61 74 65       string cate
3a70: 67 6f 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20  gory..          
3a80: 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
3a90: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
3aa0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 44          return D
3ab0: 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20  ebugAndTrace(.. 
3ac0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3ad0: 20 20 20 74 72 61 63 65 50 72 69 6f 72 69 74 79     tracePriority
3ae0: 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c  , debugCallback,
3af0: 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20   traceCallback, 
3b00: 6e 75 6c 6c 2c 20 31 2c 0d 0a 20 20 20 20 20 20  null, 1,..      
3b10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6d 65                me
3b20: 73 73 61 67 65 2c 20 63 61 74 65 67 6f 72 79 29  ssage, category)
3b30: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
3b40: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
3b50: 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
3ba0: 20 20 20 5b 4d 65 74 68 6f 64 49 6d 70 6c 28 4d     [MethodImpl(M
3bb0: 65 74 68 6f 64 49 6d 70 6c 4f 70 74 69 6f 6e 73  ethodImplOptions
3bc0: 2e 4e 6f 49 6e 6c 69 6e 69 6e 67 29 5d 0d 0a 20  .NoInlining)].. 
3bd0: 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
3be0: 74 65 20 73 74 61 74 69 63 20 73 74 72 69 6e 67  te static string
3bf0: 20 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d   DebugAndTrace(.
3c00: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
3c10: 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 20 74   TracePriority t
3c20: 72 61 63 65 50 72 69 6f 72 69 74 79 2c 0d 0a 20  racePriority,.. 
3c30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
3c40: 72 61 63 65 43 61 6c 6c 62 61 63 6b 20 64 65 62  raceCallback deb
3c50: 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20  ugCallback,..   
3c60: 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
3c70: 63 65 43 61 6c 6c 62 61 63 6b 20 74 72 61 63 65  ceCallback trace
3c80: 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20  Callback,..     
3c90: 20 20 20 20 20 20 20 20 20 20 20 53 74 61 63 6b             Stack
3ca0: 54 72 61 63 65 20 73 74 61 63 6b 54 72 61 63 65  Trace stackTrace
3cb0: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
3cc0: 20 20 20 69 6e 74 20 6c 65 76 65 6c 2c 0d 0a 20     int level,.. 
3cd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
3ce0: 74 72 69 6e 67 20 6d 65 73 73 61 67 65 2c 0d 0a  tring message,..
3cf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3d00: 73 74 72 69 6e 67 20 63 61 74 65 67 6f 72 79 0d  string category.
3d10: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
3d20: 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   )..            
3d30: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
3d40: 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
3d50: 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20         // NOTE: 
3d60: 41 6c 77 61 79 73 20 73 6b 69 70 20 74 68 69 73  Always skip this
3d70: 20 63 61 6c 6c 20 66 72 61 6d 65 20 69 66 20 74   call frame if t
3d80: 68 65 20 73 74 61 63 6b 20 74 72 61 63 65 20 69  he stack trace i
3d90: 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  s..             
3da0: 20 20 20 2f 2f 20 20 20 20 20 20 20 67 6f 69 6e     //       goin
3db0: 67 20 74 6f 20 62 65 20 63 61 70 74 75 72 65 64  g to be captured
3dc0: 20 62 79 20 47 65 74 4d 65 74 68 6f 64 4e 61 6d   by GetMethodNam
3dd0: 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e...            
3de0: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
3df0: 20 20 20 20 20 20 20 20 69 66 20 28 73 74 61 63          if (stac
3e00: 6b 54 72 61 63 65 20 3d 3d 20 6e 75 6c 6c 29 0d  kTrace == null).
3e10: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
3e20: 20 20 20 20 20 6c 65 76 65 6c 2b 2b 3b 0d 0a 0d       level++;...
3e30: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
3e40: 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
3e50: 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 46 6f       // NOTE: Fo
3e60: 72 6d 61 74 20 74 68 65 20 6d 65 73 73 61 67 65  rmat the message
3e70: 20 66 6f 72 20 64 69 73 70 6c 61 79 20 28 6f 6e   for display (on
3e80: 63 65 29 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  ce)...          
3e90: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
3ea0: 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
3eb0: 20 66 6f 72 6d 61 74 74 65 64 20 3d 20 53 74 72   formatted = Str
3ec0: 69 6e 67 2e 46 6f 72 6d 61 74 28 22 7b 30 7d 3a  ing.Format("{0}:
3ed0: 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20   {1}",..        
3ee0: 20 20 20 20 20 20 20 20 20 20 20 20 47 65 74 4d              GetM
3ef0: 65 74 68 6f 64 4e 61 6d 65 28 73 74 61 63 6b 54  ethodName(stackT
3f00: 72 61 63 65 2c 20 6c 65 76 65 6c 29 2c 20 6d 65  race, level), me
3f10: 73 73 61 67 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  ssage);....     
3f20: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
3f30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
3f40: 2f 20 4e 4f 54 45 3a 20 49 66 20 74 68 65 20 74  / NOTE: If the t
3f50: 72 61 63 65 20 70 72 69 6f 72 69 74 79 20 6f 66  race priority of
3f60: 20 74 68 69 73 20 6d 65 73 73 61 67 65 20 69 73   this message is
3f70: 20 6c 65 73 73 20 74 68 61 6e 0d 0a 20 20 20 20   less than..    
3f80: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
3f90: 20 20 20 20 20 77 68 61 74 20 77 65 20 63 75 72       what we cur
3fa0: 72 65 6e 74 6c 79 20 77 61 6e 74 20 74 6f 20 64  rently want to d
3fb0: 65 62 75 67 2c 20 73 6b 69 70 20 69 74 2e 0d 0a  ebug, skip it...
3fc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3fd0: 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
3fe0: 20 20 20 20 69 66 20 28 74 72 61 63 65 50 72 69      if (tracePri
3ff0: 6f 72 69 74 79 20 3e 3d 20 44 65 62 75 67 50 72  ority >= DebugPr
4000: 69 6f 72 69 74 79 29 0d 0a 20 20 20 20 20 20 20  iority)..       
4010: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
4020: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4030: 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
4040: 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a          // NOTE:
4050: 20 49 66 20 6e 6f 74 20 73 70 65 63 69 66 69 65   If not specifie
4060: 64 2c 20 75 73 65 20 74 68 65 20 64 65 66 61 75  d, use the defau
4070: 6c 74 20 64 65 62 75 67 20 63 61 6c 6c 62 61 63  lt debug callbac
4080: 6b 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  k...            
4090: 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
40a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
40b0: 69 66 20 28 64 65 62 75 67 43 61 6c 6c 62 61 63  if (debugCallbac
40c0: 6b 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  k == null)..    
40d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
40e0: 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63      debugCallbac
40f0: 6b 20 3d 20 44 65 62 75 67 43 6f 72 65 3b 0d 0a  k = DebugCore;..
4100: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
4110: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
4120: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
4130: 20 4e 4f 54 45 3a 20 49 6e 76 6f 6b 65 20 74 68   NOTE: Invoke th
4140: 65 20 64 65 62 75 67 20 63 61 6c 6c 62 61 63 6b  e debug callback
4150: 20 77 69 74 68 20 74 68 65 20 66 6f 72 6d 61 74   with the format
4160: 74 65 64 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ted..           
4170: 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
4180: 20 20 6d 65 73 73 61 67 65 20 61 6e 64 20 74 68    message and th
4190: 65 20 63 61 74 65 67 6f 72 79 20 73 70 65 63 69  e category speci
41a0: 66 69 65 64 20 62 79 20 74 68 65 0d 0a 20 20 20  fied by the..   
41b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
41c0: 20 2f 2f 20 20 20 20 20 20 20 63 61 6c 6c 65 72   //       caller
41d0: 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
41e0: 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
41f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
4200: 65 62 75 67 43 61 6c 6c 62 61 63 6b 28 66 6f 72  ebugCallback(for
4210: 6d 61 74 74 65 64 2c 20 63 61 74 65 67 6f 72 79  matted, category
4220: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
4230: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
4240: 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
4250: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
4260: 4e 4f 54 45 3a 20 49 66 20 74 68 65 20 74 72 61  NOTE: If the tra
4270: 63 65 20 70 72 69 6f 72 69 74 79 20 6f 66 20 74  ce priority of t
4280: 68 69 73 20 6d 65 73 73 61 67 65 20 69 73 20 6c  his message is l
4290: 65 73 73 20 74 68 61 6e 0d 0a 20 20 20 20 20 20  ess than..      
42a0: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
42b0: 20 20 20 77 68 61 74 20 77 65 20 63 75 72 72 65     what we curre
42c0: 6e 74 6c 79 20 77 61 6e 74 20 74 6f 20 74 72 61  ntly want to tra
42d0: 63 65 2c 20 73 6b 69 70 20 69 74 2e 0d 0a 20 20  ce, skip it...  
42e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
42f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
4300: 20 20 69 66 20 28 74 72 61 63 65 50 72 69 6f 72    if (tracePrior
4310: 69 74 79 20 3e 3d 20 54 72 61 63 65 50 72 69 6f  ity >= TracePrio
4320: 72 69 74 79 29 0d 0a 20 20 20 20 20 20 20 20 20  rity)..         
4330: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
4340: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
4350: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
4360: 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 49        // NOTE: I
4370: 66 20 6e 6f 74 20 73 70 65 63 69 66 69 65 64 2c  f not specified,
4380: 20 75 73 65 20 74 68 65 20 64 65 66 61 75 6c 74   use the default
4390: 20 74 72 61 63 65 20 63 61 6c 6c 62 61 63 6b 2e   trace callback.
43a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
43b0: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
43c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
43d0: 20 28 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 20   (traceCallback 
43e0: 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
43f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4400: 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 20    traceCallback 
4410: 3d 20 54 72 61 63 65 43 6f 72 65 3b 0d 0a 0d 0a  = TraceCore;....
4420: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4430: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
4440: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e              // N
4450: 4f 54 45 3a 20 49 6e 76 6f 6b 65 20 74 68 65 20  OTE: Invoke the 
4460: 74 72 61 63 65 20 63 61 6c 6c 62 61 63 6b 20 77  trace callback w
4470: 69 74 68 20 74 68 65 20 66 6f 72 6d 61 74 74 65  ith the formatte
4480: 64 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  d..             
4490: 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
44a0: 6d 65 73 73 61 67 65 20 61 6e 64 20 74 68 65 20  message and the 
44b0: 63 61 74 65 67 6f 72 79 20 73 70 65 63 69 66 69  category specifi
44c0: 65 64 20 62 79 20 74 68 65 0d 0a 20 20 20 20 20  ed by the..     
44d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
44e0: 2f 20 20 20 20 20 20 20 63 61 6c 6c 65 72 2e 0d  /       caller..
44f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
4500: 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
4510: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
4520: 63 65 43 61 6c 6c 62 61 63 6b 28 66 6f 72 6d 61  ceCallback(forma
4530: 74 74 65 64 2c 20 63 61 74 65 67 6f 72 79 29 3b  tted, category);
4540: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
4550: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
4560: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6d 65         return me
4570: 73 73 61 67 65 3b 0d 0a 20 20 20 20 20 20 20 20  ssage;..        
4580: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
4590: 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 20     #endregion.. 
45a0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
45b0: 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
45c0: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
45d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
45e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
45f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4600: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
4610: 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69  ...        #regi
4620: 6f 6e 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b  on MockRegistryK
4630: 65 79 20 43 6c 61 73 73 0d 0a 20 20 20 20 20 20  ey Class..      
4640: 20 20 70 72 69 76 61 74 65 20 73 65 61 6c 65 64    private sealed
4650: 20 63 6c 61 73 73 20 4d 6f 63 6b 52 65 67 69 73   class MockRegis
4660: 74 72 79 4b 65 79 20 3a 20 49 44 69 73 70 6f 73  tryKey : IDispos
4670: 61 62 6c 65 0d 0a 20 20 20 20 20 20 20 20 7b 0d  able..        {.
4680: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65  .            #re
4690: 67 69 6f 6e 20 50 72 69 76 61 74 65 20 43 6f 6e  gion Private Con
46a0: 73 74 72 75 63 74 6f 72 73 0d 0a 20 20 20 20 20  structors..     
46b0: 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 4d         private M
46c0: 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 28 29  ockRegistryKey()
46d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
46e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
46f0: 20 77 68 61 74 49 66 20 3d 20 74 72 75 65 3b 0d   whatIf = true;.
4700: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
4710: 20 72 65 61 64 4f 6e 6c 79 20 3d 20 74 72 75 65   readOnly = true
4720: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
4730: 20 20 20 73 61 66 65 20 3d 20 74 72 75 65 3b 0d     safe = true;.
4740: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
4750: 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64              #end
4760: 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
4770: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
4780: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4790: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
47a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
47b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
47c0: 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e           #region
47d0: 20 50 75 62 6c 69 63 20 43 6f 6e 73 74 72 75 63   Public Construc
47e0: 74 6f 72 73 0d 0a 20 20 20 20 20 20 20 20 20 20  tors..          
47f0: 20 20 70 75 62 6c 69 63 20 4d 6f 63 6b 52 65 67    public MockReg
4800: 69 73 74 72 79 4b 65 79 28 0d 0a 20 20 20 20 20  istryKey(..     
4810: 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73             Regis
4820: 74 72 79 4b 65 79 20 6b 65 79 0d 0a 20 20 20 20  tryKey key..    
4830: 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
4840: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3a                 :
4850: 20 74 68 69 73 28 29 0d 0a 20 20 20 20 20 20 20   this()..       
4860: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
4870: 20 20 20 20 20 20 20 20 74 68 69 73 2e 6b 65 79          this.key
4880: 20 3d 20 6b 65 79 3b 0d 0a 20 20 20 20 20 20 20   = key;..       
4890: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
48a0: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
48b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
48c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
48d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
48e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
48f0: 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
4900: 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 28  MockRegistryKey(
4910: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
4920: 20 20 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65    RegistryKey ke
4930: 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y,..            
4940: 20 20 20 20 73 74 72 69 6e 67 20 73 75 62 4b 65      string subKe
4950: 79 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 20  yName..         
4960: 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
4970: 20 20 20 20 20 20 20 20 20 20 3a 20 74 68 69 73            : this
4980: 28 6b 65 79 29 0d 0a 20 20 20 20 20 20 20 20 20  (key)..         
4990: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
49a0: 20 20 20 20 20 20 74 68 69 73 2e 73 75 62 4b 65        this.subKe
49b0: 79 4e 61 6d 65 20 3d 20 73 75 62 4b 65 79 4e 61  yName = subKeyNa
49c0: 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me;..           
49d0: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
49e0: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
49f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4a00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4a10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4a20: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
4a30: 20 20 20 20 20 70 75 62 6c 69 63 20 4d 6f 63 6b       public Mock
4a40: 52 65 67 69 73 74 72 79 4b 65 79 28 0d 0a 20 20  RegistryKey(..  
4a50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65                Re
4a60: 67 69 73 74 72 79 4b 65 79 20 6b 65 79 2c 0d 0a  gistryKey key,..
4a70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4a80: 73 74 72 69 6e 67 20 73 75 62 4b 65 79 4e 61 6d  string subKeyNam
4a90: 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
4aa0: 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 0d      bool whatIf.
4ab0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
4ac0: 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   )..            
4ad0: 20 20 20 20 3a 20 74 68 69 73 28 6b 65 79 2c 20      : this(key, 
4ae0: 73 75 62 4b 65 79 4e 61 6d 65 29 0d 0a 20 20 20  subKeyName)..   
4af0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
4b00: 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73              this
4b10: 2e 77 68 61 74 49 66 20 3d 20 77 68 61 74 49 66  .whatIf = whatIf
4b20: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
4b30: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
4b40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4b50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4b60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4b70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4b80: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
4b90: 20 20 20 70 75 62 6c 69 63 20 4d 6f 63 6b 52 65     public MockRe
4ba0: 67 69 73 74 72 79 4b 65 79 28 0d 0a 20 20 20 20  gistryKey(..    
4bb0: 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69              Regi
4bc0: 73 74 72 79 4b 65 79 20 6b 65 79 2c 0d 0a 20 20  stryKey key,..  
4bd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
4be0: 72 69 6e 67 20 73 75 62 4b 65 79 4e 61 6d 65 2c  ring subKeyName,
4bf0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
4c00: 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a    bool whatIf,..
4c10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4c20: 62 6f 6f 6c 20 72 65 61 64 4f 6e 6c 79 0d 0a 20  bool readOnly.. 
4c30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29                 )
4c40: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
4c50: 20 20 3a 20 74 68 69 73 28 6b 65 79 2c 20 73 75    : this(key, su
4c60: 62 4b 65 79 4e 61 6d 65 2c 20 77 68 61 74 49 66  bKeyName, whatIf
4c70: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
4c80: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
4c90: 20 20 74 68 69 73 2e 72 65 61 64 4f 6e 6c 79 20    this.readOnly 
4ca0: 3d 20 72 65 61 64 4f 6e 6c 79 3b 0d 0a 20 20 20  = readOnly;..   
4cb0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
4cc0: 20 20 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f  ////////////////
4cf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4d00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
4d10: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
4d20: 6c 69 63 20 4d 6f 63 6b 52 65 67 69 73 74 72 79  lic MockRegistry
4d30: 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  Key(..          
4d40: 20 20 20 20 20 20 52 65 67 69 73 74 72 79 4b 65        RegistryKe
4d50: 79 20 6b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20  y key,..        
4d60: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 73          string s
4d70: 75 62 4b 65 79 4e 61 6d 65 2c 0d 0a 20 20 20 20  ubKeyName,..    
4d80: 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
4d90: 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20   whatIf,..      
4da0: 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 72            bool r
4db0: 65 61 64 4f 6e 6c 79 2c 0d 0a 20 20 20 20 20 20  eadOnly,..      
4dc0: 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 73            bool s
4dd0: 61 66 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  afe..           
4de0: 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
4df0: 20 20 20 20 20 20 20 20 3a 20 74 68 69 73 28 6b          : this(k
4e00: 65 79 2c 20 73 75 62 4b 65 79 4e 61 6d 65 2c 20  ey, subKeyName, 
4e10: 77 68 61 74 49 66 2c 20 72 65 61 64 4f 6e 6c 79  whatIf, readOnly
4e20: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
4e30: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
4e40: 20 20 74 68 69 73 2e 73 61 66 65 20 3d 20 73 61    this.safe = sa
4e50: 66 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  fe;..           
4e60: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
4e70: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
4e80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4e90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4ea0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4eb0: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
4ec0: 20 20 20 20 20 70 75 62 6c 69 63 20 4d 6f 63 6b       public Mock
4ed0: 52 65 67 69 73 74 72 79 4b 65 79 28 0d 0a 20 20  RegistryKey(..  
4ee0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65                Re
4ef0: 67 69 73 74 72 79 4b 65 79 20 6b 65 79 2c 0d 0a  gistryKey key,..
4f00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4f10: 62 6f 6f 6c 20 77 68 61 74 49 66 0d 0a 20 20 20  bool whatIf..   
4f20: 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a               )..
4f30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4f40: 3a 20 74 68 69 73 28 6b 65 79 2c 20 6e 75 6c 6c  : this(key, null
4f50: 2c 20 77 68 61 74 49 66 29 0d 0a 20 20 20 20 20  , whatIf)..     
4f60: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
4f70: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20            // do 
4f80: 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20  nothing...      
4f90: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
4fa0: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
4fb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4fc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4fd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4fe0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
4ff0: 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
5000: 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79   MockRegistryKey
5010: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
5020: 20 20 20 52 65 67 69 73 74 72 79 4b 65 79 20 6b     RegistryKey k
5030: 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey,..           
5040: 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66       bool whatIf
5050: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
5060: 20 20 20 62 6f 6f 6c 20 72 65 61 64 4f 6e 6c 79     bool readOnly
5070: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
5080: 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20    )..           
5090: 20 20 20 20 20 3a 20 74 68 69 73 28 6b 65 79 2c       : this(key,
50a0: 20 6e 75 6c 6c 2c 20 77 68 61 74 49 66 2c 20 72   null, whatIf, r
50b0: 65 61 64 4f 6e 6c 79 29 0d 0a 20 20 20 20 20 20  eadOnly)..      
50c0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
50d0: 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e           // do n
50e0: 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20  othing...       
50f0: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
5100: 20 20 20 20 20 20 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20  /////////....   
5150: 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
5160: 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 28  MockRegistryKey(
5170: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
5180: 20 20 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65    RegistryKey ke
5190: 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y,..            
51a0: 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c      bool whatIf,
51b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
51c0: 20 20 62 6f 6f 6c 20 72 65 61 64 4f 6e 6c 79 2c    bool readOnly,
51d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
51e0: 20 20 62 6f 6f 6c 20 73 61 66 65 0d 0a 20 20 20    bool safe..   
51f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a               )..
5200: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5210: 3a 20 74 68 69 73 28 6b 65 79 2c 20 6e 75 6c 6c  : this(key, null
5220: 2c 20 77 68 61 74 49 66 2c 20 72 65 61 64 4f 6e  , whatIf, readOn
5230: 6c 79 2c 20 73 61 66 65 29 0d 0a 20 20 20 20 20  ly, safe)..     
5240: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
5250: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20            // do 
5260: 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20  nothing...      
5270: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
5280: 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
5290: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
52a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
52b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
52c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
52d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
52e0: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
52f0: 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c 69 63    #region Public
5300: 20 4d 65 74 68 6f 64 73 0d 0a 20 20 20 20 20 20   Methods..      
5310: 20 20 20 20 20 20 70 75 62 6c 69 63 20 76 6f 69        public voi
5320: 64 20 43 6c 6f 73 65 28 29 0d 0a 20 20 20 20 20  d Close()..     
5330: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
5340: 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
5350: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
5360: 20 4e 4f 54 45 3a 20 4e 6f 20 64 69 73 70 6f 73   NOTE: No dispos
5370: 65 64 20 63 68 65 63 6b 20 68 65 72 65 20 62 65  ed check here be
5380: 63 61 75 73 65 20 63 61 6c 6c 69 6e 67 20 74 68  cause calling th
5390: 69 73 20 6d 65 74 68 6f 64 0d 0a 20 20 20 20 20  is method..     
53a0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
53b0: 20 20 20 20 73 68 6f 75 6c 64 20 62 65 20 6a 75      should be ju
53c0: 73 74 20 6c 69 6b 65 20 63 61 6c 6c 69 6e 67 20  st like calling 
53d0: 44 69 73 70 6f 73 65 2e 0d 0a 20 20 20 20 20 20  Dispose...      
53e0: 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
53f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 44 69                Di
5400: 73 70 6f 73 65 28 74 72 75 65 29 3b 0d 0a 20 20  spose(true);..  
5410: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
5420: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
5430: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5440: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5450: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5460: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
5470: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
5480: 62 6c 69 63 20 4d 6f 63 6b 52 65 67 69 73 74 72  blic MockRegistr
5490: 79 4b 65 79 20 43 72 65 61 74 65 53 75 62 4b 65  yKey CreateSubKe
54a0: 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
54b0: 20 20 20 20 73 74 72 69 6e 67 20 73 75 62 4b 65      string subKe
54c0: 79 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 20  yName..         
54d0: 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
54e0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
54f0: 20 20 20 20 20 20 20 20 20 43 68 65 63 6b 44 69           CheckDi
5500: 73 70 6f 73 65 64 28 29 3b 0d 0a 20 20 20 20 20  sposed();..     
5510: 20 20 20 20 20 20 20 20 20 20 20 43 68 65 63 6b             Check
5520: 52 65 61 64 4f 6e 6c 79 28 29 3b 0d 0a 0d 0a 20  ReadOnly();.... 
5530: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
5540: 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d  f (key == null).
5550: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
5560: 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c       return null
5570: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
5580: 20 20 20 20 20 69 66 20 28 77 68 61 74 49 66 29       if (whatIf)
5590: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
55a0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
55b0: 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
55c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
55d0: 20 2f 2f 20 48 41 43 4b 3a 20 41 74 74 65 6d 70   // HACK: Attemp
55e0: 74 20 74 6f 20 6f 70 65 6e 20 74 68 65 20 73 70  t to open the sp
55f0: 65 63 69 66 69 65 64 20 73 75 62 2d 6b 65 79 2e  ecified sub-key.
5600: 20 20 49 66 20 74 68 69 73 0d 0a 20 20 20 20 20    If this..     
5610: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
5620: 2f 20 20 20 20 20 20 20 66 61 69 6c 73 2c 20 77  /       fails, w
5630: 65 20 77 69 6c 6c 20 73 69 6d 70 6c 79 20 72 65  e will simply re
5640: 74 75 72 6e 20 74 68 65 20 77 72 61 70 70 65 64  turn the wrapped
5650: 20 72 6f 6f 74 20 6b 65 79 0d 0a 20 20 20 20 20   root key..     
5660: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
5670: 2f 20 20 20 20 20 20 20 69 74 73 65 6c 66 20 73  /       itself s
5680: 69 6e 63 65 20 6e 6f 20 77 72 69 74 65 73 20 61  ince no writes a
5690: 72 65 20 61 6c 6c 6f 77 65 64 20 69 6e 20 27 77  re allowed in 'w
56a0: 68 61 74 2d 69 66 27 0d 0a 20 20 20 20 20 20 20  hat-if'..       
56b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
56c0: 20 20 20 20 20 20 6d 6f 64 65 20 61 6e 79 68 6f        mode anyho
56d0: 77 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  w...            
56e0: 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
56f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5700: 52 65 67 69 73 74 72 79 4b 65 79 20 73 75 62 4b  RegistryKey subK
5710: 65 79 20 3d 20 6b 65 79 2e 4f 70 65 6e 53 75 62  ey = key.OpenSub
5720: 4b 65 79 28 73 75 62 4b 65 79 4e 61 6d 65 29 3b  Key(subKeyName);
5730: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
5740: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 28          return (
5750: 73 75 62 4b 65 79 20 21 3d 20 6e 75 6c 6c 29 20  subKey != null) 
5760: 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ?..             
5770: 20 20 20 20 20 20 20 20 20 20 20 6e 65 77 20 4d             new M
5780: 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 28 0d  ockRegistryKey(.
5790: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
57a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
57b0: 20 73 75 62 4b 65 79 2c 20 77 68 61 74 49 66 2c   subKey, whatIf,
57c0: 20 72 65 61 64 4f 6e 6c 79 2c 20 73 61 66 65 29   readOnly, safe)
57d0: 20 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   :..            
57e0: 20 20 20 20 20 20 20 20 20 20 20 20 6e 65 77 20              new 
57f0: 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 28  MockRegistryKey(
5800: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
5810: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5820: 20 20 6b 65 79 2c 20 73 75 62 4b 65 79 4e 61 6d    key, subKeyNam
5830: 65 2c 20 77 68 61 74 49 66 2c 20 72 65 61 64 4f  e, whatIf, readO
5840: 6e 6c 79 2c 20 73 61 66 65 29 3b 0d 0a 20 20 20  nly, safe);..   
5850: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
5860: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5870: 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20  else..          
5880: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
5890: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
58a0: 75 72 6e 20 6e 65 77 20 4d 6f 63 6b 52 65 67 69  urn new MockRegi
58b0: 73 74 72 79 4b 65 79 28 0d 0a 20 20 20 20 20 20  stryKey(..      
58c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
58d0: 20 20 6b 65 79 2e 43 72 65 61 74 65 53 75 62 4b    key.CreateSubK
58e0: 65 79 28 73 75 62 4b 65 79 4e 61 6d 65 29 2c 20  ey(subKeyName), 
58f0: 77 68 61 74 49 66 2c 20 72 65 61 64 4f 6e 6c 79  whatIf, readOnly
5900: 2c 20 73 61 66 65 29 3b 0d 0a 20 20 20 20 20 20  , safe);..      
5910: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
5920: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
5930: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
5940: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5950: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5960: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5970: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
5980: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
5990: 6c 69 63 20 76 6f 69 64 20 44 65 6c 65 74 65 53  lic void DeleteS
59a0: 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20  ubKey(..        
59b0: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 73          string s
59c0: 75 62 4b 65 79 4e 61 6d 65 0d 0a 20 20 20 20 20  ubKeyName..     
59d0: 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
59e0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
59f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 43 68 65               Che
5a00: 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 20  ckDisposed();.. 
5a10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43                 C
5a20: 68 65 63 6b 52 65 61 64 4f 6e 6c 79 28 29 3b 0d  heckReadOnly();.
5a30: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
5a40: 20 20 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75     if (key == nu
5a50: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
5a60: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 3b           return;
5a70: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
5a80: 20 20 20 20 69 66 20 28 21 77 68 61 74 49 66 29      if (!whatIf)
5a90: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
5aa0: 20 20 20 20 20 20 6b 65 79 2e 44 65 6c 65 74 65        key.Delete
5ab0: 53 75 62 4b 65 79 28 73 75 62 4b 65 79 4e 61 6d  SubKey(subKeyNam
5ac0: 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e);..           
5ad0: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
5ae0: 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5b10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5b20: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
5b30: 20 20 20 20 20 70 75 62 6c 69 63 20 76 6f 69 64       public void
5b40: 20 44 65 6c 65 74 65 53 75 62 4b 65 79 54 72 65   DeleteSubKeyTre
5b50: 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
5b60: 20 20 20 20 73 74 72 69 6e 67 20 73 75 62 4b 65      string subKe
5b70: 79 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 20  yName..         
5b80: 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
5b90: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
5ba0: 20 20 20 20 20 20 20 20 20 43 68 65 63 6b 44 69           CheckDi
5bb0: 73 70 6f 73 65 64 28 29 3b 0d 0a 20 20 20 20 20  sposed();..     
5bc0: 20 20 20 20 20 20 20 20 20 20 20 43 68 65 63 6b             Check
5bd0: 52 65 61 64 4f 6e 6c 79 28 29 3b 0d 0a 0d 0a 20  ReadOnly();.... 
5be0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
5bf0: 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d  f (key == null).
5c00: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
5c10: 20 20 20 20 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a       return;....
5c20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5c30: 69 66 20 28 21 77 68 61 74 49 66 29 0d 0a 20 20  if (!whatIf)..  
5c40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5c50: 20 20 6b 65 79 2e 44 65 6c 65 74 65 53 75 62 4b    key.DeleteSubK
5c60: 65 79 54 72 65 65 28 73 75 62 4b 65 79 4e 61 6d  eyTree(subKeyNam
5c70: 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e);..           
5c80: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
5c90: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
5ca0: 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
5ce0: 20 20 20 20 20 70 75 62 6c 69 63 20 76 6f 69 64       public void
5cf0: 20 44 65 6c 65 74 65 56 61 6c 75 65 28 0d 0a 20   DeleteValue(.. 
5d00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
5d10: 74 72 69 6e 67 20 6e 61 6d 65 0d 0a 20 20 20 20  tring name..    
5d20: 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
5d30: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
5d40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43 68                Ch
5d50: 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a  eckDisposed();..
5d60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5d70: 43 68 65 63 6b 52 65 61 64 4f 6e 6c 79 28 29 3b  CheckReadOnly();
5d80: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
5d90: 20 20 20 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e      if (key == n
5da0: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
5db0: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
5dc0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
5dd0: 20 20 20 20 20 69 66 20 28 21 77 68 61 74 49 66       if (!whatIf
5de0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
5df0: 20 20 20 20 20 20 20 6b 65 79 2e 44 65 6c 65 74         key.Delet
5e00: 65 56 61 6c 75 65 28 6e 61 6d 65 29 3b 0d 0a 20  eValue(name);.. 
5e10: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
5e20: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
5e30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5e40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5e50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5e60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
5e70: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
5e80: 75 62 6c 69 63 20 73 74 72 69 6e 67 5b 5d 20 47  ublic string[] G
5e90: 65 74 53 75 62 4b 65 79 4e 61 6d 65 73 28 29 0d  etSubKeyNames().
5ea0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
5eb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5ec0: 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b  CheckDisposed();
5ed0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
5ee0: 20 20 20 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e      if (key == n
5ef0: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
5f00: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
5f10: 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20   null;....      
5f20: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
5f30: 20 6b 65 79 2e 47 65 74 53 75 62 4b 65 79 4e 61   key.GetSubKeyNa
5f40: 6d 65 73 28 29 3b 0d 0a 20 20 20 20 20 20 20 20  mes();..        
5f50: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
5f60: 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5fa0: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
5fb0: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 6f          public o
5fc0: 62 6a 65 63 74 20 47 65 74 56 61 6c 75 65 28 0d  bject GetValue(.
5fd0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
5fe0: 20 73 74 72 69 6e 67 20 6e 61 6d 65 2c 0d 0a 20   string name,.. 
5ff0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f                 o
6000: 62 6a 65 63 74 20 64 65 66 61 75 6c 74 56 61 6c  bject defaultVal
6010: 75 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ue..            
6020: 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20      )..         
6030: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
6040: 20 20 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f        CheckDispo
6050: 73 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  sed();....      
6060: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6b 65            if (ke
6070: 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  y == null)..    
6080: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6090: 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a  return null;....
60a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
60b0: 72 65 74 75 72 6e 20 6b 65 79 2e 47 65 74 56 61  return key.GetVa
60c0: 6c 75 65 28 6e 61 6d 65 2c 20 64 65 66 61 75 6c  lue(name, defaul
60d0: 74 56 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20  tValue);..      
60e0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
60f0: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
6100: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6110: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20  //////////....  
6140: 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
6150: 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79   MockRegistryKey
6160: 20 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20   OpenSubKey(..  
6170: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
6180: 72 69 6e 67 20 73 75 62 4b 65 79 4e 61 6d 65 0d  ring subKeyName.
6190: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
61a0: 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   )..            
61b0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
61c0: 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64     CheckDisposed
61d0: 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ();....         
61e0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 4f 70         return Op
61f0: 65 6e 53 75 62 4b 65 79 28 73 75 62 4b 65 79 4e  enSubKey(subKeyN
6200: 61 6d 65 2c 20 66 61 6c 73 65 29 3b 0d 0a 20 20  ame, false);..  
6210: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
6220: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
6230: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6240: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a  //////////////..
6270: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
6280: 62 6c 69 63 20 4d 6f 63 6b 52 65 67 69 73 74 72  blic MockRegistr
6290: 79 4b 65 79 20 4f 70 65 6e 53 75 62 4b 65 79 28  yKey OpenSubKey(
62a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
62b0: 20 20 73 74 72 69 6e 67 20 73 75 62 4b 65 79 4e    string subKeyN
62c0: 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ame,..          
62d0: 20 20 20 20 20 20 62 6f 6f 6c 20 77 72 69 74 61        bool writa
62e0: 62 6c 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ble..           
62f0: 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
6300: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
6310: 20 20 20 20 20 20 20 43 68 65 63 6b 44 69 73 70         CheckDisp
6320: 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20  osed();....     
6330: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 77             if (w
6340: 72 69 74 61 62 6c 65 29 0d 0a 20 20 20 20 20 20  ritable)..      
6350: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43 68                Ch
6360: 65 63 6b 52 65 61 64 4f 6e 6c 79 28 29 3b 0d 0a  eckReadOnly();..
6370: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
6380: 20 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c    if (key == nul
6390: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
63a0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e          return n
63b0: 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ull;....        
63c0: 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79          Registry
63d0: 4b 65 79 20 73 75 62 4b 65 79 20 3d 20 6b 65 79  Key subKey = key
63e0: 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20  .OpenSubKey(..  
63f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6400: 20 20 73 75 62 4b 65 79 4e 61 6d 65 2c 20 77 68    subKeyName, wh
6410: 61 74 49 66 20 3f 20 66 61 6c 73 65 20 3a 20 77  atIf ? false : w
6420: 72 69 74 61 62 6c 65 29 3b 0d 0a 0d 0a 20 20 20  ritable);....   
6430: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
6440: 75 72 6e 20 28 73 75 62 4b 65 79 20 21 3d 20 6e  urn (subKey != n
6450: 75 6c 6c 29 20 3f 0d 0a 20 20 20 20 20 20 20 20  ull) ?..        
6460: 20 20 20 20 20 20 20 20 20 20 20 20 6e 65 77 20              new 
6470: 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 28  MockRegistryKey(
6480: 73 75 62 4b 65 79 2c 20 77 68 61 74 49 66 2c 20  subKey, whatIf, 
6490: 72 65 61 64 4f 6e 6c 79 2c 20 73 61 66 65 29 20  readOnly, safe) 
64a0: 3a 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20  : null;..       
64b0: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
64c0: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
64d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
64e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
64f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6500: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
6510: 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
6520: 76 6f 69 64 20 53 65 74 56 61 6c 75 65 28 0d 0a  void SetValue(..
6530: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6540: 73 74 72 69 6e 67 20 6e 61 6d 65 2c 0d 0a 20 20  string name,..  
6550: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f 62                ob
6560: 6a 65 63 74 20 76 61 6c 75 65 0d 0a 20 20 20 20  ject value..    
6570: 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
6580: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
6590: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43 68                Ch
65a0: 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a  eckDisposed();..
65b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
65c0: 43 68 65 63 6b 52 65 61 64 4f 6e 6c 79 28 29 3b  CheckReadOnly();
65d0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
65e0: 20 20 20 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e      if (key == n
65f0: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
6600: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
6610: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
6620: 20 20 20 20 20 69 66 20 28 21 77 68 61 74 49 66       if (!whatIf
6630: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
6640: 20 20 20 20 20 20 20 6b 65 79 2e 53 65 74 56 61         key.SetVa
6650: 6c 75 65 28 6e 61 6d 65 2c 20 76 61 6c 75 65 29  lue(name, value)
6660: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
6670: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65  ..            #e
6680: 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
6690: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
66a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
66b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
66c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
66d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
66e0: 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69             #regi
66f0: 6f 6e 20 50 75 62 6c 69 63 20 50 72 6f 70 65 72  on Public Proper
6700: 74 69 65 73 0d 0a 20 20 20 20 20 20 20 20 20 20  ties..          
6710: 20 20 70 75 62 6c 69 63 20 73 74 72 69 6e 67 20    public string 
6720: 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 20  Name..          
6730: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
6740: 20 20 20 20 20 67 65 74 0d 0a 20 20 20 20 20 20       get..      
6750: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
6760: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6770: 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29   CheckDisposed()
6780: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
6790: 20 20 20 20 20 20 20 20 20 69 66 20 28 6b 65 79           if (key
67a0: 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
67b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
67c0: 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d     return null;.
67d0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
67e0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 21 53         return !S
67f0: 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d  tring.IsNullOrEm
6800: 70 74 79 28 73 75 62 4b 65 79 4e 61 6d 65 29 20  pty(subKeyName) 
6810: 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ?..             
6820: 20 20 20 20 20 20 20 20 20 20 20 53 74 72 69 6e             Strin
6830: 67 2e 46 6f 72 6d 61 74 28 22 7b 30 7d 5c 5c 7b  g.Format("{0}\\{
6840: 31 7d 22 2c 20 6b 65 79 2e 4e 61 6d 65 2c 20 73  1}", key.Name, s
6850: 75 62 4b 65 79 4e 61 6d 65 29 20 3a 0d 0a 20 20  ubKeyName) :..  
6860: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6870: 20 20 20 20 20 20 6b 65 79 2e 4e 61 6d 65 3b 0d        key.Name;.
6880: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
6890: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
68a0: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
68b0: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
68c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
68d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
68e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
68f0: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
6900: 20 20 20 20 70 72 69 76 61 74 65 20 52 65 67 69      private Regi
6910: 73 74 72 79 4b 65 79 20 6b 65 79 3b 0d 0a 20 20  stryKey key;..  
6920: 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
6930: 20 52 65 67 69 73 74 72 79 4b 65 79 20 4b 65 79   RegistryKey Key
6940: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
6950: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
6960: 20 67 65 74 20 7b 20 43 68 65 63 6b 44 69 73 70   get { CheckDisp
6970: 6f 73 65 64 28 29 3b 20 43 68 65 63 6b 53 61 66  osed(); CheckSaf
6980: 65 28 29 3b 20 72 65 74 75 72 6e 20 6b 65 79 3b  e(); return key;
6990: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
69a0: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
69b0: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
69c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
69d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
69e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
69f0: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
6a00: 20 20 20 20 70 72 69 76 61 74 65 20 73 74 72 69      private stri
6a10: 6e 67 20 73 75 62 4b 65 79 4e 61 6d 65 3b 0d 0a  ng subKeyName;..
6a20: 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
6a30: 69 63 20 73 74 72 69 6e 67 20 53 75 62 4b 65 79  ic string SubKey
6a40: 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 20  Name..          
6a50: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
6a60: 20 20 20 20 20 67 65 74 20 7b 20 43 68 65 63 6b       get { Check
6a70: 44 69 73 70 6f 73 65 64 28 29 3b 20 72 65 74 75  Disposed(); retu
6a80: 72 6e 20 73 75 62 4b 65 79 4e 61 6d 65 3b 20 7d  rn subKeyName; }
6a90: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
6aa0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 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 2f 2f  ////////////////
6ad0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6ae0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6af0: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
6b00: 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 77    private bool w
6b10: 68 61 74 49 66 3b 0d 0a 20 20 20 20 20 20 20 20  hatIf;..        
6b20: 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20      public bool 
6b30: 57 68 61 74 49 66 0d 0a 20 20 20 20 20 20 20 20  WhatIf..        
6b40: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
6b50: 20 20 20 20 20 20 20 67 65 74 20 7b 20 43 68 65         get { Che
6b60: 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 20 72 65  ckDisposed(); re
6b70: 74 75 72 6e 20 77 68 61 74 49 66 3b 20 7d 0d 0a  turn whatIf; }..
6b80: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
6b90: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
6ba0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6bb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6bc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6bd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6be0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
6bf0: 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 72 65 61  private bool rea
6c00: 64 4f 6e 6c 79 3b 0d 0a 20 20 20 20 20 20 20 20  dOnly;..        
6c10: 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20      public bool 
6c20: 52 65 61 64 4f 6e 6c 79 0d 0a 20 20 20 20 20 20  ReadOnly..      
6c30: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
6c40: 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 43           get { C
6c50: 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 20  heckDisposed(); 
6c60: 72 65 74 75 72 6e 20 72 65 61 64 4f 6e 6c 79 3b  return readOnly;
6c70: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
6c80: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
6c90: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
6ca0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6cb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6cc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6cd0: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
6ce0: 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20      public bool 
6cf0: 73 61 66 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  safe;..         
6d00: 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 53     public bool S
6d10: 61 66 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  afe..           
6d20: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
6d30: 20 20 20 20 67 65 74 20 7b 20 43 68 65 63 6b 44      get { CheckD
6d40: 69 73 70 6f 73 65 64 28 29 3b 20 72 65 74 75 72  isposed(); retur
6d50: 6e 20 73 61 66 65 3b 20 7d 0d 0a 20 20 20 20 20  n safe; }..     
6d60: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
6d70: 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
6d80: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
6d90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6da0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6db0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6dc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6dd0: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
6de0: 20 20 20 23 72 65 67 69 6f 6e 20 50 72 69 76 61     #region Priva
6df0: 74 65 20 4d 65 74 68 6f 64 73 0d 0a 20 20 20 20  te Methods..    
6e00: 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
6e10: 76 6f 69 64 20 43 68 65 63 6b 52 65 61 64 4f 6e  void CheckReadOn
6e20: 6c 79 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ly()..          
6e30: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
6e40: 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
6e50: 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45           // NOTE
6e60: 3a 20 49 6e 20 22 72 65 61 64 2d 6f 6e 6c 79 22  : In "read-only"
6e70: 20 6d 6f 64 65 2c 20 77 65 20 64 69 73 61 6c 6c   mode, we disall
6e80: 6f 77 20 61 6c 6c 20 77 72 69 74 65 20 61 63 63  ow all write acc
6e90: 65 73 73 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  ess...          
6ea0: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
6eb0: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21 72            if (!r
6ec0: 65 61 64 4f 6e 6c 79 29 0d 0a 20 20 20 20 20 20  eadOnly)..      
6ed0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
6ee0: 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  turn;....       
6ef0: 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e           throw n
6f00: 65 77 20 49 6e 76 61 6c 69 64 4f 70 65 72 61 74  ew InvalidOperat
6f10: 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d  ionException();.
6f20: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
6f30: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
6f40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6f50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6f60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6f70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6f80: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
6f90: 20 70 72 69 76 61 74 65 20 76 6f 69 64 20 43 68   private void Ch
6fa0: 65 63 6b 53 61 66 65 28 29 0d 0a 20 20 20 20 20  eckSafe()..     
6fb0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
6fc0: 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
6fd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
6fe0: 20 4e 4f 54 45 3a 20 49 6e 20 22 73 61 66 65 22   NOTE: In "safe"
6ff0: 20 6d 6f 64 65 2c 20 77 65 20 64 69 73 61 6c 6c   mode, we disall
7000: 6f 77 20 61 6c 6c 20 64 69 72 65 63 74 20 61 63  ow all direct ac
7010: 63 65 73 73 20 74 6f 20 74 68 65 0d 0a 20 20 20  cess to the..   
7020: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
7030: 20 20 20 20 20 20 63 6f 6e 74 61 69 6e 65 64 20        contained 
7040: 72 65 67 69 73 74 72 79 20 6b 65 79 2e 0d 0a 20  registry key... 
7050: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
7060: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
7070: 20 20 20 69 66 20 28 21 73 61 66 65 29 0d 0a 20     if (!safe).. 
7080: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7090: 20 20 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20     return;....  
70a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
70b0: 72 6f 77 20 6e 65 77 20 49 6e 76 61 6c 69 64 4f  row new InvalidO
70c0: 70 65 72 61 74 69 6f 6e 45 78 63 65 70 74 69 6f  perationExceptio
70d0: 6e 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  n();..          
70e0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
70f0: 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
7100: 20 20 20 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7130: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7140: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
7150: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 72  ..            #r
7160: 65 67 69 6f 6e 20 53 79 73 74 65 6d 2e 4f 62 6a  egion System.Obj
7170: 65 63 74 20 4f 76 65 72 72 69 64 65 73 0d 0a 20  ect Overrides.. 
7180: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
7190: 63 20 6f 76 65 72 72 69 64 65 20 73 74 72 69 6e  c override strin
71a0: 67 20 54 6f 53 74 72 69 6e 67 28 29 0d 0a 20 20  g ToString()..  
71b0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
71c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 43 68 65               Che
71d0: 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d  ckDisposed();...
71e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
71f0: 20 72 65 74 75 72 6e 20 74 68 69 73 2e 4e 61 6d   return this.Nam
7200: 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
7210: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  }..            #
7220: 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
7230: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
7240: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7250: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7260: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7270: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
7280: 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67              #reg
7290: 69 6f 6e 20 49 6d 70 6c 69 63 69 74 20 43 6f 6e  ion Implicit Con
72a0: 76 65 72 73 69 6f 6e 20 4f 70 65 72 61 74 6f 72  version Operator
72b0: 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  s..            /
72c0: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  /..            /
72d0: 2f 20 42 55 47 42 55 47 3a 20 54 68 65 20 27 77  / BUGBUG: The 'w
72e0: 68 61 74 2d 69 66 27 20 6d 6f 64 65 20 73 65 74  hat-if' mode set
72f0: 74 69 6e 67 20 68 65 72 65 20 73 68 6f 75 6c 64  ting here should
7300: 20 70 72 6f 62 61 62 6c 79 20 62 65 20 62 61 73   probably be bas
7310: 65 64 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ed..            
7320: 2f 2f 20 20 20 20 20 20 20 20 20 6f 6e 20 73 6f  //         on so
7330: 6d 65 20 73 74 61 74 69 63 20 70 72 6f 70 65 72  me static proper
7340: 74 79 2c 20 6e 6f 74 20 68 61 72 64 2d 63 6f 64  ty, not hard-cod
7350: 65 64 20 74 6f 20 74 72 75 65 3f 0d 0a 20 20 20  ed to true?..   
7360: 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
7370: 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
7380: 73 74 61 74 69 63 20 69 6d 70 6c 69 63 69 74 20  static implicit 
7390: 6f 70 65 72 61 74 6f 72 20 4d 6f 63 6b 52 65 67  operator MockReg
73a0: 69 73 74 72 79 4b 65 79 28 0d 0a 20 20 20 20 20  istryKey(..     
73b0: 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73             Regis
73c0: 74 72 79 4b 65 79 20 6b 65 79 0d 0a 20 20 20 20  tryKey key..    
73d0: 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
73e0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
73f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
7400: 74 75 72 6e 20 6e 65 77 20 4d 6f 63 6b 52 65 67  turn new MockReg
7410: 69 73 74 72 79 4b 65 79 28 6b 65 79 2c 20 6e 75  istryKey(key, nu
7420: 6c 6c 2c 20 74 72 75 65 2c 20 66 61 6c 73 65 2c  ll, true, false,
7430: 20 66 61 6c 73 65 29 3b 0d 0a 20 20 20 20 20 20   false);..      
7440: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
7450: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
7460: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7470: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7480: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7490: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
74a0: 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
74b0: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 42 55 47            // BUG
74c0: 42 55 47 3a 20 52 65 6d 6f 76 65 20 6d 65 3f 20  BUG: Remove me? 
74d0: 20 54 68 69 73 20 73 68 6f 75 6c 64 20 62 65 20   This should be 
74e0: 73 61 66 65 20 62 65 63 61 75 73 65 20 69 6e 20  safe because in 
74f0: 27 77 68 61 74 2d 69 66 27 0d 0a 20 20 20 20 20  'what-if'..     
7500: 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
7510: 20 20 6d 6f 64 65 20 61 6c 6c 20 6b 65 79 73 20    mode all keys 
7520: 61 72 65 20 6f 70 65 6e 65 64 20 72 65 61 64 2d  are opened read-
7530: 6f 6e 6c 79 2e 0d 0a 20 20 20 20 20 20 20 20 20  only...         
7540: 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
7550: 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63     public static
7560: 20 69 6d 70 6c 69 63 69 74 20 6f 70 65 72 61 74   implicit operat
7570: 6f 72 20 52 65 67 69 73 74 72 79 4b 65 79 28 0d  or RegistryKey(.
7580: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
7590: 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79   MockRegistryKey
75a0: 20 6b 65 79 0d 0a 20 20 20 20 20 20 20 20 20 20   key..          
75b0: 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
75c0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
75d0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 28          return (
75e0: 6b 65 79 20 21 3d 20 6e 75 6c 6c 29 20 3f 20 6b  key != null) ? k
75f0: 65 79 2e 4b 65 79 20 3a 20 6e 75 6c 6c 3b 0d 0a  ey.Key : null;..
7600: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
7610: 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72             #endr
7620: 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
7630: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
7640: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7650: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7660: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7670: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
7680: 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
7690: 49 44 69 73 70 6f 73 61 62 6c 65 20 22 50 61 74  IDisposable "Pat
76a0: 74 65 72 6e 22 20 4d 65 6d 62 65 72 73 0d 0a 20  tern" Members.. 
76b0: 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
76c0: 74 65 20 62 6f 6f 6c 20 64 69 73 70 6f 73 65 64  te bool disposed
76d0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ;..            p
76e0: 72 69 76 61 74 65 20 76 6f 69 64 20 43 68 65 63  rivate void Chec
76f0: 6b 44 69 73 70 6f 73 65 64 28 29 20 2f 2a 20 74  kDisposed() /* t
7700: 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 20 20 20  hrow */..       
7710: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
7720: 20 20 20 20 20 20 20 20 69 66 20 28 21 64 69 73          if (!dis
7730: 70 6f 73 65 64 29 0d 0a 20 20 20 20 20 20 20 20  posed)..        
7740: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
7750: 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  rn;....         
7760: 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77         throw new
7770: 20 4f 62 6a 65 63 74 44 69 73 70 6f 73 65 64 45   ObjectDisposedE
7780: 78 63 65 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20  xception(..     
7790: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
77a0: 79 70 65 6f 66 28 4d 6f 63 6b 52 65 67 69 73 74  ypeof(MockRegist
77b0: 72 79 4b 65 79 29 2e 4e 61 6d 65 29 3b 0d 0a 20  ryKey).Name);.. 
77c0: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
77d0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
77e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
77f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7800: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7810: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
7820: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
7830: 72 69 76 61 74 65 20 2f 2a 20 70 72 6f 74 65 63  rivate /* protec
7840: 74 65 64 20 76 69 72 74 75 61 6c 20 2a 2f 20 76  ted virtual */ v
7850: 6f 69 64 20 44 69 73 70 6f 73 65 28 0d 0a 20 20  oid Dispose(..  
7860: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
7870: 6f 6c 20 64 69 73 70 6f 73 69 6e 67 0d 0a 20 20  ol disposing..  
7880: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d                ).
7890: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
78a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
78b0: 69 66 20 28 21 64 69 73 70 6f 73 65 64 29 0d 0a  if (!disposed)..
78c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
78d0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
78e0: 20 20 20 20 20 20 20 69 66 20 28 64 69 73 70 6f         if (dispo
78f0: 73 69 6e 67 29 0d 0a 20 20 20 20 20 20 20 20 20  sing)..         
7900: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
7910: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7920: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
7930: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7940: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 20 20 20 20  //////////..    
7950: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7960: 20 20 20 20 2f 2f 20 64 69 73 70 6f 73 65 20 6d      // dispose m
7970: 61 6e 61 67 65 64 20 72 65 73 6f 75 72 63 65 73  anaged resources
7980: 20 68 65 72 65 2e 2e 2e 0d 0a 20 20 20 20 20 20   here.....      
7990: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
79a0: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
79b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
79c0: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
79d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
79e0: 20 20 69 66 20 28 6b 65 79 20 21 3d 20 6e 75 6c    if (key != nul
79f0: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
7a00: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
7a10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7a20: 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 2e 43             key.C
7a30: 6c 6f 73 65 28 29 3b 0d 0a 20 20 20 20 20 20 20  lose();..       
7a40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7a50: 20 20 20 20 20 6b 65 79 20 3d 20 6e 75 6c 6c 3b       key = null;
7a60: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
7a70: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
7a80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7a90: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
7aa0: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
7ab0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7ac0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7ad0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
7ae0: 20 20 20 20 20 20 2f 2f 20 72 65 6c 65 61 73 65        // release
7af0: 20 75 6e 6d 61 6e 61 67 65 64 20 72 65 73 6f 75   unmanaged resou
7b00: 72 63 65 73 20 68 65 72 65 2e 2e 2e 0d 0a 20 20  rces here.....  
7b10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7b20: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
7b30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7b40: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
7b50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7b60: 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
7b70: 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a          // NOTE:
7b80: 20 54 68 69 73 20 6f 62 6a 65 63 74 20 69 73 20   This object is 
7b90: 6e 6f 77 20 64 69 73 70 6f 73 65 64 2e 0d 0a 20  now disposed... 
7ba0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7bb0: 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
7bc0: 20 20 20 20 20 20 20 20 20 20 20 64 69 73 70 6f             dispo
7bd0: 73 65 64 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20  sed = true;..   
7be0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
7bf0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
7c00: 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72             #endr
7c10: 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
7c20: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
7c30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7c40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7c50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7c60: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
7c70: 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
7c80: 49 44 69 73 70 6f 73 61 62 6c 65 20 4d 65 6d 62  IDisposable Memb
7c90: 65 72 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ers..           
7ca0: 20 70 75 62 6c 69 63 20 76 6f 69 64 20 44 69 73   public void Dis
7cb0: 70 6f 73 65 28 29 0d 0a 20 20 20 20 20 20 20 20  pose()..        
7cc0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
7cd0: 20 20 20 20 20 20 20 44 69 73 70 6f 73 65 28 74         Dispose(t
7ce0: 72 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  rue);..         
7cf0: 20 20 20 20 20 20 20 47 43 2e 53 75 70 70 72 65         GC.Suppre
7d00: 73 73 46 69 6e 61 6c 69 7a 65 28 74 68 69 73 29  ssFinalize(this)
7d10: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
7d20: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65  ..            #e
7d30: 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
7d40: 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f  ////////////////
7d80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
7d90: 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69             #regi
7da0: 6f 6e 20 44 65 73 74 72 75 63 74 6f 72 0d 0a 20  on Destructor.. 
7db0: 20 20 20 20 20 20 20 20 20 20 20 7e 4d 6f 63 6b             ~Mock
7dc0: 52 65 67 69 73 74 72 79 4b 65 79 28 29 0d 0a 20  RegistryKey().. 
7dd0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
7de0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 44 69                Di
7df0: 73 70 6f 73 65 28 66 61 6c 73 65 29 3b 0d 0a 20  spose(false);.. 
7e00: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
7e10: 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65            #endre
7e20: 67 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 7d 0d  gion..        }.
7e30: 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67  .        #endreg
7e40: 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  ion....        /
7e50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7e60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7e70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7e80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7e90: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
7ea0: 20 20 23 72 65 67 69 6f 6e 20 52 65 67 69 73 74    #region Regist
7eb0: 72 79 48 65 6c 70 65 72 20 43 6c 61 73 73 0d 0a  ryHelper Class..
7ec0: 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
7ed0: 73 74 61 74 69 63 20 63 6c 61 73 73 20 52 65 67  static class Reg
7ee0: 69 73 74 72 79 48 65 6c 70 65 72 0d 0a 20 20 20  istryHelper..   
7ef0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
7f00: 20 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c      #region Publ
7f10: 69 63 20 53 74 61 74 69 63 20 50 72 6f 70 65 72  ic Static Proper
7f20: 74 69 65 73 0d 0a 20 20 20 20 20 20 20 20 20 20  ties..          
7f30: 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
7f40: 20 69 6e 74 20 73 75 62 4b 65 79 73 43 72 65 61   int subKeysCrea
7f50: 74 65 64 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ted;..          
7f60: 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20    public static 
7f70: 69 6e 74 20 53 75 62 4b 65 79 73 43 72 65 61 74  int SubKeysCreat
7f80: 65 64 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ed..            
7f90: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
7fa0: 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20     get { return 
7fb0: 73 75 62 4b 65 79 73 43 72 65 61 74 65 64 3b 20  subKeysCreated; 
7fc0: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
7fd0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
7fe0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7ff0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8000: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8010: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8020: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
8030: 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
8040: 63 20 69 6e 74 20 73 75 62 4b 65 79 73 44 65 6c  c int subKeysDel
8050: 65 74 65 64 3b 0d 0a 20 20 20 20 20 20 20 20 20  eted;..         
8060: 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63     public static
8070: 20 69 6e 74 20 53 75 62 4b 65 79 73 44 65 6c 65   int SubKeysDele
8080: 74 65 64 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ted..           
8090: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
80a0: 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e      get { return
80b0: 20 73 75 62 4b 65 79 73 44 65 6c 65 74 65 64 3b   subKeysDeleted;
80c0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
80d0: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
80e0: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
80f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8100: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8110: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8120: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
8130: 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74      private stat
8140: 69 63 20 69 6e 74 20 6b 65 79 56 61 6c 75 65 73  ic int keyValues
8150: 53 65 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  Set;..          
8160: 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20    public static 
8170: 69 6e 74 20 4b 65 79 56 61 6c 75 65 73 53 65 74  int KeyValuesSet
8180: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
8190: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
81a0: 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 6b 65   get { return ke
81b0: 79 56 61 6c 75 65 73 53 65 74 3b 20 7d 0d 0a 20  yValuesSet; }.. 
81c0: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
81d0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
81e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
81f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8200: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8210: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
8220: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
8230: 72 69 76 61 74 65 20 73 74 61 74 69 63 20 69 6e  rivate static in
8240: 74 20 6b 65 79 56 61 6c 75 65 73 44 65 6c 65 74  t keyValuesDelet
8250: 65 64 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ed;..           
8260: 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 69   public static i
8270: 6e 74 20 4b 65 79 56 61 6c 75 65 73 44 65 6c 65  nt KeyValuesDele
8280: 74 65 64 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ted..           
8290: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
82a0: 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e      get { return
82b0: 20 6b 65 79 56 61 6c 75 65 73 44 65 6c 65 74 65   keyValuesDelete
82c0: 64 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  d; }..          
82d0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
82e0: 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
82f0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
8300: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8310: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8320: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8330: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
8340: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 72  ..            #r
8350: 65 67 69 6f 6e 20 50 75 62 6c 69 63 20 53 74 61  egion Public Sta
8360: 74 69 63 20 4d 65 74 68 6f 64 73 0d 0a 20 20 20  tic Methods..   
8370: 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
8380: 73 74 61 74 69 63 20 52 65 67 69 73 74 72 79 4b  static RegistryK
8390: 65 79 20 47 65 74 52 6f 6f 74 4b 65 79 42 79 4e  ey GetRootKeyByN
83a0: 61 6d 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ame(..          
83b0: 20 20 20 20 20 20 73 74 72 69 6e 67 20 6b 65 79        string key
83c0: 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 20  Name..          
83d0: 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
83e0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
83f0: 20 20 20 20 20 20 20 20 69 66 20 28 53 74 72 69          if (Stri
8400: 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79  ng.IsNullOrEmpty
8410: 28 6b 65 79 4e 61 6d 65 29 29 0d 0a 20 20 20 20  (keyName))..    
8420: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8430: 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a  return null;....
8440: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8450: 73 77 69 74 63 68 20 28 6b 65 79 4e 61 6d 65 2e  switch (keyName.
8460: 54 6f 55 70 70 65 72 49 6e 76 61 72 69 61 6e 74  ToUpperInvariant
8470: 28 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ())..           
8480: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
8490: 20 20 20 20 20 20 20 20 20 20 20 20 63 61 73 65              case
84a0: 20 22 48 4b 43 52 22 3a 0d 0a 20 20 20 20 20 20   "HKCR":..      
84b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 61                ca
84c0: 73 65 20 22 48 4b 45 59 5f 43 4c 41 53 53 45 53  se "HKEY_CLASSES
84d0: 5f 52 4f 4f 54 22 3a 0d 0a 20 20 20 20 20 20 20  _ROOT":..       
84e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
84f0: 20 72 65 74 75 72 6e 20 52 65 67 69 73 74 72 79   return Registry
8500: 2e 43 6c 61 73 73 65 73 52 6f 6f 74 3b 0d 0a 20  .ClassesRoot;.. 
8510: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8520: 20 20 20 63 61 73 65 20 22 48 4b 43 43 22 3a 0d     case "HKCC":.
8530: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
8540: 20 20 20 20 20 63 61 73 65 20 22 48 4b 45 59 5f       case "HKEY_
8550: 43 55 52 52 45 4e 54 5f 43 4f 4e 46 49 47 22 3a  CURRENT_CONFIG":
8560: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8570: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
8580: 20 52 65 67 69 73 74 72 79 2e 43 75 72 72 65 6e   Registry.Curren
8590: 74 43 6f 6e 66 69 67 3b 0d 0a 20 20 20 20 20 20  tConfig;..      
85a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 61                ca
85b0: 73 65 20 22 48 4b 43 55 22 3a 0d 0a 20 20 20 20  se "HKCU":..    
85c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
85d0: 63 61 73 65 20 22 48 4b 45 59 5f 43 55 52 52 45  case "HKEY_CURRE
85e0: 4e 54 5f 55 53 45 52 22 3a 0d 0a 20 20 20 20 20  NT_USER":..     
85f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8600: 20 20 20 72 65 74 75 72 6e 20 52 65 67 69 73 74     return Regist
8610: 72 79 2e 43 75 72 72 65 6e 74 55 73 65 72 3b 0d  ry.CurrentUser;.
8620: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
8630: 20 20 20 20 20 63 61 73 65 20 22 48 4b 44 44 22       case "HKDD"
8640: 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  :..             
8650: 20 20 20 20 20 20 20 63 61 73 65 20 22 48 4b 45         case "HKE
8660: 59 5f 44 59 4e 5f 44 41 54 41 22 3a 0d 0a 20 20  Y_DYN_DATA":..  
8670: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8680: 20 20 20 20 20 20 72 65 74 75 72 6e 20 52 65 67        return Reg
8690: 69 73 74 72 79 2e 44 79 6e 44 61 74 61 3b 0d 0a  istry.DynData;..
86a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
86b0: 20 20 20 20 63 61 73 65 20 22 48 4b 4c 4d 22 3a      case "HKLM":
86c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
86d0: 20 20 20 20 20 20 63 61 73 65 20 22 48 4b 45 59        case "HKEY
86e0: 5f 4c 4f 43 41 4c 5f 4d 41 43 48 49 4e 45 22 3a  _LOCAL_MACHINE":
86f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8700: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
8710: 20 52 65 67 69 73 74 72 79 2e 4c 6f 63 61 6c 4d   Registry.LocalM
8720: 61 63 68 69 6e 65 3b 0d 0a 20 20 20 20 20 20 20  achine;..       
8730: 20 20 20 20 20 20 20 20 20 20 20 20 20 63 61 73               cas
8740: 65 20 22 48 4b 50 44 22 3a 0d 0a 20 20 20 20 20  e "HKPD":..     
8750: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
8760: 61 73 65 20 22 48 4b 45 59 5f 50 45 52 46 4f 52  ase "HKEY_PERFOR
8770: 4d 41 4e 43 45 5f 44 41 54 41 22 3a 0d 0a 20 20  MANCE_DATA":..  
8780: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8790: 20 20 20 20 20 20 72 65 74 75 72 6e 20 52 65 67        return Reg
87a0: 69 73 74 72 79 2e 50 65 72 66 6f 72 6d 61 6e 63  istry.Performanc
87b0: 65 44 61 74 61 3b 0d 0a 20 20 20 20 20 20 20 20  eData;..        
87c0: 20 20 20 20 20 20 20 20 20 20 20 20 63 61 73 65              case
87d0: 20 22 48 4b 55 22 3a 0d 0a 20 20 20 20 20 20 20   "HKU":..       
87e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 63 61 73               cas
87f0: 65 20 22 48 4b 45 59 5f 55 53 45 52 53 22 3a 0d  e "HKEY_USERS":.
8800: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
8810: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
8820: 52 65 67 69 73 74 72 79 2e 55 73 65 72 73 3b 0d  Registry.Users;.
8830: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
8840: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
8850: 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c        return nul
8860: 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l;..            
8870: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
8880: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
8890: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
88a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
88b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
88c0: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
88d0: 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69      public stati
88e0: 63 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65  c MockRegistryKe
88f0: 79 20 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20  y OpenSubKey(.. 
8900: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4d                 M
8910: 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 72  ockRegistryKey r
8920: 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20  ootKey,..       
8930: 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
8940: 73 75 62 4b 65 79 4e 61 6d 65 2c 0d 0a 20 20 20  subKeyName,..   
8950: 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
8960: 6c 20 77 72 69 74 61 62 6c 65 2c 0d 0a 20 20 20  l writable,..   
8970: 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
8980: 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20  l whatIf,..     
8990: 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
89a0: 76 65 72 62 6f 73 65 0d 0a 20 20 20 20 20 20 20  verbose..       
89b0: 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
89c0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
89d0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 72             if (r
89e0: 6f 6f 74 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d  ootKey == null).
89f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
8a00: 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c       return null
8a10: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
8a20: 20 20 20 20 20 69 66 20 28 76 65 72 62 6f 73 65       if (verbose
8a30: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
8a40: 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e         TraceOps.
8a50: 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 77 72  DebugAndTrace(wr
8a60: 69 74 61 62 6c 65 20 3f 0d 0a 20 20 20 20 20 20  itable ?..      
8a70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8a80: 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e    TracePriority.
8a90: 48 69 67 68 65 73 74 20 3a 20 54 72 61 63 65 50  Highest : TraceP
8aa0: 72 69 6f 72 69 74 79 2e 48 69 67 68 65 72 2c 0d  riority.Higher,.
8ab0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
8ac0: 20 20 20 20 20 20 20 20 20 64 65 62 75 67 43 61           debugCa
8ad0: 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c  llback, traceCal
8ae0: 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f  lback, String.Fo
8af0: 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
8b00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
8b10: 72 6f 6f 74 4b 65 79 20 3d 20 7b 30 7d 2c 20 73  rootKey = {0}, s
8b20: 75 62 4b 65 79 4e 61 6d 65 20 3d 20 7b 31 7d 2c  ubKeyName = {1},
8b30: 20 77 72 69 74 61 62 6c 65 20 3d 20 7b 32 7d 22   writable = {2}"
8b40: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
8b50: 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69             ForDi
8b60: 73 70 6c 61 79 28 72 6f 6f 74 4b 65 79 29 2c 20  splay(rootKey), 
8b70: 46 6f 72 44 69 73 70 6c 61 79 28 73 75 62 4b 65  ForDisplay(subKe
8b80: 79 4e 61 6d 65 29 2c 0d 0a 20 20 20 20 20 20 20  yName),..       
8b90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8ba0: 20 46 6f 72 44 69 73 70 6c 61 79 28 77 72 69 74   ForDisplay(writ
8bb0: 61 62 6c 65 29 29 2c 20 74 72 61 63 65 43 61 74  able)), traceCat
8bc0: 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
8bd0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
8be0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
8bf0: 2f 20 48 41 43 4b 3a 20 41 6c 77 61 79 73 20 66  / HACK: Always f
8c00: 6f 72 62 69 64 20 77 72 69 74 61 62 6c 65 20 61  orbid writable a
8c10: 63 63 65 73 73 20 77 68 65 6e 20 6f 70 65 72 61  ccess when opera
8c20: 74 69 6e 67 20 69 6e 0d 0a 20 20 20 20 20 20 20  ting in..       
8c30: 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
8c40: 20 20 27 77 68 61 74 2d 69 66 27 20 6d 6f 64 65    'what-if' mode
8c50: 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
8c60: 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
8c70: 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73         MockRegis
8c80: 74 72 79 4b 65 79 20 6b 65 79 20 3d 20 72 6f 6f  tryKey key = roo
8c90: 74 4b 65 79 2e 4f 70 65 6e 53 75 62 4b 65 79 28  tKey.OpenSubKey(
8ca0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8cb0: 20 20 20 20 20 20 73 75 62 4b 65 79 4e 61 6d 65        subKeyName
8cc0: 2c 20 77 68 61 74 49 66 20 3f 20 66 61 6c 73 65  , whatIf ? false
8cd0: 20 3a 20 77 72 69 74 61 62 6c 65 29 3b 0d 0a 0d   : writable);...
8ce0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
8cf0: 20 72 65 74 75 72 6e 20 28 6b 65 79 20 21 3d 20   return (key != 
8d00: 6e 75 6c 6c 29 20 3f 0d 0a 20 20 20 20 20 20 20  null) ?..       
8d10: 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 65 77               new
8d20: 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79   MockRegistryKey
8d30: 28 6b 65 79 2c 20 77 68 61 74 49 66 2c 20 66 61  (key, whatIf, fa
8d40: 6c 73 65 2c 20 66 61 6c 73 65 29 20 3a 20 6e 75  lse, false) : nu
8d50: 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll;..           
8d60: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
8d70: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
8d80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8d90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
8dc0: 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74       public stat
8dd0: 69 63 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b  ic MockRegistryK
8de0: 65 79 20 43 72 65 61 74 65 53 75 62 4b 65 79 28  ey CreateSubKey(
8df0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8e00: 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65    MockRegistryKe
8e10: 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 20  y rootKey,..    
8e20: 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
8e30: 6e 67 20 73 75 62 4b 65 79 4e 61 6d 65 2c 0d 0a  ng subKeyName,..
8e40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8e50: 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20  bool whatIf,..  
8e60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
8e70: 6f 6c 20 76 65 72 62 6f 73 65 0d 0a 20 20 20 20  ol verbose..    
8e80: 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
8e90: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
8ea0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
8eb0: 20 28 72 6f 6f 74 4b 65 79 20 3d 3d 20 6e 75 6c   (rootKey == nul
8ec0: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
8ed0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e          return n
8ee0: 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ull;....        
8ef0: 20 20 20 20 20 20 20 20 69 66 20 28 76 65 72 62          if (verb
8f00: 6f 73 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ose)..          
8f10: 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f            TraceO
8f20: 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65  ps.DebugAndTrace
8f30: 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 48  (TracePriority.H
8f40: 69 67 68 65 73 74 2c 0d 0a 20 20 20 20 20 20 20  ighest,..       
8f50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8f60: 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20   debugCallback, 
8f70: 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53  traceCallback, S
8f80: 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
8f90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8fa0: 20 20 20 20 20 20 20 22 72 6f 6f 74 4b 65 79 20         "rootKey 
8fb0: 3d 20 7b 30 7d 2c 20 73 75 62 4b 65 79 4e 61 6d  = {0}, subKeyNam
8fc0: 65 20 3d 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20  e = {1}",..     
8fd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8fe0: 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 72 6f     ForDisplay(ro
8ff0: 6f 74 4b 65 79 29 2c 20 46 6f 72 44 69 73 70 6c  otKey), ForDispl
9000: 61 79 28 73 75 62 4b 65 79 4e 61 6d 65 29 29 2c  ay(subKeyName)),
9010: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
9020: 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
9030: 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
9040: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79               try
9050: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
9060: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
9070: 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
9080: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9090: 20 2f 2f 20 48 41 43 4b 3a 20 41 6c 77 61 79 73   // HACK: Always
90a0: 20 6f 70 65 6e 20 61 20 6b 65 79 2c 20 72 61 74   open a key, rat
90b0: 68 65 72 20 74 68 61 6e 20 63 72 65 61 74 69 6e  her than creatin
90c0: 67 20 6f 6e 65 20 77 68 65 6e 0d 0a 20 20 20 20  g one when..    
90d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
90e0: 2f 2f 20 20 20 20 20 20 20 6f 70 65 72 61 74 69  //       operati
90f0: 6e 67 20 69 6e 20 27 77 68 61 74 2d 69 66 27 20  ng in 'what-if' 
9100: 6d 6f 64 65 2e 0d 0a 20 20 20 20 20 20 20 20 20  mode...         
9110: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
9120: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9130: 20 20 20 69 66 20 28 77 68 61 74 49 66 29 0d 0a     if (whatIf)..
9140: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9150: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
9160: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
9170: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
9180: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 48 41             // HA
9190: 43 4b 3a 20 41 74 74 65 6d 70 74 20 74 6f 20 6f  CK: Attempt to o
91a0: 70 65 6e 20 74 68 65 20 73 70 65 63 69 66 69 65  pen the specifie
91b0: 64 20 73 75 62 2d 6b 65 79 2e 20 20 49 66 0d 0a  d sub-key.  If..
91c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
91d0: 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
91e0: 20 74 68 69 73 20 66 61 69 6c 73 2c 20 77 65 20   this fails, we 
91f0: 77 69 6c 6c 20 73 69 6d 70 6c 79 20 72 65 74 75  will simply retu
9200: 72 6e 20 74 68 65 20 72 6f 6f 74 0d 0a 20 20 20  rn the root..   
9210: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9220: 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6b 65       //       ke
9230: 79 20 69 74 73 65 6c 66 20 73 69 6e 63 65 20 6e  y itself since n
9240: 6f 20 77 72 69 74 65 73 20 61 72 65 20 61 6c 6c  o writes are all
9250: 6f 77 65 64 20 69 6e 0d 0a 20 20 20 20 20 20 20  owed in..       
9260: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9270: 20 2f 2f 20 20 20 20 20 20 20 27 77 68 61 74 2d   //       'what-
9280: 69 66 27 20 6d 6f 64 65 20 61 6e 79 68 6f 77 2e  if' mode anyhow.
9290: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
92a0: 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
92b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
92c0: 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74        MockRegist
92d0: 72 79 4b 65 79 20 6b 65 79 20 3d 20 72 6f 6f 74  ryKey key = root
92e0: 4b 65 79 2e 4f 70 65 6e 53 75 62 4b 65 79 28 73  Key.OpenSubKey(s
92f0: 75 62 4b 65 79 4e 61 6d 65 29 3b 0d 0a 0d 0a 20  ubKeyName);.... 
9300: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9310: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 28 6b         return (k
9320: 65 79 20 21 3d 20 6e 75 6c 6c 29 20 3f 0d 0a 20  ey != null) ?.. 
9330: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9340: 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 20 3a             key :
9350: 20 6e 65 77 20 4d 6f 63 6b 52 65 67 69 73 74 72   new MockRegistr
9360: 79 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20  yKey(..         
9370: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9380: 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20         rootKey, 
9390: 73 75 62 4b 65 79 4e 61 6d 65 2c 20 74 72 75 65  subKeyName, true
93a0: 2c 20 66 61 6c 73 65 2c 20 66 61 6c 73 65 29 3b  , false, false);
93b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
93c0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
93d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73               els
93e0: 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
93f0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
9400: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9410: 20 20 72 65 74 75 72 6e 20 6e 65 77 20 4d 6f 63    return new Moc
9420: 6b 52 65 67 69 73 74 72 79 4b 65 79 28 0d 0a 20  kRegistryKey(.. 
9430: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9440: 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b             rootK
9450: 65 79 2e 43 72 65 61 74 65 53 75 62 4b 65 79 28  ey.CreateSubKey(
9460: 73 75 62 4b 65 79 4e 61 6d 65 29 2c 20 66 61 6c  subKeyName), fal
9470: 73 65 2c 20 66 61 6c 73 65 2c 0d 0a 20 20 20 20  se, false,..    
9480: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9490: 20 20 20 20 20 20 20 20 66 61 6c 73 65 29 3b 0d          false);.
94a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
94b0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
94c0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
94d0: 20 20 20 20 20 20 20 20 20 20 20 66 69 6e 61 6c             final
94e0: 6c 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ly..            
94f0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
9500: 20 20 20 20 20 20 20 20 20 20 20 73 75 62 4b 65             subKe
9510: 79 73 43 72 65 61 74 65 64 2b 2b 3b 0d 0a 20 20  ysCreated++;..  
9520: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
9530: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
9540: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
9550: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9560: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9570: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9580: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9590: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
95a0: 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 76   public static v
95b0: 6f 69 64 20 44 65 6c 65 74 65 53 75 62 4b 65 79  oid DeleteSubKey
95c0: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
95d0: 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b     MockRegistryK
95e0: 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20  ey rootKey,..   
95f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72               str
9600: 69 6e 67 20 73 75 62 4b 65 79 4e 61 6d 65 2c 0d  ing subKeyName,.
9610: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
9620: 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20   bool whatIf,.. 
9630: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
9640: 6f 6f 6c 20 76 65 72 62 6f 73 65 0d 0a 20 20 20  ool verbose..   
9650: 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a               )..
9660: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
9670: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
9680: 66 20 28 72 6f 6f 74 4b 65 79 20 3d 3d 20 6e 75  f (rootKey == nu
9690: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
96a0: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 3b           return;
96b0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
96c0: 20 20 20 20 69 66 20 28 76 65 72 62 6f 73 65 29      if (verbose)
96d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
96e0: 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44        TraceOps.D
96f0: 65 62 75 67 41 6e 64 54 72 61 63 65 28 54 72 61  ebugAndTrace(Tra
9700: 63 65 50 72 69 6f 72 69 74 79 2e 48 69 67 68 65  cePriority.Highe
9710: 73 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  st,..           
9720: 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62               deb
9730: 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63  ugCallback, trac
9740: 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e  eCallback, Strin
9750: 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
9760: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9770: 20 20 20 22 72 6f 6f 74 4b 65 79 20 3d 20 7b 30     "rootKey = {0
9780: 7d 2c 20 73 75 62 4b 65 79 4e 61 6d 65 20 3d 20  }, subKeyName = 
9790: 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  {1}",..         
97a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46                 F
97b0: 6f 72 44 69 73 70 6c 61 79 28 72 6f 6f 74 4b 65  orDisplay(rootKe
97c0: 79 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 73  y), ForDisplay(s
97d0: 75 62 4b 65 79 4e 61 6d 65 29 29 2c 0d 0a 20 20  ubKeyName)),..  
97e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
97f0: 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
9800: 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
9810: 20 20 20 20 20 20 20 20 20 69 66 20 28 21 77 68           if (!wh
9820: 61 74 49 66 29 0d 0a 20 20 20 20 20 20 20 20 20  atIf)..         
9830: 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b             rootK
9840: 65 79 2e 44 65 6c 65 74 65 53 75 62 4b 65 79 28  ey.DeleteSubKey(
9850: 73 75 62 4b 65 79 4e 61 6d 65 29 3b 0d 0a 0d 0a  subKeyName);....
9860: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9870: 73 75 62 4b 65 79 73 44 65 6c 65 74 65 64 2b 2b  subKeysDeleted++
9880: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
9890: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
98a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
98b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
98c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
98d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
98e0: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
98f0: 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63     public static
9900: 20 76 6f 69 64 20 44 65 6c 65 74 65 53 75 62 4b   void DeleteSubK
9910: 65 79 54 72 65 65 28 0d 0a 20 20 20 20 20 20 20  eyTree(..       
9920: 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67           MockReg
9930: 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79  istryKey rootKey
9940: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
9950: 20 20 20 73 74 72 69 6e 67 20 73 75 62 4b 65 79     string subKey
9960: 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  Name,..         
9970: 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74         bool what
9980: 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  If,..           
9990: 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73       bool verbos
99a0: 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
99b0: 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20     )..          
99c0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
99d0: 20 20 20 20 20 69 66 20 28 72 6f 6f 74 4b 65 79       if (rootKey
99e0: 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
99f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
9a00: 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20  eturn;....      
9a10: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76 65            if (ve
9a20: 72 62 6f 73 65 29 0d 0a 20 20 20 20 20 20 20 20  rbose)..        
9a30: 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
9a40: 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61  eOps.DebugAndTra
9a50: 63 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79  ce(TracePriority
9a60: 2e 48 69 67 68 65 73 74 2c 0d 0a 20 20 20 20 20  .Highest,..     
9a70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9a80: 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b     debugCallback
9a90: 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c  , traceCallback,
9aa0: 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
9ab0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
9ac0: 20 20 20 20 20 20 20 20 20 22 72 6f 6f 74 4b 65           "rootKe
9ad0: 79 20 3d 20 7b 30 7d 2c 20 73 75 62 4b 65 79 4e  y = {0}, subKeyN
9ae0: 61 6d 65 20 3d 20 7b 31 7d 22 2c 0d 0a 20 20 20  ame = {1}",..   
9af0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9b00: 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28       ForDisplay(
9b10: 72 6f 6f 74 4b 65 79 29 2c 20 46 6f 72 44 69 73  rootKey), ForDis
9b20: 70 6c 61 79 28 73 75 62 4b 65 79 4e 61 6d 65 29  play(subKeyName)
9b30: 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
9b40: 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
9b50: 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
9b60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
9b70: 66 20 28 21 77 68 61 74 49 66 29 0d 0a 20 20 20  f (!whatIf)..   
9b80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9b90: 20 72 6f 6f 74 4b 65 79 2e 44 65 6c 65 74 65 53   rootKey.DeleteS
9ba0: 75 62 4b 65 79 54 72 65 65 28 73 75 62 4b 65 79  ubKeyTree(subKey
9bb0: 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  Name);....      
9bc0: 20 20 20 20 20 20 20 20 20 20 73 75 62 4b 65 79            subKey
9bd0: 73 44 65 6c 65 74 65 64 2b 2b 3b 0d 0a 20 20 20  sDeleted++;..   
9be0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
9bf0: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
9c00: 2f 2f 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 0d 0a 0d  /////////////...
9c40: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
9c50: 6c 69 63 20 73 74 61 74 69 63 20 73 74 72 69 6e  lic static strin
9c60: 67 5b 5d 20 47 65 74 53 75 62 4b 65 79 4e 61 6d  g[] GetSubKeyNam
9c70: 65 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  es(..           
9c80: 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72       MockRegistr
9c90: 79 4b 65 79 20 6b 65 79 2c 0d 0a 20 20 20 20 20  yKey key,..     
9ca0: 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
9cb0: 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20  whatIf,..       
9cc0: 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65           bool ve
9cd0: 72 62 6f 73 65 0d 0a 20 20 20 20 20 20 20 20 20  rbose..         
9ce0: 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
9cf0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
9d00: 20 20 20 20 20 20 20 20 20 69 66 20 28 6b 65 79           if (key
9d10: 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
9d20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
9d30: 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20  eturn null;.... 
9d40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
9d50: 66 20 28 76 65 72 62 6f 73 65 29 0d 0a 20 20 20  f (verbose)..   
9d60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9d70: 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41   TraceOps.DebugA
9d80: 6e 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69  ndTrace(TracePri
9d90: 6f 72 69 74 79 2e 48 69 67 68 2c 0d 0a 20 20 20  ority.High,..   
9da0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9db0: 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61       debugCallba
9dc0: 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63  ck, traceCallbac
9dd0: 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  k, String.Format
9de0: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
9df0: 20 20 20 20 20 20 20 20 20 20 20 22 6b 65 79 20             "key 
9e00: 3d 20 7b 30 7d 22 2c 20 46 6f 72 44 69 73 70 6c  = {0}", ForDispl
9e10: 61 79 28 6b 65 79 29 29 2c 20 74 72 61 63 65 43  ay(key)), traceC
9e20: 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
9e30: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
9e40: 75 72 6e 20 6b 65 79 2e 47 65 74 53 75 62 4b 65  urn key.GetSubKe
9e50: 79 4e 61 6d 65 73 28 29 3b 0d 0a 20 20 20 20 20  yNames();..     
9e60: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
9e70: 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9eb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
9ec0: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
9ed0: 63 20 73 74 61 74 69 63 20 6f 62 6a 65 63 74 20  c static object 
9ee0: 47 65 74 56 61 6c 75 65 28 0d 0a 20 20 20 20 20  GetValue(..     
9ef0: 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52             MockR
9f00: 65 67 69 73 74 72 79 4b 65 79 20 6b 65 79 2c 0d  egistryKey key,.
9f10: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
9f20: 20 73 74 72 69 6e 67 20 6e 61 6d 65 2c 0d 0a 20   string name,.. 
9f30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f                 o
9f40: 62 6a 65 63 74 20 64 65 66 61 75 6c 74 56 61 6c  bject defaultVal
9f50: 75 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue,..           
9f60: 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66       bool whatIf
9f70: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
9f80: 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 0d     bool verbose.
9f90: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
9fa0: 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   )..            
9fb0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
9fc0: 20 20 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75     if (key == nu
9fd0: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
9fe0: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
9ff0: 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  null;....       
a000: 20 20 20 20 20 20 20 20 20 69 66 20 28 76 65 72           if (ver
a010: 62 6f 73 65 29 0d 0a 20 20 20 20 20 20 20 20 20  bose)..         
a020: 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
a030: 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63  Ops.DebugAndTrac
a040: 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e  e(TracePriority.
a050: 48 69 67 68 2c 0d 0a 20 20 20 20 20 20 20 20 20  High,..         
a060: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
a070: 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72  ebugCallback, tr
a080: 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72  aceCallback, Str
a090: 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
a0a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a0b0: 20 20 20 20 20 22 6b 65 79 20 3d 20 7b 30 7d 2c       "key = {0},
a0c0: 20 6e 61 6d 65 20 3d 20 7b 31 7d 2c 20 64 65 66   name = {1}, def
a0d0: 61 75 6c 74 56 61 6c 75 65 20 3d 20 7b 32 7d 22  aultValue = {2}"
a0e0: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
a0f0: 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69             ForDi
a100: 73 70 6c 61 79 28 6b 65 79 29 2c 20 46 6f 72 44  splay(key), ForD
a110: 69 73 70 6c 61 79 28 6e 61 6d 65 29 2c 0d 0a 20  isplay(name),.. 
a120: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a130: 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61         ForDispla
a140: 79 28 64 65 66 61 75 6c 74 56 61 6c 75 65 29 29  y(defaultValue))
a150: 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29  , traceCategory)
a160: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
a170: 20 20 20 20 20 72 65 74 75 72 6e 20 6b 65 79 2e       return key.
a180: 47 65 74 56 61 6c 75 65 28 6e 61 6d 65 2c 20 64  GetValue(name, d
a190: 65 66 61 75 6c 74 56 61 6c 75 65 29 3b 0d 0a 20  efaultValue);.. 
a1a0: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
a1b0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
a1c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a1d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a1e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a1f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
a200: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
a210: 75 62 6c 69 63 20 73 74 61 74 69 63 20 76 6f 69  ublic static voi
a220: 64 20 53 65 74 56 61 6c 75 65 28 0d 0a 20 20 20  d SetValue(..   
a230: 20 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63               Moc
a240: 6b 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65 79  kRegistryKey key
a250: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
a260: 20 20 20 73 74 72 69 6e 67 20 6e 61 6d 65 2c 0d     string name,.
a270: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
a280: 20 6f 62 6a 65 63 74 20 76 61 6c 75 65 2c 0d 0a   object value,..
a290: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a2a0: 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20  bool whatIf,..  
a2b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
a2c0: 6f 6c 20 76 65 72 62 6f 73 65 0d 0a 20 20 20 20  ol verbose..    
a2d0: 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
a2e0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
a2f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
a300: 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a   (key == null)..
a310: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a320: 20 20 20 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20      return;.... 
a330: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
a340: 66 20 28 76 65 72 62 6f 73 65 29 0d 0a 20 20 20  f (verbose)..   
a350: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a360: 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41   TraceOps.DebugA
a370: 6e 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69  ndTrace(TracePri
a380: 6f 72 69 74 79 2e 48 69 67 68 65 73 74 2c 0d 0a  ority.Highest,..
a390: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a3a0: 20 20 20 20 20 20 20 20 64 65 62 75 67 43 61 6c          debugCal
a3b0: 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c  lback, traceCall
a3c0: 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72  back, String.For
a3d0: 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
a3e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 6b                "k
a3f0: 65 79 20 3d 20 7b 30 7d 2c 20 6e 61 6d 65 20 3d  ey = {0}, name =
a400: 20 7b 31 7d 2c 20 76 61 6c 75 65 20 3d 20 7b 32   {1}, value = {2
a410: 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }",..           
a420: 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72               For
a430: 44 69 73 70 6c 61 79 28 6b 65 79 29 2c 20 46 6f  Display(key), Fo
a440: 72 44 69 73 70 6c 61 79 28 6e 61 6d 65 29 2c 20  rDisplay(name), 
a450: 46 6f 72 44 69 73 70 6c 61 79 28 76 61 6c 75 65  ForDisplay(value
a460: 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
a470: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
a480: 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
a490: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a4a0: 69 66 20 28 21 77 68 61 74 49 66 29 0d 0a 20 20  if (!whatIf)..  
a4b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a4c0: 20 20 6b 65 79 2e 53 65 74 56 61 6c 75 65 28 6e    key.SetValue(n
a4d0: 61 6d 65 2c 20 76 61 6c 75 65 29 3b 0d 0a 0d 0a  ame, value);....
a4e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a4f0: 6b 65 79 56 61 6c 75 65 73 53 65 74 2b 2b 3b 0d  keyValuesSet++;.
a500: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
a510: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
a520: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a530: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a540: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a550: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a560: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
a570: 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 76   public static v
a580: 6f 69 64 20 44 65 6c 65 74 65 56 61 6c 75 65 28  oid DeleteValue(
a590: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
a5a0: 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65    MockRegistryKe
a5b0: 79 20 6b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20  y key,..        
a5c0: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6e          string n
a5d0: 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ame,..          
a5e0: 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49        bool whatI
a5f0: 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f,..            
a600: 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65      bool verbose
a610: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
a620: 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20    )..           
a630: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
a640: 20 20 20 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e      if (key == n
a650: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
a660: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
a670: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
a680: 20 20 20 20 20 69 66 20 28 76 65 72 62 6f 73 65       if (verbose
a690: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
a6a0: 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e         TraceOps.
a6b0: 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 54 72  DebugAndTrace(Tr
a6c0: 61 63 65 50 72 69 6f 72 69 74 79 2e 48 69 67 68  acePriority.High
a6d0: 65 73 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  est,..          
a6e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65                de
a6f0: 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61  bugCallback, tra
a700: 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69  ceCallback, Stri
a710: 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
a720: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a730: 20 20 20 20 22 6b 65 79 20 3d 20 7b 30 7d 2c 20      "key = {0}, 
a740: 6e 61 6d 65 20 3d 20 7b 31 7d 22 2c 20 46 6f 72  name = {1}", For
a750: 44 69 73 70 6c 61 79 28 6b 65 79 29 2c 0d 0a 20  Display(key),.. 
a760: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a770: 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61         ForDispla
a780: 79 28 6e 61 6d 65 29 29 2c 20 74 72 61 63 65 43  y(name)), traceC
a790: 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
a7a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
a7b0: 28 21 77 68 61 74 49 66 29 0d 0a 20 20 20 20 20  (!whatIf)..     
a7c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b                 k
a7d0: 65 79 2e 44 65 6c 65 74 65 56 61 6c 75 65 28 6e  ey.DeleteValue(n
a7e0: 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ame);....       
a7f0: 20 20 20 20 20 20 20 20 20 6b 65 79 56 61 6c 75           keyValu
a800: 65 73 44 65 6c 65 74 65 64 2b 2b 3b 0d 0a 20 20  esDeleted++;..  
a810: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
a820: 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67           #endreg
a830: 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ion..        }..
a840: 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
a850: 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  on....        //
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 2f 2f 2f 2f  ////////////////
a890: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a8a0: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
a8b0: 20 23 72 65 67 69 6f 6e 20 53 74 72 69 6e 67 4c   #region StringL
a8c0: 69 73 74 20 43 6c 61 73 73 0d 0a 20 20 20 20 20  ist Class..     
a8d0: 20 20 20 70 72 69 76 61 74 65 20 73 65 61 6c 65     private seale
a8e0: 64 20 63 6c 61 73 73 20 53 74 72 69 6e 67 4c 69  d class StringLi
a8f0: 73 74 20 3a 20 4c 69 73 74 3c 73 74 72 69 6e 67  st : List<string
a900: 3e 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  >..        {..  
a910: 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
a920: 20 53 74 72 69 6e 67 4c 69 73 74 28 29 0d 0a 20   StringList().. 
a930: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3a                 :
a940: 20 62 61 73 65 28 29 0d 0a 20 20 20 20 20 20 20   base()..       
a950: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
a960: 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f          // do no
a970: 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20  thing...        
a980: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
a990: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
a9a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a9b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a9c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a9d0: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
a9e0: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 53          public S
a9f0: 74 72 69 6e 67 4c 69 73 74 28 49 45 6e 75 6d 65  tringList(IEnume
aa00: 72 61 62 6c 65 3c 73 74 72 69 6e 67 3e 20 63 6f  rable<string> co
aa10: 6c 6c 65 63 74 69 6f 6e 29 0d 0a 20 20 20 20 20  llection)..     
aa20: 20 20 20 20 20 20 20 20 20 20 20 3a 20 62 61 73             : bas
aa30: 65 28 63 6f 6c 6c 65 63 74 69 6f 6e 29 0d 0a 20  e(collection).. 
aa40: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
aa50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
aa60: 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20   do nothing...  
aa70: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
aa80: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
aa90: 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
aaa0: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
aab0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
aac0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
aad0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
aae0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
aaf0: 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e  .        #region
ab00: 20 53 74 72 69 6e 67 44 69 63 74 69 6f 6e 61 72   StringDictionar
ab10: 79 20 43 6c 61 73 73 0d 0a 20 20 20 20 20 20 20  y Class..       
ab20: 20 70 72 69 76 61 74 65 20 73 65 61 6c 65 64 20   private sealed 
ab30: 63 6c 61 73 73 20 53 74 72 69 6e 67 44 69 63 74  class StringDict
ab40: 69 6f 6e 61 72 79 20 3a 20 44 69 63 74 69 6f 6e  ionary : Diction
ab50: 61 72 79 3c 73 74 72 69 6e 67 2c 20 73 74 72 69  ary<string, stri
ab60: 6e 67 3e 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  ng>..        {..
ab70: 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
ab80: 69 63 20 53 74 72 69 6e 67 44 69 63 74 69 6f 6e  ic StringDiction
ab90: 61 72 79 28 29 0d 0a 20 20 20 20 20 20 20 20 20  ary()..         
aba0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
abb0: 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68        // do noth
abc0: 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  ing...          
abd0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a    }..        }..
abe0: 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
abf0: 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  on....        //
ac00: 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
ac50: 20 23 72 65 67 69 6f 6e 20 56 65 72 73 69 6f 6e   #region Version
ac60: 4c 69 73 74 20 43 6c 61 73 73 0d 0a 20 20 20 20  List Class..    
ac70: 20 20 20 20 70 72 69 76 61 74 65 20 73 65 61 6c      private seal
ac80: 65 64 20 63 6c 61 73 73 20 56 65 72 73 69 6f 6e  ed class Version
ac90: 4c 69 73 74 20 3a 20 4c 69 73 74 3c 56 65 72 73  List : List<Vers
aca0: 69 6f 6e 3e 0d 0a 20 20 20 20 20 20 20 20 7b 0d  ion>..        {.
acb0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
acc0: 6c 69 63 20 56 65 72 73 69 6f 6e 4c 69 73 74 28  lic VersionList(
acd0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
ace0: 20 20 20 3a 20 62 61 73 65 28 29 0d 0a 20 20 20     : base()..   
acf0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
ad00: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64              // d
ad10: 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20  o nothing...    
ad20: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
ad30: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
ad40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ad50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ad60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ad70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
ad80: 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
ad90: 69 63 20 56 65 72 73 69 6f 6e 4c 69 73 74 28 49  ic VersionList(I
ada0: 45 6e 75 6d 65 72 61 62 6c 65 3c 56 65 72 73 69  Enumerable<Versi
adb0: 6f 6e 3e 20 63 6f 6c 6c 65 63 74 69 6f 6e 29 0d  on> collection).
adc0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
add0: 20 3a 20 62 61 73 65 28 63 6f 6c 6c 65 63 74 69   : base(collecti
ade0: 6f 6e 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on)..           
adf0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
ae00: 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e      // do nothin
ae10: 67 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  g...            
ae20: 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  }..        }..  
ae30: 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
ae40: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
ae50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ae60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ae70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ae80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ae90: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23  ///....        #
aea0: 72 65 67 69 6f 6e 20 56 65 72 73 69 6f 6e 4d 61  region VersionMa
aeb0: 70 20 43 6c 61 73 73 0d 0a 20 20 20 20 20 20 20  p Class..       
aec0: 20 70 72 69 76 61 74 65 20 73 65 61 6c 65 64 20   private sealed 
aed0: 63 6c 61 73 73 20 56 65 72 73 69 6f 6e 4d 61 70  class VersionMap
aee0: 20 3a 20 44 69 63 74 69 6f 6e 61 72 79 3c 73 74   : Dictionary<st
aef0: 72 69 6e 67 2c 20 56 65 72 73 69 6f 6e 4c 69 73  ring, VersionLis
af00: 74 3e 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  t>..        {.. 
af10: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
af20: 63 20 56 65 72 73 69 6f 6e 4d 61 70 28 29 0d 0a  c VersionMap()..
af30: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
af40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
af50: 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20  / do nothing... 
af60: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
af70: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
af80: 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
af90: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
afa0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
afb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
afc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
afd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
afe0: 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f  ..        #regio
aff0: 6e 20 56 65 72 73 69 6f 6e 4c 69 73 74 4d 61 70  n VersionListMap
b000: 20 43 6c 61 73 73 0d 0a 20 20 20 20 20 20 20 20   Class..        
b010: 70 72 69 76 61 74 65 20 73 65 61 6c 65 64 20 63  private sealed c
b020: 6c 61 73 73 20 56 65 72 73 69 6f 6e 4c 69 73 74  lass VersionList
b030: 4d 61 70 20 3a 20 44 69 63 74 69 6f 6e 61 72 79  Map : Dictionary
b040: 3c 56 65 72 73 69 6f 6e 2c 20 56 65 72 73 69 6f  <Version, Versio
b050: 6e 4c 69 73 74 3e 0d 0a 20 20 20 20 20 20 20 20  nList>..        
b060: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  {..            p
b070: 75 62 6c 69 63 20 56 65 72 73 69 6f 6e 4c 69 73  ublic VersionLis
b080: 74 4d 61 70 28 29 0d 0a 20 20 20 20 20 20 20 20  tMap()..        
b090: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
b0a0: 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74         // do not
b0b0: 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 20  hing...         
b0c0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d     }..        }.
b0d0: 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67  .        #endreg
b0e0: 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  ion....        /
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 2f 2f  ////////////////
b130: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
b140: 20 20 23 72 65 67 69 6f 6e 20 50 61 63 6b 61 67    #region Packag
b150: 65 20 43 6c 61 73 73 0d 0a 20 20 20 20 20 20 20  e Class..       
b160: 20 69 6e 74 65 72 6e 61 6c 20 73 65 61 6c 65 64   internal sealed
b170: 20 63 6c 61 73 73 20 50 61 63 6b 61 67 65 0d 0a   class Package..
b180: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
b190: 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50         #region P
b1a0: 75 62 6c 69 63 20 43 6f 6e 73 74 72 75 63 74 6f  ublic Constructo
b1b0: 72 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  rs..            
b1c0: 70 75 62 6c 69 63 20 50 61 63 6b 61 67 65 28 29  public Package()
b1d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
b1e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
b1f0: 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d   // do nothing..
b200: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
b210: 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64              #end
b220: 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
b230: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
b240: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b250: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b260: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b270: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
b280: 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e           #region
b290: 20 50 75 62 6c 69 63 20 50 72 6f 70 65 72 74 69   Public Properti
b2a0: 65 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  es..            
b2b0: 70 72 69 76 61 74 65 20 47 75 69 64 20 70 61 63  private Guid pac
b2c0: 6b 61 67 65 49 64 3b 0d 0a 20 20 20 20 20 20 20  kageId;..       
b2d0: 20 20 20 20 20 70 75 62 6c 69 63 20 47 75 69 64       public Guid
b2e0: 20 50 61 63 6b 61 67 65 49 64 0d 0a 20 20 20 20   PackageId..    
b2f0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
b300: 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b             get {
b310: 20 72 65 74 75 72 6e 20 70 61 63 6b 61 67 65 49   return packageI
b320: 64 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  d; }..          
b330: 20 20 20 20 20 20 73 65 74 20 7b 20 70 61 63 6b        set { pack
b340: 61 67 65 49 64 20 3d 20 76 61 6c 75 65 3b 20 7d  ageId = value; }
b350: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
b360: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
b370: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b380: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b390: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b3a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b3b0: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
b3c0: 20 20 70 72 69 76 61 74 65 20 47 75 69 64 20 73    private Guid s
b3d0: 65 72 76 69 63 65 49 64 3b 0d 0a 20 20 20 20 20  erviceId;..     
b3e0: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 47 75         public Gu
b3f0: 69 64 20 53 65 72 76 69 63 65 49 64 0d 0a 20 20  id ServiceId..  
b400: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
b410: 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74               get
b420: 20 7b 20 72 65 74 75 72 6e 20 73 65 72 76 69 63   { return servic
b430: 65 49 64 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  eId; }..        
b440: 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 73 65          set { se
b450: 72 76 69 63 65 49 64 20 3d 20 76 61 6c 75 65 3b  rviceId = value;
b460: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
b470: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
b480: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
b490: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b4a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b4b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b4c0: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
b4d0: 20 20 20 20 70 72 69 76 61 74 65 20 47 75 69 64      private Guid
b4e0: 20 64 61 74 61 53 6f 75 72 63 65 49 64 3b 0d 0a   dataSourceId;..
b4f0: 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
b500: 69 63 20 47 75 69 64 20 44 61 74 61 53 6f 75 72  ic Guid DataSour
b510: 63 65 49 64 0d 0a 20 20 20 20 20 20 20 20 20 20  ceId..          
b520: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
b530: 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72       get { retur
b540: 6e 20 64 61 74 61 53 6f 75 72 63 65 49 64 3b 20  n dataSourceId; 
b550: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
b560: 20 20 20 73 65 74 20 7b 20 64 61 74 61 53 6f 75     set { dataSou
b570: 72 63 65 49 64 20 3d 20 76 61 6c 75 65 3b 20 7d  rceId = value; }
b580: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
b590: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
b5a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b5b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b5c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b5d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b5e0: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
b5f0: 20 20 70 72 69 76 61 74 65 20 47 75 69 64 20 64    private Guid d
b600: 61 74 61 50 72 6f 76 69 64 65 72 49 64 3b 0d 0a  ataProviderId;..
b610: 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
b620: 69 63 20 47 75 69 64 20 44 61 74 61 50 72 6f 76  ic Guid DataProv
b630: 69 64 65 72 49 64 0d 0a 20 20 20 20 20 20 20 20  iderId..        
b640: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
b650: 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74         get { ret
b660: 75 72 6e 20 64 61 74 61 50 72 6f 76 69 64 65 72  urn dataProvider
b670: 49 64 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  Id; }..         
b680: 20 20 20 20 20 20 20 73 65 74 20 7b 20 64 61 74         set { dat
b690: 61 50 72 6f 76 69 64 65 72 49 64 20 3d 20 76 61  aProviderId = va
b6a0: 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  lue; }..        
b6b0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
b6c0: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
b6d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b6e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b6f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b700: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
b710: 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
b720: 47 75 69 64 20 61 64 6f 4e 65 74 54 65 63 68 6e  Guid adoNetTechn
b730: 6f 6c 6f 67 79 49 64 3b 0d 0a 20 20 20 20 20 20  ologyId;..      
b740: 20 20 20 20 20 20 70 75 62 6c 69 63 20 47 75 69        public Gui
b750: 64 20 41 64 6f 4e 65 74 54 65 63 68 6e 6f 6c 6f  d AdoNetTechnolo
b760: 67 79 49 64 0d 0a 20 20 20 20 20 20 20 20 20 20  gyId..          
b770: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
b780: 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72       get { retur
b790: 6e 20 61 64 6f 4e 65 74 54 65 63 68 6e 6f 6c 6f  n adoNetTechnolo
b7a0: 67 79 49 64 3b 20 7d 0d 0a 20 20 20 20 20 20 20  gyId; }..       
b7b0: 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 61           set { a
b7c0: 64 6f 4e 65 74 54 65 63 68 6e 6f 6c 6f 67 79 49  doNetTechnologyI
b7d0: 64 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20  d = value; }..  
b7e0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
b7f0: 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67           #endreg
b800: 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ion..        }..
b810: 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
b820: 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  on....        //
b830: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b840: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b850: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b860: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b870: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
b880: 20 23 72 65 67 69 6f 6e 20 43 6f 6e 66 69 67 75   #region Configu
b890: 72 61 74 69 6f 6e 20 43 6c 61 73 73 0d 0a 20 20  ration Class..  
b8a0: 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 65        private se
b8b0: 61 6c 65 64 20 63 6c 61 73 73 20 43 6f 6e 66 69  aled class Confi
b8c0: 67 75 72 61 74 69 6f 6e 0d 0a 20 20 20 20 20 20  guration..      
b8d0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
b8e0: 20 23 72 65 67 69 6f 6e 20 50 72 69 76 61 74 65   #region Private
b8f0: 20 43 6f 6e 73 74 61 6e 74 73 0d 0a 20 20 20 20   Constants..    
b900: 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
b910: 63 6f 6e 73 74 20 63 68 61 72 20 53 77 69 74 63  const char Switc
b920: 68 20 3d 20 27 2d 27 3b 0d 0a 20 20 20 20 20 20  h = '-';..      
b930: 20 20 20 20 20 20 70 72 69 76 61 74 65 20 63 6f        private co
b940: 6e 73 74 20 63 68 61 72 20 41 6c 74 53 77 69 74  nst char AltSwit
b950: 63 68 20 3d 20 27 2f 27 3b 0d 0a 0d 0a 20 20 20  ch = '/';....   
b960: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
b970: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b980: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b990: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b9a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
b9b0: 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
b9c0: 61 74 65 20 73 74 61 74 69 63 20 72 65 61 64 6f  ate static reado
b9d0: 6e 6c 79 20 63 68 61 72 5b 5d 20 53 77 69 74 63  nly char[] Switc
b9e0: 68 43 68 61 72 73 20 3d 20 7b 0d 0a 20 20 20 20  hChars = {..    
b9f0: 20 20 20 20 20 20 20 20 20 20 20 20 53 77 69 74              Swit
ba00: 63 68 2c 20 41 6c 74 53 77 69 74 63 68 0d 0a 20  ch, AltSwitch.. 
ba10: 20 20 20 20 20 20 20 20 20 20 20 7d 3b 0d 0a 20             };.. 
ba20: 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72             #endr
ba30: 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
ba40: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
ba50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ba60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ba70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
ba80: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
ba90: 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
baa0: 50 72 69 76 61 74 65 20 43 6f 6e 73 74 72 75 63  Private Construc
bab0: 74 6f 72 73 0d 0a 20 20 20 20 20 20 20 20 20 20  tors..          
bac0: 20 20 70 72 69 76 61 74 65 20 43 6f 6e 66 69 67    private Config
bad0: 75 72 61 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20  uration(..      
bae0: 20 20 20 20 20 20 20 20 20 20 41 73 73 65 6d 62            Assemb
baf0: 6c 79 20 61 73 73 65 6d 62 6c 79 2c 0d 0a 20 20  ly assembly,..  
bb00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
bb10: 72 69 6e 67 20 6c 6f 67 46 69 6c 65 4e 61 6d 65  ring logFileName
bb20: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
bb30: 20 20 20 73 74 72 69 6e 67 20 64 69 72 65 63 74     string direct
bb40: 6f 72 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ory,..          
bb50: 20 20 20 20 20 20 73 74 72 69 6e 67 20 63 6f 72        string cor
bb60: 65 46 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20 20  eFileName,..    
bb70: 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
bb80: 6e 67 20 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 2c  ng linqFileName,
bb90: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
bba0: 20 20 73 74 72 69 6e 67 20 64 65 73 69 67 6e 65    string designe
bbb0: 72 46 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20 20  rFileName,..    
bbc0: 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
bbd0: 6e 67 20 64 65 62 75 67 46 6f 72 6d 61 74 2c 0d  ng debugFormat,.
bbe0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
bbf0: 20 73 74 72 69 6e 67 20 74 72 61 63 65 46 6f 72   string traceFor
bc00: 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  mat,..          
bc10: 20 20 20 20 20 20 49 6e 73 74 61 6c 6c 46 6c 61        InstallFla
bc20: 67 73 20 69 6e 73 74 61 6c 6c 46 6c 61 67 73 2c  gs installFlags,
bc30: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
bc40: 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 20    TracePriority 
bc50: 64 65 62 75 67 50 72 69 6f 72 69 74 79 2c 0d 0a  debugPriority,..
bc60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bc70: 54 72 61 63 65 50 72 69 6f 72 69 74 79 20 74 72  TracePriority tr
bc80: 61 63 65 50 72 69 6f 72 69 74 79 2c 0d 0a 20 20  acePriority,..  
bc90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
bca0: 6f 6c 20 69 6e 73 74 61 6c 6c 2c 0d 0a 20 20 20  ol install,..   
bcb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
bcc0: 6c 20 6e 6f 52 75 6e 74 69 6d 65 56 65 72 73 69  l noRuntimeVersi
bcd0: 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on,..           
bce0: 20 20 20 20 20 62 6f 6f 6c 20 6e 6f 44 65 73 6b       bool noDesk
bcf0: 74 6f 70 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  top,..          
bd00: 20 20 20 20 20 20 62 6f 6f 6c 20 6e 6f 43 6f 6d        bool noCom
bd10: 70 61 63 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  pact,..         
bd20: 20 20 20 20 20 20 20 62 6f 6f 6c 20 6e 6f 4e 65         bool noNe
bd30: 74 46 78 32 30 2c 0d 0a 20 20 20 20 20 20 20 20  tFx20,..        
bd40: 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 6e 6f 4e          bool noN
bd50: 65 74 46 78 34 30 2c 0d 0a 20 20 20 20 20 20 20  etFx40,..       
bd60: 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 6e 6f           bool no
bd70: 56 73 32 30 30 38 2c 0d 0a 20 20 20 20 20 20 20  Vs2008,..       
bd80: 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 6e 6f           bool no
bd90: 56 73 32 30 31 30 2c 0d 0a 20 20 20 20 20 20 20  Vs2010,..       
bda0: 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 6e 6f           bool no
bdb0: 54 72 61 63 65 2c 0d 0a 20 20 20 20 20 20 20 20  Trace,..        
bdc0: 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 6e 6f 43          bool noC
bdd0: 6f 6e 73 6f 6c 65 2c 0d 0a 20 20 20 20 20 20 20  onsole,..       
bde0: 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 6e 6f           bool no
bdf0: 4c 6f 67 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  Log,..          
be00: 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49        bool whatI
be10: 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f,..            
be20: 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65      bool verbose
be30: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
be40: 20 20 20 62 6f 6f 6c 20 63 6f 6e 66 69 72 6d 0d     bool confirm.
be50: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
be60: 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   )..            
be70: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
be80: 20 20 20 74 68 69 73 2e 61 73 73 65 6d 62 6c 79     this.assembly
be90: 20 3d 20 61 73 73 65 6d 62 6c 79 3b 0d 0a 20 20   = assembly;..  
bea0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
beb0: 69 73 2e 6c 6f 67 46 69 6c 65 4e 61 6d 65 20 3d  is.logFileName =
bec0: 20 6c 6f 67 46 69 6c 65 4e 61 6d 65 3b 0d 0a 20   logFileName;.. 
bed0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
bee0: 68 69 73 2e 64 69 72 65 63 74 6f 72 79 20 3d 20  his.directory = 
bef0: 64 69 72 65 63 74 6f 72 79 3b 0d 0a 20 20 20 20  directory;..    
bf00: 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73              this
bf10: 2e 63 6f 72 65 46 69 6c 65 4e 61 6d 65 20 3d 20  .coreFileName = 
bf20: 63 6f 72 65 46 69 6c 65 4e 61 6d 65 3b 0d 0a 20  coreFileName;.. 
bf30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
bf40: 68 69 73 2e 6c 69 6e 71 46 69 6c 65 4e 61 6d 65  his.linqFileName
bf50: 20 3d 20 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 3b   = linqFileName;
bf60: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
bf70: 20 20 74 68 69 73 2e 64 65 73 69 67 6e 65 72 46    this.designerF
bf80: 69 6c 65 4e 61 6d 65 20 3d 20 64 65 73 69 67 6e  ileName = design
bf90: 65 72 46 69 6c 65 4e 61 6d 65 3b 0d 0a 20 20 20  erFileName;..   
bfa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69               thi
bfb0: 73 2e 64 65 62 75 67 46 6f 72 6d 61 74 20 3d 20  s.debugFormat = 
bfc0: 64 65 62 75 67 46 6f 72 6d 61 74 3b 0d 0a 20 20  debugFormat;..  
bfd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
bfe0: 69 73 2e 74 72 61 63 65 46 6f 72 6d 61 74 20 3d  is.traceFormat =
bff0: 20 74 72 61 63 65 46 6f 72 6d 61 74 3b 0d 0a 20   traceFormat;.. 
c000: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
c010: 68 69 73 2e 69 6e 73 74 61 6c 6c 46 6c 61 67 73  his.installFlags
c020: 20 3d 20 69 6e 73 74 61 6c 6c 46 6c 61 67 73 3b   = installFlags;
c030: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
c040: 20 20 74 68 69 73 2e 64 65 62 75 67 50 72 69 6f    this.debugPrio
c050: 72 69 74 79 20 3d 20 64 65 62 75 67 50 72 69 6f  rity = debugPrio
c060: 72 69 74 79 3b 0d 0a 20 20 20 20 20 20 20 20 20  rity;..         
c070: 20 20 20 20 20 20 20 74 68 69 73 2e 74 72 61 63         this.trac
c080: 65 50 72 69 6f 72 69 74 79 20 3d 20 74 72 61 63  ePriority = trac
c090: 65 50 72 69 6f 72 69 74 79 3b 0d 0a 20 20 20 20  ePriority;..    
c0a0: 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73              this
c0b0: 2e 69 6e 73 74 61 6c 6c 20 3d 20 69 6e 73 74 61  .install = insta
c0c0: 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll;..           
c0d0: 20 20 20 20 20 74 68 69 73 2e 6e 6f 52 75 6e 74       this.noRunt
c0e0: 69 6d 65 56 65 72 73 69 6f 6e 20 3d 20 6e 6f 52  imeVersion = noR
c0f0: 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 3b 0d 0a  untimeVersion;..
c100: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c110: 74 68 69 73 2e 6e 6f 44 65 73 6b 74 6f 70 20 3d  this.noDesktop =
c120: 20 6e 6f 44 65 73 6b 74 6f 70 3b 0d 0a 20 20 20   noDesktop;..   
c130: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69               thi
c140: 73 2e 6e 6f 43 6f 6d 70 61 63 74 20 3d 20 6e 6f  s.noCompact = no
c150: 43 6f 6d 70 61 63 74 3b 0d 0a 20 20 20 20 20 20  Compact;..      
c160: 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 6e            this.n
c170: 6f 4e 65 74 46 78 32 30 20 3d 20 6e 6f 4e 65 74  oNetFx20 = noNet
c180: 46 78 32 30 3b 0d 0a 20 20 20 20 20 20 20 20 20  Fx20;..         
c190: 20 20 20 20 20 20 20 74 68 69 73 2e 6e 6f 4e 65         this.noNe
c1a0: 74 46 78 34 30 20 3d 20 6e 6f 4e 65 74 46 78 34  tFx40 = noNetFx4
c1b0: 30 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  0;..            
c1c0: 20 20 20 20 74 68 69 73 2e 6e 6f 56 73 32 30 30      this.noVs200
c1d0: 38 20 3d 20 6e 6f 56 73 32 30 30 38 3b 0d 0a 20  8 = noVs2008;.. 
c1e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
c1f0: 68 69 73 2e 6e 6f 56 73 32 30 31 30 20 3d 20 6e  his.noVs2010 = n
c200: 6f 56 73 32 30 31 30 3b 0d 0a 20 20 20 20 20 20  oVs2010;..      
c210: 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 6e            this.n
c220: 6f 54 72 61 63 65 20 3d 20 6e 6f 54 72 61 63 65  oTrace = noTrace
c230: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
c240: 20 20 20 74 68 69 73 2e 6e 6f 43 6f 6e 73 6f 6c     this.noConsol
c250: 65 20 3d 20 6e 6f 43 6f 6e 73 6f 6c 65 3b 0d 0a  e = noConsole;..
c260: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c270: 74 68 69 73 2e 6e 6f 4c 6f 67 20 3d 20 6e 6f 4c  this.noLog = noL
c280: 6f 67 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  og;..           
c290: 20 20 20 20 20 74 68 69 73 2e 77 68 61 74 49 66       this.whatIf
c2a0: 20 3d 20 77 68 61 74 49 66 3b 0d 0a 20 20 20 20   = whatIf;..    
c2b0: 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73              this
c2c0: 2e 76 65 72 62 6f 73 65 20 3d 20 76 65 72 62 6f  .verbose = verbo
c2d0: 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se;..           
c2e0: 20 20 20 20 20 74 68 69 73 2e 63 6f 6e 66 69 72       this.confir
c2f0: 6d 20 3d 20 63 6f 6e 66 69 72 6d 3b 0d 0a 20 20  m = confirm;..  
c300: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
c310: 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67           #endreg
c320: 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ion....         
c330: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
c340: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c350: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c360: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c370: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
c380: 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 72        #region Pr
c390: 69 76 61 74 65 20 53 74 61 74 69 63 20 4d 65 74  ivate Static Met
c3a0: 68 6f 64 73 0d 0a 20 20 20 20 20 20 20 20 20 20  hods..          
c3b0: 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
c3c0: 20 76 6f 69 64 20 47 65 74 44 65 66 61 75 6c 74   void GetDefault
c3d0: 46 69 6c 65 4e 61 6d 65 73 28 0d 0a 20 20 20 20  FileNames(..    
c3e0: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20              ref 
c3f0: 73 74 72 69 6e 67 20 64 69 72 65 63 74 6f 72 79  string directory
c400: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
c410: 20 20 20 72 65 66 20 73 74 72 69 6e 67 20 63 6f     ref string co
c420: 72 65 46 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20  reFileName,..   
c430: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66               ref
c440: 20 73 74 72 69 6e 67 20 6c 69 6e 71 46 69 6c 65   string linqFile
c450: 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  Name,..         
c460: 20 20 20 20 20 20 20 72 65 66 20 73 74 72 69 6e         ref strin
c470: 67 20 64 65 73 69 67 6e 65 72 46 69 6c 65 4e 61  g designerFileNa
c480: 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  me..            
c490: 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20      )..         
c4a0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
c4b0: 20 20 20 20 20 20 69 66 20 28 74 68 69 73 41 73        if (thisAs
c4c0: 73 65 6d 62 6c 79 20 3d 3d 20 6e 75 6c 6c 29 0d  sembly == null).
c4d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
c4e0: 20 20 20 20 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a       return;....
c4f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c500: 64 69 72 65 63 74 6f 72 79 20 3d 20 50 61 74 68  directory = Path
c510: 2e 47 65 74 44 69 72 65 63 74 6f 72 79 4e 61 6d  .GetDirectoryNam
c520: 65 28 74 68 69 73 41 73 73 65 6d 62 6c 79 2e 4c  e(thisAssembly.L
c530: 6f 63 61 74 69 6f 6e 29 3b 0d 0a 0d 0a 20 20 20  ocation);....   
c540: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
c550: 28 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72  (String.IsNullOr
c560: 45 6d 70 74 79 28 64 69 72 65 63 74 6f 72 79 29  Empty(directory)
c570: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
c580: 20 20 20 20 20 20 20 72 65 74 75 72 6e 3b 0d 0a         return;..
c590: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
c5a0: 20 20 63 6f 72 65 46 69 6c 65 4e 61 6d 65 20 3d    coreFileName =
c5b0: 20 50 61 74 68 2e 43 6f 6d 62 69 6e 65 28 64 69   Path.Combine(di
c5c0: 72 65 63 74 6f 72 79 2c 0d 0a 20 20 20 20 20 20  rectory,..      
c5d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 49 6e                In
c5e0: 73 74 61 6c 6c 65 72 2e 43 6f 72 65 46 69 6c 65  staller.CoreFile
c5f0: 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  Name);....      
c600: 20 20 20 20 20 20 20 20 20 20 6c 69 6e 71 46 69            linqFi
c610: 6c 65 4e 61 6d 65 20 3d 20 50 61 74 68 2e 43 6f  leName = Path.Co
c620: 6d 62 69 6e 65 28 64 69 72 65 63 74 6f 72 79 2c  mbine(directory,
c630: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
c640: 20 20 20 20 20 20 49 6e 73 74 61 6c 6c 65 72 2e        Installer.
c650: 4c 69 6e 71 46 69 6c 65 4e 61 6d 65 29 3b 0d 0a  LinqFileName);..
c660: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
c670: 20 20 64 65 73 69 67 6e 65 72 46 69 6c 65 4e 61    designerFileNa
c680: 6d 65 20 3d 20 50 61 74 68 2e 43 6f 6d 62 69 6e  me = Path.Combin
c690: 65 28 64 69 72 65 63 74 6f 72 79 2c 0d 0a 20 20  e(directory,..  
c6a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c6b0: 20 20 49 6e 73 74 61 6c 6c 65 72 2e 44 65 73 69    Installer.Desi
c6c0: 67 6e 65 72 46 69 6c 65 4e 61 6d 65 29 3b 0d 0a  gnerFileName);..
c6d0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
c6e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
c6f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c700: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c710: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c720: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c730: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
c740: 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 62  private static b
c750: 6f 6f 6c 20 43 68 65 63 6b 4f 70 74 69 6f 6e 28  ool CheckOption(
c760: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
c770: 20 20 72 65 66 20 73 74 72 69 6e 67 20 61 72 67    ref string arg
c780: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
c790: 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20    )..           
c7a0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
c7b0: 20 20 20 20 73 74 72 69 6e 67 20 72 65 73 75 6c      string resul
c7c0: 74 20 3d 20 61 72 67 3b 0d 0a 0d 0a 20 20 20 20  t = arg;....    
c7d0: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
c7e0: 21 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72  !String.IsNullOr
c7f0: 45 6d 70 74 79 28 72 65 73 75 6c 74 29 29 0d 0a  Empty(result))..
c800: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c810: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
c820: 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
c830: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
c840: 2f 20 4e 4f 54 45 3a 20 52 65 6d 6f 76 65 20 61  / NOTE: Remove a
c850: 6c 6c 20 6c 65 61 64 69 6e 67 20 73 77 69 74 63  ll leading switc
c860: 68 20 63 68 61 72 73 2e 0d 0a 20 20 20 20 20 20  h chars...      
c870: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
c880: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
c890: 20 20 20 20 20 20 72 65 73 75 6c 74 20 3d 20 72        result = r
c8a0: 65 73 75 6c 74 2e 54 72 69 6d 53 74 61 72 74 28  esult.TrimStart(
c8b0: 53 77 69 74 63 68 43 68 61 72 73 29 3b 0d 0a 0d  SwitchChars);...
c8c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
c8d0: 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
c8e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
c8f0: 4e 4f 54 45 3a 20 48 6f 77 20 6d 61 6e 79 20 63  NOTE: How many c
c900: 68 61 72 73 20 77 65 72 65 20 72 65 6d 6f 76 65  hars were remove
c910: 64 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d?..            
c920: 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
c930: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c940: 69 6e 74 20 63 6f 75 6e 74 20 3d 20 61 72 67 2e  int count = arg.
c950: 4c 65 6e 67 74 68 20 2d 20 72 65 73 75 6c 74 2e  Length - result.
c960: 4c 65 6e 67 74 68 3b 0d 0a 0d 0a 20 20 20 20 20  Length;....     
c970: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
c980: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
c990: 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20         // NOTE: 
c9a0: 57 61 73 20 74 68 65 72 65 20 61 74 20 6c 65 61  Was there at lea
c9b0: 73 74 20 6f 6e 65 3f 0d 0a 20 20 20 20 20 20 20  st one?..       
c9c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
c9d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
c9e0: 20 20 20 20 20 69 66 20 28 63 6f 75 6e 74 20 3e       if (count >
c9f0: 20 30 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20   0)..           
ca00: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
ca10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ca20: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
ca30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ca40: 2f 2f 20 4e 4f 54 45 3a 20 4f 6b 2c 20 72 65 70  // NOTE: Ok, rep
ca50: 6c 61 63 65 20 74 68 65 69 72 20 6f 72 69 67 69  lace their origi
ca60: 6e 61 6c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  nal..           
ca70: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
ca80: 20 20 20 20 20 20 61 72 67 75 6d 65 6e 74 2e 0d        argument..
ca90: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
caa0: 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
cab0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cac0: 20 20 20 20 20 61 72 67 20 3d 20 72 65 73 75 6c       arg = resul
cad0: 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  t;....          
cae0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
caf0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
cb00: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54            // NOT
cb10: 45 3a 20 59 65 73 2c 20 74 68 69 73 20 69 73 20  E: Yes, this is 
cb20: 61 20 73 77 69 74 63 68 2e 0d 0a 20 20 20 20 20  a switch...     
cb30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cb40: 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
cb50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
cb60: 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20  eturn true;..   
cb70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cb80: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
cb90: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
cba0: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
cbb0: 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
cbc0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
cbd0: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
cbe0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cbf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cc00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cc10: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
cc20: 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
cc30: 73 74 61 74 69 63 20 62 6f 6f 6c 20 4d 61 74 63  static bool Matc
cc40: 68 4f 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20  hOption(..      
cc50: 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
cc60: 20 61 72 67 2c 0d 0a 20 20 20 20 20 20 20 20 20   arg,..         
cc70: 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6f 70         string op
cc80: 74 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 20 20  tion..          
cc90: 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
cca0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
ccb0: 20 20 20 20 20 20 20 20 69 66 20 28 28 61 72 67          if ((arg
ccc0: 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 28 6f 70   == null) || (op
ccd0: 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 29 0d 0a  tion == null))..
cce0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ccf0: 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
cd00: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
cd10: 20 20 20 20 20 72 65 74 75 72 6e 20 53 74 72 69       return Stri
cd20: 6e 67 2e 43 6f 6d 70 61 72 65 28 61 72 67 2c 20  ng.Compare(arg, 
cd30: 30 2c 20 6f 70 74 69 6f 6e 2c 20 30 2c 0d 0a 20  0, option, 0,.. 
cd40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cd50: 20 20 20 61 72 67 2e 4c 65 6e 67 74 68 2c 20 53     arg.Length, S
cd60: 74 72 69 6e 67 43 6f 6d 70 61 72 69 73 6f 6e 2e  tringComparison.
cd70: 4f 72 64 69 6e 61 6c 49 67 6e 6f 72 65 43 61 73  OrdinalIgnoreCas
cd80: 65 29 20 3d 3d 20 30 3b 0d 0a 20 20 20 20 20 20  e) == 0;..      
cd90: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
cda0: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
cdb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cdc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cdd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cde0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
cdf0: 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
ce00: 65 20 73 74 61 74 69 63 20 62 6f 6f 6c 3f 20 50  e static bool? P
ce10: 61 72 73 65 42 6f 6f 6c 65 61 6e 28 0d 0a 20 20  arseBoolean(..  
ce20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
ce30: 72 69 6e 67 20 74 65 78 74 0d 0a 20 20 20 20 20  ring text..     
ce40: 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
ce50: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
ce60: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
ce70: 28 21 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f  (!String.IsNullO
ce80: 72 45 6d 70 74 79 28 74 65 78 74 29 29 0d 0a 20  rEmpty(text)).. 
ce90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
cea0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
ceb0: 20 20 20 20 20 20 62 6f 6f 6c 20 76 61 6c 75 65        bool value
cec0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
ced0: 20 20 20 20 20 20 20 20 20 69 66 20 28 62 6f 6f           if (boo
cee0: 6c 2e 54 72 79 50 61 72 73 65 28 74 65 78 74 2c  l.TryParse(text,
cef0: 20 6f 75 74 20 76 61 6c 75 65 29 29 0d 0a 20 20   out value))..  
cf00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cf10: 20 20 20 20 20 20 72 65 74 75 72 6e 20 76 61 6c        return val
cf20: 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
cf30: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
cf40: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
cf50: 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20   null;..        
cf60: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
cf70: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
cf80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cf90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cfa0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
cfb0: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
cfc0: 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
cfd0: 73 74 61 74 69 63 20 6f 62 6a 65 63 74 20 50 61  static object Pa
cfe0: 72 73 65 45 6e 75 6d 28 0d 0a 20 20 20 20 20 20  rseEnum(..      
cff0: 20 20 20 20 20 20 20 20 20 20 54 79 70 65 20 65            Type e
d000: 6e 75 6d 54 79 70 65 2c 0d 0a 20 20 20 20 20 20  numType,..      
d010: 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
d020: 20 74 65 78 74 2c 0d 0a 20 20 20 20 20 20 20 20   text,..        
d030: 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 6e 6f 43          bool noC
d040: 61 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ase..           
d050: 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
d060: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
d070: 20 20 20 20 20 20 20 69 66 20 28 28 65 6e 75 6d         if ((enum
d080: 54 79 70 65 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c  Type == null) ||
d090: 20 21 65 6e 75 6d 54 79 70 65 2e 49 73 45 6e 75   !enumType.IsEnu
d0a0: 6d 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  m)..            
d0b0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e          return n
d0c0: 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ull;....        
d0d0: 20 20 20 20 20 20 20 20 69 66 20 28 21 53 74 72          if (!Str
d0e0: 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74  ing.IsNullOrEmpt
d0f0: 79 28 74 65 78 74 29 29 0d 0a 20 20 20 20 20 20  y(text))..      
d100: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
d110: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d120: 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20   try..          
d130: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
d140: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d150: 20 20 20 20 20 72 65 74 75 72 6e 20 45 6e 75 6d       return Enum
d160: 2e 50 61 72 73 65 28 65 6e 75 6d 54 79 70 65 2c  .Parse(enumType,
d170: 20 74 65 78 74 2c 20 6e 6f 43 61 73 65 29 3b 0d   text, noCase);.
d180: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
d190: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
d1a0: 20 20 20 20 20 20 20 20 20 20 20 20 63 61 74 63              catc
d1b0: 68 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  h..             
d1c0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
d1d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d1e0: 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e    // do nothing.
d1f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
d200: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
d210: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
d220: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
d230: 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20  turn null;..    
d240: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
d250: 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
d260: 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n....           
d270: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
d280: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d290: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d2a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d2b0: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
d2c0: 20 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c      #region Publ
d2d0: 69 63 20 53 74 61 74 69 63 20 4d 65 74 68 6f 64  ic Static Method
d2e0: 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  s..            p
d2f0: 75 62 6c 69 63 20 73 74 61 74 69 63 20 43 6f 6e  ublic static Con
d300: 66 69 67 75 72 61 74 69 6f 6e 20 43 72 65 61 74  figuration Creat
d310: 65 44 65 66 61 75 6c 74 28 29 0d 0a 20 20 20 20  eDefault()..    
d320: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
d330: 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
d340: 67 20 64 69 72 65 63 74 6f 72 79 20 3d 20 6e 75  g directory = nu
d350: 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll;..           
d360: 20 20 20 20 20 73 74 72 69 6e 67 20 63 6f 72 65       string core
d370: 46 69 6c 65 4e 61 6d 65 20 3d 20 6e 75 6c 6c 3b  FileName = null;
d380: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
d390: 20 20 73 74 72 69 6e 67 20 6c 69 6e 71 46 69 6c    string linqFil
d3a0: 65 4e 61 6d 65 20 3d 20 6e 75 6c 6c 3b 0d 0a 20  eName = null;.. 
d3b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
d3c0: 74 72 69 6e 67 20 64 65 73 69 67 6e 65 72 46 69  tring designerFi
d3d0: 6c 65 4e 61 6d 65 20 3d 20 6e 75 6c 6c 3b 0d 0a  leName = null;..
d3e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
d3f0: 20 20 47 65 74 44 65 66 61 75 6c 74 46 69 6c 65    GetDefaultFile
d400: 4e 61 6d 65 73 28 0d 0a 20 20 20 20 20 20 20 20  Names(..        
d410: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20              ref 
d420: 64 69 72 65 63 74 6f 72 79 2c 20 72 65 66 20 63  directory, ref c
d430: 6f 72 65 46 69 6c 65 4e 61 6d 65 2c 20 72 65 66  oreFileName, ref
d440: 20 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 2c 0d 0a   linqFileName,..
d450: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d460: 20 20 20 20 72 65 66 20 64 65 73 69 67 6e 65 72      ref designer
d470: 46 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20  FileName);....  
d480: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
d490: 74 75 72 6e 20 6e 65 77 20 43 6f 6e 66 69 67 75  turn new Configu
d4a0: 72 61 74 69 6f 6e 28 74 68 69 73 41 73 73 65 6d  ration(thisAssem
d4b0: 62 6c 79 2c 20 6e 75 6c 6c 2c 20 64 69 72 65 63  bly, null, direc
d4c0: 74 6f 72 79 2c 0d 0a 20 20 20 20 20 20 20 20 20  tory,..         
d4d0: 20 20 20 20 20 20 20 20 20 20 20 63 6f 72 65 46             coreF
d4e0: 69 6c 65 4e 61 6d 65 2c 20 6c 69 6e 71 46 69 6c  ileName, linqFil
d4f0: 65 4e 61 6d 65 2c 20 64 65 73 69 67 6e 65 72 46  eName, designerF
d500: 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20  ileName,..      
d510: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
d520: 61 63 65 4f 70 73 2e 44 65 62 75 67 46 6f 72 6d  aceOps.DebugForm
d530: 61 74 2c 20 54 72 61 63 65 4f 70 73 2e 54 72 61  at, TraceOps.Tra
d540: 63 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20  ceFormat,..     
d550: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 49                 I
d560: 6e 73 74 61 6c 6c 46 6c 61 67 73 2e 44 65 66 61  nstallFlags.Defa
d570: 75 6c 74 2c 20 54 72 61 63 65 50 72 69 6f 72 69  ult, TracePriori
d580: 74 79 2e 44 65 62 75 67 2c 0d 0a 20 20 20 20 20  ty.Debug,..     
d590: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
d5a0: 72 61 63 65 50 72 69 6f 72 69 74 79 2e 54 72 61  racePriority.Tra
d5b0: 63 65 2c 20 74 72 75 65 2c 20 66 61 6c 73 65 2c  ce, true, false,
d5c0: 20 66 61 6c 73 65 2c 20 66 61 6c 73 65 2c 20 66   false, false, f
d5d0: 61 6c 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  alse,..         
d5e0: 20 20 20 20 20 20 20 20 20 20 20 66 61 6c 73 65             false
d5f0: 2c 20 66 61 6c 73 65 2c 20 66 61 6c 73 65 2c 20  , false, false, 
d600: 66 61 6c 73 65 2c 20 66 61 6c 73 65 2c 20 66 61  false, false, fa
d610: 6c 73 65 2c 20 74 72 75 65 2c 20 74 72 75 65 2c  lse, true, true,
d620: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
d630: 20 20 20 20 20 20 66 61 6c 73 65 29 3b 0d 0a 20        false);.. 
d640: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
d650: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
d660: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d670: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d680: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d690: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
d6a0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
d6b0: 75 62 6c 69 63 20 73 74 61 74 69 63 20 62 6f 6f  ublic static boo
d6c0: 6c 20 46 72 6f 6d 41 72 67 73 28 0d 0a 20 20 20  l FromArgs(..   
d6d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72               str
d6e0: 69 6e 67 5b 5d 20 61 72 67 73 2c 0d 0a 20 20 20  ing[] args,..   
d6f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
d700: 6c 20 73 74 72 69 63 74 2c 0d 0a 20 20 20 20 20  l strict,..     
d710: 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20 43             ref C
d720: 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 63 6f 6e  onfiguration con
d730: 66 69 67 75 72 61 74 69 6f 6e 2c 0d 0a 20 20 20  figuration,..   
d740: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66               ref
d750: 20 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20   string error.. 
d760: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29                 )
d770: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
d780: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
d790: 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20   try..          
d7a0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
d7b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
d7c0: 28 61 72 67 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  (args == null)..
d7d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d7e0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74          return t
d7f0: 72 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  rue;....        
d800: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
d810: 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d  configuration ==
d820: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
d830: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d840: 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d 20  configuration = 
d850: 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 43 72  Configuration.Cr
d860: 65 61 74 65 44 65 66 61 75 6c 74 28 29 3b 0d 0a  eateDefault();..
d870: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
d880: 20 20 20 20 20 20 69 6e 74 20 6c 65 6e 67 74 68        int length
d890: 20 3d 20 61 72 67 73 2e 4c 65 6e 67 74 68 3b 0d   = args.Length;.
d8a0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
d8b0: 20 20 20 20 20 20 20 66 6f 72 20 28 69 6e 74 20         for (int 
d8c0: 69 6e 64 65 78 20 3d 20 30 3b 20 69 6e 64 65 78  index = 0; index
d8d0: 20 3c 20 6c 65 6e 67 74 68 3b 20 69 6e 64 65 78   < length; index
d8e0: 2b 2b 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ++)..           
d8f0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
d900: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d910: 20 20 20 20 73 74 72 69 6e 67 20 61 72 67 20 3d      string arg =
d920: 20 61 72 67 73 5b 69 6e 64 65 78 5d 3b 0d 0a 0d   args[index];...
d930: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
d940: 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
d950: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d960: 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 53 6b       // NOTE: Sk
d970: 69 70 20 61 6e 79 20 61 72 67 75 6d 65 6e 74 20  ip any argument 
d980: 74 68 61 74 20 69 73 20 6e 75 6c 6c 20 28 3f 29  that is null (?)
d990: 20 6f 72 20 61 6e 20 65 6d 70 74 79 0d 0a 20 20   or an empty..  
d9a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d9b0: 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 73        //       s
d9c0: 74 72 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20  tring...        
d9d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d9e0: 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
d9f0: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
da00: 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45  String.IsNullOrE
da10: 6d 70 74 79 28 61 72 67 29 29 0d 0a 20 20 20 20  mpty(arg))..    
da20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
da30: 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65          continue
da40: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
da50: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
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 2f 2f 20 4e 4f 54 45           // NOTE
da80: 3a 20 57 65 20 61 72 65 20 67 6f 69 6e 67 20 74  : We are going t
da90: 6f 20 6d 6f 64 69 66 79 20 74 68 65 20 6f 72 69  o modify the ori
daa0: 67 69 6e 61 6c 20 61 72 67 75 6d 65 6e 74 0d 0a  ginal argument..
dab0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dac0: 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
dad0: 20 62 79 20 72 65 6d 6f 76 69 6e 67 20 61 6e 79   by removing any
dae0: 20 6c 65 61 64 69 6e 67 20 6f 70 74 69 6f 6e 20   leading option 
daf0: 63 68 61 72 61 63 74 65 72 73 3b 0d 0a 20 20 20  characters;..   
db00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
db10: 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 74 68       //       th
db20: 65 72 65 66 6f 72 65 2c 20 77 65 20 75 73 65 20  erefore, we use 
db30: 61 20 6e 65 77 20 73 74 72 69 6e 67 20 74 6f 20  a new string to 
db40: 68 6f 6c 64 20 74 68 65 0d 0a 20 20 20 20 20 20  hold the..      
db50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
db60: 20 20 2f 2f 20 20 20 20 20 20 20 6d 6f 64 69 66    //       modif
db70: 69 65 64 20 61 72 67 75 6d 65 6e 74 2e 0d 0a 20  ied argument... 
db80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
db90: 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
dba0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dbb0: 20 20 20 73 74 72 69 6e 67 20 6e 65 77 41 72 67     string newArg
dbc0: 20 3d 20 61 72 67 3b 0d 0a 0d 0a 20 20 20 20 20   = arg;....     
dbd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dbe0: 20 20 20 2f 2f 0d 0a 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 2f                 /
dc00: 2f 20 4e 4f 54 45 3a 20 41 6c 6c 20 74 68 65 20  / NOTE: All the 
dc10: 73 75 70 70 6f 72 74 65 64 20 63 6f 6d 6d 61 6e  supported comman
dc20: 64 20 6c 69 6e 65 20 6f 70 74 69 6f 6e 73 20 6d  d line options m
dc30: 75 73 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ust..           
dc40: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
dc50: 20 20 20 20 20 20 62 65 67 69 6e 20 77 69 74 68        begin with
dc60: 20 61 6e 20 6f 70 74 69 6f 6e 20 63 68 61 72 61   an option chara
dc70: 63 74 65 72 20 28 65 2e 67 2e 20 61 20 6d 69 6e  cter (e.g. a min
dc80: 75 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  us..            
dc90: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
dca0: 20 20 20 20 20 6f 72 20 66 6f 72 77 61 72 64 20       or forward 
dcb0: 73 6c 61 73 68 29 3b 20 61 74 74 65 6d 70 74 20  slash); attempt 
dcc0: 74 6f 20 76 61 6c 69 64 61 74 65 20 74 68 61 74  to validate that
dcd0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
dce0: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
dcf0: 20 20 20 6e 6f 77 2e 20 20 49 66 20 77 65 20 66     now.  If we f
dd00: 61 69 6c 20 69 6e 20 73 74 72 69 63 74 20 6d 6f  ail in strict mo
dd10: 64 65 2c 20 77 65 20 61 72 65 20 64 6f 6e 65 3b  de, we are done;
dd20: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
dd30: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
dd40: 20 20 20 6f 74 68 65 72 77 69 73 65 2c 20 6a 75     otherwise, ju
dd50: 73 74 20 73 6b 69 70 20 74 68 69 73 20 61 72 67  st skip this arg
dd60: 75 6d 65 6e 74 20 61 6e 64 20 61 64 76 61 6e 63  ument and advanc
dd70: 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
dd80: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
dd90: 20 20 20 20 74 6f 20 74 68 65 20 6e 65 78 74 20      to the next 
dda0: 6f 6e 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  one...          
ddb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
ddc0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
ddd0: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21 43            if (!C
dde0: 68 65 63 6b 4f 70 74 69 6f 6e 28 72 65 66 20 6e  heckOption(ref n
ddf0: 65 77 41 72 67 29 29 0d 0a 20 20 20 20 20 20 20  ewArg))..       
de00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
de10: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
de20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
de30: 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73  error = TraceOps
de40: 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d  .DebugAndTrace(.
de50: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
de60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
de70: 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c   TracePriority.L
de80: 6f 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c 6c  owest, debugCall
de90: 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20  back,..         
dea0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
deb0: 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c         traceCall
dec0: 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72  back, String.For
ded0: 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
dee0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
def0: 20 20 20 20 20 20 22 55 6e 73 75 70 70 6f 72 74        "Unsupport
df00: 65 64 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 20  ed command line 
df10: 61 72 67 75 6d 65 6e 74 3a 20 7b 30 7d 22 2c 0d  argument: {0}",.
df20: 0a 20 20 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 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29   ForDisplay(arg)
df50: 29 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72 79  ), traceCategory
df60: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
df70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
df80: 20 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20    if (strict).. 
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 20 20 20 20 72                 r
dfb0: 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a  eturn false;....
dfc0: 20 20 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 63 6f 6e 74              cont
dfe0: 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  inue;..         
dff0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
e000: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
e010: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
e020: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e030: 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a          // NOTE:
e040: 20 41 6c 6c 20 74 68 65 20 73 75 70 70 6f 72 74   All the support
e050: 65 64 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 20  ed command line 
e060: 6f 70 74 69 6f 6e 73 20 6d 75 73 74 0d 0a 20 20  options must..  
e070: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e080: 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 68        //       h
e090: 61 76 65 20 61 20 76 61 6c 75 65 3b 20 74 68 65  ave a value; the
e0a0: 72 65 66 6f 72 65 2c 20 61 74 74 65 6d 70 74 20  refore, attempt 
e0b0: 74 6f 20 61 64 76 61 6e 63 65 0d 0a 20 20 20 20  to advance..    
e0c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e0d0: 20 20 20 20 2f 2f 20 20 20 20 20 20 20 74 6f 20      //       to 
e0e0: 69 74 20 6e 6f 77 2e 20 20 49 66 20 77 65 20 66  it now.  If we f
e0f0: 61 69 6c 2c 20 77 65 20 61 72 65 20 64 6f 6e 65  ail, we are done
e100: 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
e110: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
e120: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e130: 20 20 20 20 20 20 20 69 6e 64 65 78 2b 2b 3b 0d         index++;.
e140: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
e150: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 69             if (i
e160: 6e 64 65 78 20 3e 3d 20 6c 65 6e 67 74 68 29 0d  ndex >= length).
e170: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
e180: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
e190: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e1a0: 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
e1b0: 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e  TraceOps.DebugAn
e1c0: 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20  dTrace(..       
e1d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e1e0: 20 20 20 20 20 20 20 20 20 54 72 61 63 65 50 72           TracePr
e1f0: 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64  iority.Lowest, d
e200: 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20  ebugCallback,.. 
e210: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e220: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
e230: 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74  raceCallback, St
e240: 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
e250: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e260: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 4d                "M
e270: 69 73 73 69 6e 67 20 76 61 6c 75 65 20 66 6f 72  issing value for
e280: 20 6f 70 74 69 6f 6e 3a 20 7b 30 7d 22 2c 0d 0a   option: {0}",..
e290: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e2a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e2b0: 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29 29  ForDisplay(arg))
e2c0: 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29  , traceCategory)
e2d0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
e2e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e2f0: 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20   if (strict)..  
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 72 65                re
e320: 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20  turn false;.... 
e330: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e340: 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b             break
e350: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
e360: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
e370: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e380: 20 20 20 20 20 20 20 20 2f 2f 0d 0a 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 20 2f 2f 20 4e 4f 54 45 3a 20 47 72 61      // NOTE: Gra
e3b0: 62 20 74 68 65 20 74 65 78 74 75 61 6c 20 76 61  b the textual va
e3c0: 6c 75 65 20 6f 66 20 74 68 69 73 20 63 6f 6d 6d  lue of this comm
e3d0: 61 6e 64 20 6c 69 6e 65 0d 0a 20 20 20 20 20 20  and line..      
e3e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e3f0: 20 20 2f 2f 20 20 20 20 20 20 20 6f 70 74 69 6f    //       optio
e400: 6e 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n...            
e410: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
e420: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e430: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 74          string t
e440: 65 78 74 20 3d 20 61 72 67 73 5b 69 6e 64 65 78  ext = args[index
e450: 5d 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  ];....          
e460: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
e470: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
e480: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54            // NOT
e490: 45 3a 20 46 69 67 75 72 65 20 6f 75 74 20 77 68  E: Figure out wh
e4a0: 69 63 68 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65  ich command line
e4b0: 20 6f 70 74 69 6f 6e 20 74 68 69 73 20 69 73 0d   option this is.
e4c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
e4d0: 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
e4e0: 20 20 28 62 61 73 65 64 20 6f 6e 20 61 20 70 61    (based on a pa
e4f0: 72 74 69 61 6c 20 6e 61 6d 65 20 6d 61 74 63 68  rtial name match
e500: 29 20 61 6e 64 20 74 68 65 6e 20 74 72 79 0d 0a  ) and then try..
e510: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e520: 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
e530: 20 74 6f 20 69 6e 74 65 72 70 72 65 74 20 74 68   to interpret th
e540: 65 20 74 65 78 74 75 61 6c 20 76 61 6c 75 65 20  e textual value 
e550: 61 73 20 74 68 65 20 63 6f 72 72 65 63 74 0d 0a  as the correct..
e560: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e570: 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
e580: 20 74 79 70 65 2e 0d 0a 20 20 20 20 20 20 20 20   type...        
e590: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e5a0: 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
e5b0: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
e5c0: 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41  MatchOption(newA
e5d0: 72 67 2c 20 22 73 74 72 69 63 74 22 29 29 0d 0a  rg, "strict"))..
e5e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e5f0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
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 62 6f 6f 6c 3f 20 76 61 6c         bool? val
e620: 75 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61  ue = ParseBoolea
e630: 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20  n(text);....    
e640: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e650: 20 20 20 20 20 20 20 20 69 66 20 28 76 61 6c 75          if (valu
e660: 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  e == null)..    
e670: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e680: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
e690: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e6a0: 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
e6b0: 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75   = TraceOps.Debu
e6c0: 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20 20  gAndTrace(..    
e6d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e6e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e6f0: 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f  TracePriority.Lo
e700: 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c 6c 62  west, debugCallb
e710: 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ack,..          
e720: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e730: 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
e740: 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e  allback, String.
e750: 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
e760: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e770: 20 20 20 20 20 20 20 20 20 20 20 20 20 22 49 6e               "In
e780: 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61  valid {0} boolea
e790: 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a  n value: {1}",..
e7a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e7b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e7c0: 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61      ForDisplay(a
e7d0: 72 67 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  rg), ForDisplay(
e7e0: 74 65 78 74 29 29 2c 0d 0a 20 20 20 20 20 20 20  text)),..       
e7f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e800: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
e810: 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
e820: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e830: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e840: 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20  if (strict)..   
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 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
e880: 0d 0a 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 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20    continue;..   
e8b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e8c0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
e8d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e8e0: 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
e8f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e900: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54            // NOT
e910: 45 3a 20 41 6c 6c 6f 77 20 74 68 65 20 63 6f 6d  E: Allow the com
e920: 6d 61 6e 64 20 6c 69 6e 65 20 61 72 67 75 6d 65  mand line argume
e930: 6e 74 73 20 74 6f 0d 0a 20 20 20 20 20 20 20 20  nts to..        
e940: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e950: 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6f 76 65      //       ove
e960: 72 72 69 64 65 20 74 68 65 20 22 73 74 72 69 63  rride the "stric
e970: 74 6e 65 73 73 22 20 73 65 74 74 69 6e 67 0d 0a  tness" setting..
e980: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e990: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
e9a0: 20 20 20 20 20 70 72 6f 76 69 64 65 64 20 62 79       provided by
e9b0: 20 6f 75 72 20 63 61 6c 6c 65 72 2e 0d 0a 20 20   our caller...  
e9c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e9d0: 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 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 20 20 20 20 73 74 72 69 63 74            strict
ea00: 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d   = (bool)value;.
ea10: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
ea20: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
ea30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ea40: 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74      else if (Mat
ea50: 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c  chOption(newArg,
ea60: 20 22 6c 6f 67 46 69 6c 65 4e 61 6d 65 22 29 29   "logFileName"))
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 7b 0d 0a 20 20 20            {..   
ea90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
eaa0: 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75           configu
eab0: 72 61 74 69 6f 6e 2e 6c 6f 67 46 69 6c 65 4e 61  ration.logFileNa
eac0: 6d 65 20 3d 20 74 65 78 74 3b 0d 0a 20 20 20 20  me = text;..    
ead0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
eae0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
eaf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
eb00: 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74  lse if (MatchOpt
eb10: 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 64 69 72  ion(newArg, "dir
eb20: 65 63 74 6f 72 79 22 29 29 0d 0a 20 20 20 20 20  ectory"))..     
eb30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
eb40: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
eb50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
eb60: 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e    configuration.
eb70: 64 69 72 65 63 74 6f 72 79 20 3d 20 74 65 78 74  directory = text
eb80: 3b 0d 0a 0d 0a 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 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
ebb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ebc0: 20 2f 2f 20 4e 4f 54 45 3a 20 2a 53 50 45 43 49   // NOTE: *SPECI
ebd0: 41 4c 2a 20 4d 75 73 74 20 72 65 66 72 65 73 68  AL* Must refresh
ebe0: 20 74 68 65 20 66 69 6c 65 20 6e 61 6d 65 73 0d   the file names.
ebf0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
ec00: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
ec10: 20 20 20 20 20 20 68 65 72 65 20 62 65 63 61 75        here becau
ec20: 73 65 20 74 68 65 20 75 6e 64 65 72 6c 79 69 6e  se the underlyin
ec30: 67 20 64 69 72 65 63 74 6f 72 79 0d 0a 20 20 20  g directory..   
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 2f 2f 20 20 20 20 20           //     
ec60: 20 20 68 61 73 20 63 68 61 6e 67 65 64 2e 0d 0a    has changed...
ec70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ec80: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
ec90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
eca0: 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
ecb0: 6e 67 20 63 6f 72 65 46 69 6c 65 4e 61 6d 65 20  ng coreFileName 
ecc0: 3d 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e  = configuration.
ecd0: 63 6f 72 65 46 69 6c 65 4e 61 6d 65 3b 0d 0a 0d  coreFileName;...
ece0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
ecf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
ed00: 28 21 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f  (!String.IsNullO
ed10: 72 45 6d 70 74 79 28 63 6f 72 65 46 69 6c 65 4e  rEmpty(coreFileN
ed20: 61 6d 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ame))..         
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 63 6f 72 65 46 69 6c 65 4e         coreFileN
ed50: 61 6d 65 20 3d 20 50 61 74 68 2e 47 65 74 46 69  ame = Path.GetFi
ed60: 6c 65 4e 61 6d 65 28 63 6f 72 65 46 69 6c 65 4e  leName(coreFileN
ed70: 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ame);....       
ed80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ed90: 20 20 20 20 20 69 66 20 28 53 74 72 69 6e 67 2e       if (String.
eda0: 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 63 6f  IsNullOrEmpty(co
edb0: 72 65 46 69 6c 65 4e 61 6d 65 29 29 0d 0a 20 20  reFileName))..  
edc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
edd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
ede0: 72 65 46 69 6c 65 4e 61 6d 65 20 3d 20 49 6e 73  reFileName = Ins
edf0: 74 61 6c 6c 65 72 2e 43 6f 72 65 46 69 6c 65 4e  taller.CoreFileN
ee00: 61 6d 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ame;....        
ee10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ee20: 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f      configuratio
ee30: 6e 2e 63 6f 72 65 46 69 6c 65 4e 61 6d 65 20 3d  n.coreFileName =
ee40: 20 50 61 74 68 2e 43 6f 6d 62 69 6e 65 28 0d 0a   Path.Combine(..
ee50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ee60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ee70: 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 64 69  configuration.di
ee80: 72 65 63 74 6f 72 79 2c 20 63 6f 72 65 46 69 6c  rectory, coreFil
ee90: 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  eName);....     
eea0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
eeb0: 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6c 69         string li
eec0: 6e 71 46 69 6c 65 4e 61 6d 65 20 3d 20 63 6f 6e  nqFileName = con
eed0: 66 69 67 75 72 61 74 69 6f 6e 2e 6c 69 6e 71 46  figuration.linqF
eee0: 69 6c 65 4e 61 6d 65 3b 0d 0a 0d 0a 20 20 20 20  ileName;....    
eef0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ef00: 20 20 20 20 20 20 20 20 69 66 20 28 21 53 74 72          if (!Str
ef10: 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74  ing.IsNullOrEmpt
ef20: 79 28 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 29 29  y(linqFileName))
ef30: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
ef40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ef50: 20 20 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 20 3d    linqFileName =
ef60: 20 50 61 74 68 2e 47 65 74 46 69 6c 65 4e 61 6d   Path.GetFileNam
ef70: 65 28 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 29 3b  e(linqFileName);
ef80: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
ef90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
efa0: 69 66 20 28 53 74 72 69 6e 67 2e 49 73 4e 75 6c  if (String.IsNul
efb0: 6c 4f 72 45 6d 70 74 79 28 6c 69 6e 71 46 69 6c  lOrEmpty(linqFil
efc0: 65 4e 61 6d 65 29 29 0d 0a 20 20 20 20 20 20 20  eName))..       
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 20 6c 69 6e 71 46 69 6c           linqFil
eff0: 65 4e 61 6d 65 20 3d 20 49 6e 73 74 61 6c 6c 65  eName = Installe
f000: 72 2e 4c 69 6e 71 46 69 6c 65 4e 61 6d 65 3b 0d  r.LinqFileName;.
f010: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
f020: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
f030: 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6c 69 6e  onfiguration.lin
f040: 71 46 69 6c 65 4e 61 6d 65 20 3d 20 50 61 74 68  qFileName = Path
f050: 2e 43 6f 6d 62 69 6e 65 28 0d 0a 20 20 20 20 20  .Combine(..     
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 63 6f 6e 66 69             confi
f080: 67 75 72 61 74 69 6f 6e 2e 64 69 72 65 63 74 6f  guration.directo
f090: 72 79 2c 20 6c 69 6e 71 46 69 6c 65 4e 61 6d 65  ry, linqFileName
f0a0: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
f0b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f0c0: 20 20 73 74 72 69 6e 67 20 64 65 73 69 67 6e 65    string designe
f0d0: 72 46 69 6c 65 4e 61 6d 65 20 3d 20 63 6f 6e 66  rFileName = conf
f0e0: 69 67 75 72 61 74 69 6f 6e 2e 64 65 73 69 67 6e  iguration.design
f0f0: 65 72 46 69 6c 65 4e 61 6d 65 3b 0d 0a 0d 0a 20  erFileName;.... 
f100: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f110: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21             if (!
f120: 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45  String.IsNullOrE
f130: 6d 70 74 79 28 64 65 73 69 67 6e 65 72 46 69 6c  mpty(designerFil
f140: 65 4e 61 6d 65 29 29 0d 0a 20 20 20 20 20 20 20  eName))..       
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 64 65 73 69 67 6e 65           designe
f170: 72 46 69 6c 65 4e 61 6d 65 20 3d 20 50 61 74 68  rFileName = Path
f180: 2e 47 65 74 46 69 6c 65 4e 61 6d 65 28 64 65 73  .GetFileName(des
f190: 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 29 3b 0d  ignerFileName);.
f1a0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
f1b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
f1c0: 66 20 28 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c  f (String.IsNull
f1d0: 4f 72 45 6d 70 74 79 28 64 65 73 69 67 6e 65 72  OrEmpty(designer
f1e0: 46 69 6c 65 4e 61 6d 65 29 29 0d 0a 20 20 20 20  FileName))..    
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 64 65 73 69              desi
f210: 67 6e 65 72 46 69 6c 65 4e 61 6d 65 20 3d 20 49  gnerFileName = I
f220: 6e 73 74 61 6c 6c 65 72 2e 44 65 73 69 67 6e 65  nstaller.Designe
f230: 72 46 69 6c 65 4e 61 6d 65 3b 0d 0a 0d 0a 20 20  rFileName;....  
f240: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f250: 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67            config
f260: 75 72 61 74 69 6f 6e 2e 64 65 73 69 67 6e 65 72  uration.designer
f270: 46 69 6c 65 4e 61 6d 65 20 3d 20 50 61 74 68 2e  FileName = Path.
f280: 43 6f 6d 62 69 6e 65 28 0d 0a 20 20 20 20 20 20  Combine(..      
f290: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f2a0: 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67            config
f2b0: 75 72 61 74 69 6f 6e 2e 64 69 72 65 63 74 6f 72  uration.director
f2c0: 79 2c 20 64 65 73 69 67 6e 65 72 46 69 6c 65 4e  y, designerFileN
f2d0: 61 6d 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ame);..         
f2e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
f2f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
f300: 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69            else i
f310: 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e  f (MatchOption(n
f320: 65 77 41 72 67 2c 20 22 63 6f 72 65 46 69 6c 65  ewArg, "coreFile
f330: 4e 61 6d 65 22 29 29 0d 0a 20 20 20 20 20 20 20  Name"))..       
f340: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f350: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
f360: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f370: 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 63 6f  configuration.co
f380: 72 65 46 69 6c 65 4e 61 6d 65 20 3d 20 74 65 78  reFileName = tex
f390: 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t;..            
f3a0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
f3b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f3c0: 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28         else if (
f3d0: 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41  MatchOption(newA
f3e0: 72 67 2c 20 22 6c 69 6e 71 46 69 6c 65 4e 61 6d  rg, "linqFileNam
f3f0: 65 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  e"))..          
f400: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
f410: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
f420: 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
f430: 66 69 67 75 72 61 74 69 6f 6e 2e 6c 69 6e 71 46  figuration.linqF
f440: 69 6c 65 4e 61 6d 65 20 3d 20 74 65 78 74 3b 0d  ileName = text;.
f450: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
f460: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
f470: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f480: 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74      else if (Mat
f490: 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c  chOption(newArg,
f4a0: 20 22 64 65 73 69 67 6e 65 72 46 69 6c 65 4e 61   "designerFileNa
f4b0: 6d 65 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20  me"))..         
f4c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
f4d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
f4e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
f4f0: 6e 66 69 67 75 72 61 74 69 6f 6e 2e 64 65 73 69  nfiguration.desi
f500: 67 6e 65 72 46 69 6c 65 4e 61 6d 65 20 3d 20 74  gnerFileName = t
f510: 65 78 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ext;..          
f520: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
f530: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
f540: 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66           else if
f550: 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65   (MatchOption(ne
f560: 77 41 72 67 2c 20 22 64 65 62 75 67 46 6f 72 6d  wArg, "debugForm
f570: 61 74 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20  at"))..         
f580: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
f590: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
f5a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
f5b0: 6e 66 69 67 75 72 61 74 69 6f 6e 2e 64 65 62 75  nfiguration.debu
f5c0: 67 46 6f 72 6d 61 74 20 3d 20 74 65 78 74 3b 0d  gFormat = text;.
f5d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
f5e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
f5f0: 63 65 4f 70 73 2e 44 65 62 75 67 46 6f 72 6d 61  ceOps.DebugForma
f600: 74 20 3d 20 63 6f 6e 66 69 67 75 72 61 74 69 6f  t = configuratio
f610: 6e 2e 64 65 62 75 67 46 6f 72 6d 61 74 3b 0d 0a  n.debugFormat;..
f620: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f630: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
f640: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f650: 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63     else if (Matc
f660: 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20  hOption(newArg, 
f670: 22 74 72 61 63 65 46 6f 72 6d 61 74 22 29 29 0d  "traceFormat")).
f680: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
f690: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
f6a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f6b0: 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72          configur
f6c0: 61 74 69 6f 6e 2e 74 72 61 63 65 46 6f 72 6d 61  ation.traceForma
f6d0: 74 20 3d 20 74 65 78 74 3b 0d 0a 20 20 20 20 20  t = text;..     
f6e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f6f0: 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e         TraceOps.
f700: 54 72 61 63 65 46 6f 72 6d 61 74 20 3d 20 63 6f  TraceFormat = co
f710: 6e 66 69 67 75 72 61 74 69 6f 6e 2e 74 72 61 63  nfiguration.trac
f720: 65 46 6f 72 6d 61 74 3b 0d 0a 20 20 20 20 20 20  eFormat;..      
f730: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f740: 20 20 7d 0d 0a 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 65 6c 73               els
f760: 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f  e if (MatchOptio
f770: 6e 28 6e 65 77 41 72 67 2c 20 22 64 65 62 75 67  n(newArg, "debug
f780: 50 72 69 6f 72 69 74 79 22 29 29 0d 0a 20 20 20  Priority"))..   
f790: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f7a0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
f7b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f7c0: 20 20 20 20 6f 62 6a 65 63 74 20 76 61 6c 75 65      object value
f7d0: 20 3d 20 50 61 72 73 65 45 6e 75 6d 28 0d 0a 20   = ParseEnum(.. 
f7e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f7f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
f800: 79 70 65 6f 66 28 54 72 61 63 65 50 72 69 6f 72  ypeof(TracePrior
f810: 69 74 79 29 2c 20 74 65 78 74 2c 20 74 72 75 65  ity), text, true
f820: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
f830: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f840: 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e    if (value == n
f850: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
f860: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f870: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
f880: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f890: 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72 61       error = Tra
f8a0: 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72  ceOps.DebugAndTr
f8b0: 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ace(..          
f8c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f8d0: 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 50            TraceP
f8e0: 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20  riority.Lowest, 
f8f0: 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a  debugCallback,..
f900: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f910: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f920: 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63      traceCallbac
f930: 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  k, String.Format
f940: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
f950: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f960: 20 20 20 20 20 20 20 22 49 6e 76 61 6c 69 64 20         "Invalid 
f970: 7b 30 7d 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c  {0} value: {1}",
f980: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
f990: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f9a0: 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79        ForDisplay
f9b0: 28 61 72 67 29 2c 20 46 6f 72 44 69 73 70 6c 61  (arg), ForDispla
f9c0: 79 28 74 65 78 74 29 29 2c 0d 0a 20 20 20 20 20  y(text)),..     
f9d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f9e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
f9f0: 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
fa00: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
fa10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fa20: 20 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20    if (strict).. 
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 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
fa60: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
fa70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fa80: 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20      continue;.. 
fa90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
faa0: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
fab0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fac0: 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66              conf
fad0: 69 67 75 72 61 74 69 6f 6e 2e 64 65 62 75 67 50  iguration.debugP
fae0: 72 69 6f 72 69 74 79 20 3d 20 28 54 72 61 63 65  riority = (Trace
faf0: 50 72 69 6f 72 69 74 79 29 76 61 6c 75 65 3b 0d  Priority)value;.
fb00: 0a 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 54 72 61               Tra
fb20: 63 65 4f 70 73 2e 44 65 62 75 67 50 72 69 6f 72  ceOps.DebugPrior
fb30: 69 74 79 20 3d 20 63 6f 6e 66 69 67 75 72 61 74  ity = configurat
fb40: 69 6f 6e 2e 64 65 62 75 67 50 72 69 6f 72 69 74  ion.debugPriorit
fb50: 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y;..            
fb60: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
fb70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fb80: 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28         else if (
fb90: 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41  MatchOption(newA
fba0: 72 67 2c 20 22 74 72 61 63 65 50 72 69 6f 72 69  rg, "tracePriori
fbb0: 74 79 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ty"))..         
fbc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
fbd0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
fbe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f 62                ob
fbf0: 6a 65 63 74 20 76 61 6c 75 65 20 3d 20 50 61 72  ject value = Par
fc00: 73 65 45 6e 75 6d 28 0d 0a 20 20 20 20 20 20 20  seEnum(..       
fc10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fc20: 20 20 20 20 20 20 20 20 20 74 79 70 65 6f 66 28           typeof(
fc30: 54 72 61 63 65 50 72 69 6f 72 69 74 79 29 2c 20  TracePriority), 
fc40: 74 65 78 74 2c 20 74 72 75 65 29 3b 0d 0a 0d 0a  text, true);....
fc50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fc60: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
fc70: 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  value == null)..
fc80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fc90: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
fca0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fcb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
fcc0: 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e  rror = TraceOps.
fcd0: 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a  DebugAndTrace(..
fce0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fcf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fd00: 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69 74      TracePriorit
fd10: 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43  y.Lowest, debugC
fd20: 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20  allback,..      
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 20 20 20 20 20 74 72                tr
fd50: 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72  aceCallback, Str
fd60: 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
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 20 20 20 20 20 20                  
fd90: 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20 76 61   "Invalid {0} va
fda0: 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20  lue: {1}",..    
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 20 20 20 20 20 20 20                  
fdd0: 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29 2c  ForDisplay(arg),
fde0: 20 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74   ForDisplay(text
fdf0: 29 29 2c 0d 0a 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: 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
fe20: 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
fe30: 20 20 20 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 69 66 20 28              if (
fe50: 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20  strict)..       
fe60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fe70: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
fe80: 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20  urn false;....  
fe90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fea0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
feb0: 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20  ntinue;..       
fec0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fed0: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
fee0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fef0: 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74        configurat
ff00: 69 6f 6e 2e 74 72 61 63 65 50 72 69 6f 72 69 74  ion.tracePriorit
ff10: 79 20 3d 20 28 54 72 61 63 65 50 72 69 6f 72 69  y = (TracePriori
ff20: 74 79 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20  ty)value;..     
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 54 72 61 63 65 4f 70 73 2e         TraceOps.
ff50: 54 72 61 63 65 50 72 69 6f 72 69 74 79 20 3d 20  TracePriority = 
ff60: 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 74 72  configuration.tr
ff70: 61 63 65 50 72 69 6f 72 69 74 79 3b 0d 0a 20 20  acePriority;..  
ff80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ff90: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
ffa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ffb0: 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f   else if (MatchO
ffc0: 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 69  ption(newArg, "i
ffd0: 6e 73 74 61 6c 6c 22 29 29 0d 0a 20 20 20 20 20  nstall"))..     
ffe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fff0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
10000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10010 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20    bool? value = 
10020 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78  ParseBoolean(tex
10030 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  t);....         
10040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10050 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20     if (value == 
10060 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
10070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10080 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
10090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
100a0 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72        error = Tr
100b0 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54  aceOps.DebugAndT
100c0 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20  race(..         
100d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
100e0 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
100f0 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c  Priority.Lowest,
10100 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d   debugCallback,.
10110 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
10120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10130 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61       traceCallba
10140 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ck, String.Forma
10150 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
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 22 49 6e 76 61 6c 69 64          "Invalid
10180 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c   {0} boolean val
10190 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20  ue: {1}",..     
101a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
101b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46                 F
101c0 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29 2c 20  orDisplay(arg), 
101d0 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74 29  ForDisplay(text)
101e0 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
101f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10200 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74          traceCat
10210 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
10220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10230 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73             if (s
10240 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20  trict)..        
10250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10260 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
10270 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20  rn false;....   
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 20 20 63 6f 6e               con
102a0 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20  tinue;..        
102b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
102c0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
102d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
102e0 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69       configurati
102f0 6f 6e 2e 69 6e 73 74 61 6c 6c 20 3d 20 28 62 6f  on.install = (bo
10300 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20  ol)value;..     
10310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10320 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
10330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c                el
10340 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69  se if (MatchOpti
10350 6f 6e 28 6e 65 77 41 72 67 2c 20 22 69 6e 73 74  on(newArg, "inst
10360 61 6c 6c 46 6c 61 67 73 22 29 29 0d 0a 20 20 20  allFlags"))..   
10370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10380 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
10390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
103a0 20 20 20 20 6f 62 6a 65 63 74 20 76 61 6c 75 65      object value
103b0 20 3d 20 50 61 72 73 65 45 6e 75 6d 28 0d 0a 20   = ParseEnum(.. 
103c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
103d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
103e0 79 70 65 6f 66 28 49 6e 73 74 61 6c 6c 46 6c 61  ypeof(InstallFla
103f0 67 73 29 2c 20 74 65 78 74 2c 20 74 72 75 65 29  gs), text, true)
10400 3b 0d 0a 0d 0a 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 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75   if (value == nu
10430 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
10440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10450 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
10460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10470 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72 61 63      error = Trac
10480 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61  eOps.DebugAndTra
10490 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ce(..           
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 54 72 61 63 65 50 72           TracePr
104c0 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64  iority.Lowest, d
104d0 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20  ebugCallback,.. 
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 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b     traceCallback
10510 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  , String.Format(
10520 0d 0a 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 20 20 20 20 20 20 22 49 6e 76 61 6c 69 64 20 69        "Invalid i
10550 6e 73 74 61 6c 6c 20 66 6c 61 67 73 20 76 61 6c  nstall flags val
10560 75 65 3a 20 7b 30 7d 22 2c 0d 0a 20 20 20 20 20  ue: {0}",..     
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 20 20 20 20 20 20 20 20 46                 F
10590 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74 29 29  orDisplay(text))
105a0 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29  , traceCategory)
105b0 3b 0d 0a 0d 0a 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 20 20 20 69 66 20 28 73 74 72 69 63 74 29       if (strict)
105e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
105f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10600 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
10610 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  se;....         
10620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10630 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b         continue;
10640 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
10650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
10660 0a 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 63                 c
10680 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 69 6e 73  onfiguration.ins
10690 74 61 6c 6c 46 6c 61 67 73 20 3d 20 28 49 6e 73  tallFlags = (Ins
106a0 74 61 6c 6c 46 6c 61 67 73 29 76 61 6c 75 65 3b  tallFlags)value;
106b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
106c0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
106d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
106e0 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61       else if (Ma
106f0 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67  tchOption(newArg
10700 2c 20 22 6e 6f 52 75 6e 74 69 6d 65 56 65 72 73  , "noRuntimeVers
10710 69 6f 6e 22 29 29 0d 0a 20 20 20 20 20 20 20 20  ion"))..        
10720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10730 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
10740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
10750 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61 72  ool? value = Par
10760 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b  seBoolean(text);
10770 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
10780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10790 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c  if (value == nul
107a0 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
107b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
107c0 7b 0d 0a 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 20 20 20 20                  
107e0 20 20 20 65 72 72 6f 72 20 3d 20 54 72 61 63 65     error = Trace
107f0 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63  Ops.DebugAndTrac
10800 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
10810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10820 20 20 20 20 20 20 20 20 54 72 61 63 65 50 72 69          TracePri
10830 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65  ority.Lowest, de
10840 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20  bugCallback,..  
10850 20 20 20 20 20 20 20 20 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 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c    traceCallback,
10880 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
10890 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
108a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
108b0 20 20 20 20 20 22 49 6e 76 61 6c 69 64 20 7b 30       "Invalid {0
108c0 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a  } boolean value:
108d0 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20   {1}",..        
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 46 6f 72 44              ForD
10900 69 73 70 6c 61 79 28 61 72 67 29 2c 20 46 6f 72  isplay(arg), For
10910 44 69 73 70 6c 61 79 28 74 65 78 74 29 29 2c 0d  Display(text)),.
10920 0a 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 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
10950 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
10960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10970 20 20 20 20 20 20 20 20 69 66 20 28 73 74 72 69          if (stri
10980 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ct)..           
10990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
109a0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
109b0 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  false;....      
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 63 6f 6e 74 69 6e            contin
109e0 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
109f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10a00 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
10a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10a20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e    configuration.
10a30 6e 6f 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e  noRuntimeVersion
10a40 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d   = (bool)value;.
10a50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
10a60 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
10a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10a80 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74      else if (Mat
10a90 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c  chOption(newArg,
10aa0 20 22 77 68 61 74 49 66 22 29 29 0d 0a 20 20 20   "whatIf"))..   
10ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10ac0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
10ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10ae0 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20      bool? value 
10af0 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74  = ParseBoolean(t
10b00 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ext);....       
10b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10b20 20 20 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d       if (value =
10b30 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
10b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10b50 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
10b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10b70 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
10b80 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e  TraceOps.DebugAn
10b90 64 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20  dTrace(..       
10ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
10bc0 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73  cePriority.Lowes
10bd0 74 2c 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b  t, debugCallback
10be0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
10bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10c00 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c         traceCall
10c10 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72  back, String.For
10c20 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
10c30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10c40 20 20 20 20 20 20 20 20 20 20 22 49 6e 76 61 6c            "Inval
10c50 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76  id {0} boolean v
10c60 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20  alue: {1}",..   
10c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10c90 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29   ForDisplay(arg)
10ca0 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78  , ForDisplay(tex
10cb0 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  t)),..          
10cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10cd0 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
10ce0 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
10cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10d00 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
10d10 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20  (strict)..      
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 72 65                re
10d40 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20  turn false;.... 
10d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
10d70 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20  ontinue;..      
10d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10d90 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
10da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10db0 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61         configura
10dc0 74 69 6f 6e 2e 77 68 61 74 49 66 20 3d 20 28 62  tion.whatIf = (b
10dd0 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20  ool)value;..    
10de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10df0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
10e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
10e10 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74  lse if (MatchOpt
10e20 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 76 65 72  ion(newArg, "ver
10e30 62 6f 73 65 22 29 29 0d 0a 20 20 20 20 20 20 20  bose"))..       
10e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10e50 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
10e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10e70 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61  bool? value = Pa
10e80 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29  rseBoolean(text)
10e90 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
10ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10eb0 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75   if (value == nu
10ec0 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
10ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10ee0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
10ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10f00 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72 61 63      error = Trac
10f10 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61  eOps.DebugAndTra
10f20 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ce(..           
10f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10f40 20 20 20 20 20 20 20 20 20 54 72 61 63 65 50 72           TracePr
10f50 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64  iority.Lowest, d
10f60 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20  ebugCallback,.. 
10f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10f90 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b     traceCallback
10fa0 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  , String.Format(
10fb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
10fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10fd0 20 20 20 20 20 20 22 49 6e 76 61 6c 69 64 20 7b        "Invalid {
10fe0 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65  0} boolean value
10ff0 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20  : {1}",..       
11000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11010 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72               For
11020 44 69 73 70 6c 61 79 28 61 72 67 29 2c 20 46 6f  Display(arg), Fo
11030 72 44 69 73 70 6c 61 79 28 74 65 78 74 29 29 2c  rDisplay(text)),
11040 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
11050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11060 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
11070 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
11080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11090 20 20 20 20 20 20 20 20 20 69 66 20 28 73 74 72           if (str
110a0 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ict)..          
110b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
110c0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
110d0 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20   false;....     
110e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
110f0 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69             conti
11100 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  nue;..          
11110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11120 20 20 7d 0d 0a 0d 0a 20 20 20 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 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e     configuration
11150 2e 76 65 72 62 6f 73 65 20 3d 20 28 62 6f 6f 6c  .verbose = (bool
11160 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20  )value;..       
11170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11180 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
11190 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65              else
111a0 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e   if (MatchOption
111b0 28 6e 65 77 41 72 67 2c 20 22 63 6f 6e 66 69 72  (newArg, "confir
111c0 6d 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  m"))..          
111d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
111e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
111f0 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
11200 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65  l? value = Parse
11210 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a  Boolean(text);..
11220 0d 0a 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 69 66                if
11240 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29   (value == null)
11250 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
11260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
11270 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
11280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11290 20 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70   error = TraceOp
112a0 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28  s.DebugAndTrace(
112b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
112c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
112d0 20 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72        TracePrior
112e0 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75  ity.Lowest, debu
112f0 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20  gCallback,..    
11300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11320 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53  traceCallback, S
11330 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
11340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11360 20 20 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20     "Invalid {0} 
11370 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b  boolean value: {
11380 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  1}",..          
11390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
113a0 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73            ForDis
113b0 70 6c 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69  play(arg), ForDi
113c0 73 70 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20  splay(text)),.. 
113d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
113e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
113f0 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
11400 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
11410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11420 20 20 20 20 20 20 69 66 20 28 73 74 72 69 63 74        if (strict
11430 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
11440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11450 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
11460 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  lse;....        
11470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11480 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65          continue
11490 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
114a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
114b0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
114c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
114d0 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 63 6f  configuration.co
114e0 6e 66 69 72 6d 20 3d 20 28 62 6f 6f 6c 29 76 61  nfirm = (bool)va
114f0 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lue;..          
11500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
11510 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
11520 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66           else if
11530 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65   (MatchOption(ne
11540 77 41 72 67 2c 20 22 6e 6f 44 65 73 6b 74 6f 70  wArg, "noDesktop
11550 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  "))..           
11560 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
11570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11580 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
11590 3f 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65 42  ? value = ParseB
115a0 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d  oolean(text);...
115b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
115c0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
115d0 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d  (value == null).
115e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
115f0 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
11600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11620 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73  error = TraceOps
11630 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d  .DebugAndTrace(.
11640 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
11650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11660 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69       TracePriori
11670 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75 67  ty.Lowest, debug
11680 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20  Callback,..     
11690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
116a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
116b0 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74  raceCallback, St
116c0 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
116d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
116e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
116f0 20 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62    "Invalid {0} b
11700 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31  oolean value: {1
11710 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }",..           
11720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11730 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70           ForDisp
11740 6c 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69 73  lay(arg), ForDis
11750 70 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20 20  play(text)),..  
11760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11780 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
11790 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
117a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
117b0 20 20 20 20 20 69 66 20 28 73 74 72 69 63 74 29       if (strict)
117c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
117d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
117e0 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
117f0 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  se;....         
11800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11810 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b         continue;
11820 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
11830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
11840 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
11850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
11860 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 44  onfiguration.noD
11870 65 73 6b 74 6f 70 20 3d 20 28 62 6f 6f 6c 29 76  esktop = (bool)v
11880 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alue;..         
11890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
118a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
118b0 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69            else i
118c0 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e  f (MatchOption(n
118d0 65 77 41 72 67 2c 20 22 6e 6f 43 6f 6d 70 61 63  ewArg, "noCompac
118e0 74 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  t"))..          
118f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
11900 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
11910 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
11920 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65  l? value = Parse
11930 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a  Boolean(text);..
11940 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
11950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
11960 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29   (value == null)
11970 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
11980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
11990 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
119a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
119b0 20 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70   error = TraceOp
119c0 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28  s.DebugAndTrace(
119d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
119e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
119f0 20 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72        TracePrior
11a00 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75  ity.Lowest, debu
11a10 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20  gCallback,..    
11a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11a40 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53  traceCallback, S
11a50 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
11a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11a80 20 20 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20     "Invalid {0} 
11a90 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b  boolean value: {
11aa0 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  1}",..          
11ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11ac0 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73            ForDis
11ad0 70 6c 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69  play(arg), ForDi
11ae0 73 70 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20  splay(text)),.. 
11af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11b10 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
11b20 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
11b30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11b40 20 20 20 20 20 20 69 66 20 28 73 74 72 69 63 74        if (strict
11b50 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
11b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11b70 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
11b80 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  lse;....        
11b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11ba0 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65          continue
11bb0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
11bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
11bd0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
11be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11bf0 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f  configuration.no
11c00 43 6f 6d 70 61 63 74 20 3d 20 28 62 6f 6f 6c 29  Compact = (bool)
11c10 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20  value;..        
11c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11c30 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
11c40 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20             else 
11c50 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28  if (MatchOption(
11c60 6e 65 77 41 72 67 2c 20 22 6e 6f 4e 65 74 46 78  newArg, "noNetFx
11c70 32 30 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20  20"))..         
11c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
11c90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
11ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
11cb0 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61 72 73  ol? value = Pars
11cc0 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d  eBoolean(text);.
11cd0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
11ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
11cf0 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c  f (value == null
11d00 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
11d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
11d20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
11d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11d40 20 20 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f    error = TraceO
11d50 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65  ps.DebugAndTrace
11d60 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
11d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11d80 20 20 20 20 20 20 20 54 72 61 63 65 50 72 69 6f         TracePrio
11d90 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62  rity.Lowest, deb
11da0 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20  ugCallback,..   
11db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11dd0 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20   traceCallback, 
11de0 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
11df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11e10 20 20 20 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d      "Invalid {0}
11e20 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20   boolean value: 
11e30 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  {1}",..         
11e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11e50 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69             ForDi
11e60 73 70 6c 61 79 28 61 72 67 29 2c 20 46 6f 72 44  splay(arg), ForD
11e70 69 73 70 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a  isplay(text)),..
11e80 20 20 20 20 20 20 20 20 20 20 20 20 20 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 74 72 61 63 65 43 61 74 65 67 6f 72      traceCategor
11eb0 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
11ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11ed0 20 20 20 20 20 20 20 69 66 20 28 73 74 72 69 63         if (stric
11ee0 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t)..            
11ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11f00 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
11f10 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  alse;....       
11f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11f30 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75           continu
11f40 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
11f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11f60 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
11f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11f80 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e   configuration.n
11f90 6f 4e 65 74 46 78 32 30 20 3d 20 28 62 6f 6f 6c  oNetFx20 = (bool
11fa0 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20  )value;..       
11fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11fc0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
11fd0 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65              else
11fe0 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e   if (MatchOption
11ff0 28 6e 65 77 41 72 67 2c 20 22 6e 6f 4e 65 74 46  (newArg, "noNetF
12000 78 34 30 22 29 29 0d 0a 20 20 20 20 20 20 20 20  x40"))..        
12010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12020 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
12030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
12040 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61 72  ool? value = Par
12050 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b  seBoolean(text);
12060 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
12070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12080 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c  if (value == nul
12090 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
120a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
120b0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
120c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
120d0 20 20 20 65 72 72 6f 72 20 3d 20 54 72 61 63 65     error = Trace
120e0 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63  Ops.DebugAndTrac
120f0 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
12100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12110 20 20 20 20 20 20 20 20 54 72 61 63 65 50 72 69          TracePri
12120 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65  ority.Lowest, de
12130 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20  bugCallback,..  
12140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12160 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c    traceCallback,
12170 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
12180 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
12190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
121a0 20 20 20 20 20 22 49 6e 76 61 6c 69 64 20 7b 30       "Invalid {0
121b0 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a  } boolean value:
121c0 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20   {1}",..        
121d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
121e0 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44              ForD
121f0 69 73 70 6c 61 79 28 61 72 67 29 2c 20 46 6f 72  isplay(arg), For
12200 44 69 73 70 6c 61 79 28 74 65 78 74 29 29 2c 0d  Display(text)),.
12210 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
12220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12230 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
12240 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
12250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12260 20 20 20 20 20 20 20 20 69 66 20 28 73 74 72 69          if (stri
12270 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ct)..           
12280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12290 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
122a0 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  false;....      
122b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
122c0 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e            contin
122d0 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
122e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
122f0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
12300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12310 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e    configuration.
12320 6e 6f 4e 65 74 46 78 34 30 20 3d 20 28 62 6f 6f  noNetFx40 = (boo
12330 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20  l)value;..      
12340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12350 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
12360 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73               els
12370 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f  e if (MatchOptio
12380 6e 28 6e 65 77 41 72 67 2c 20 22 6e 6f 56 73 32  n(newArg, "noVs2
12390 30 30 38 22 29 29 0d 0a 20 20 20 20 20 20 20 20  008"))..        
123a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
123b0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
123c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
123d0 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61 72  ool? value = Par
123e0 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b  seBoolean(text);
123f0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
12400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12410 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c  if (value == nul
12420 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
12430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12440 7b 0d 0a 20 20 20 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 20 20                  
12460 20 20 20 65 72 72 6f 72 20 3d 20 54 72 61 63 65     error = Trace
12470 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63  Ops.DebugAndTrac
12480 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
12490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
124a0 20 20 20 20 20 20 20 20 54 72 61 63 65 50 72 69          TracePri
124b0 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65  ority.Lowest, de
124c0 62 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20  bugCallback,..  
124d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
124e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
124f0 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c    traceCallback,
12500 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
12510 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
12520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12530 20 20 20 20 20 22 49 6e 76 61 6c 69 64 20 7b 30       "Invalid {0
12540 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a  } boolean value:
12550 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20   {1}",..        
12560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12570 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44              ForD
12580 69 73 70 6c 61 79 28 61 72 67 29 2c 20 46 6f 72  isplay(arg), For
12590 44 69 73 70 6c 61 79 28 74 65 78 74 29 29 2c 0d  Display(text)),.
125a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
125b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
125c0 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
125d0 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
125e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
125f0 20 20 20 20 20 20 20 20 69 66 20 28 73 74 72 69          if (stri
12600 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ct)..           
12610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12620 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
12630 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  false;....      
12640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12650 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e            contin
12660 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
12670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12680 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
12690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
126a0 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e    configuration.
126b0 6e 6f 56 73 32 30 30 38 20 3d 20 28 62 6f 6f 6c  noVs2008 = (bool
126c0 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20  )value;..       
126d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
126e0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
126f0 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65              else
12700 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e   if (MatchOption
12710 28 6e 65 77 41 72 67 2c 20 22 6e 6f 56 73 32 30  (newArg, "noVs20
12720 31 30 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20  10"))..         
12730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
12740 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
12750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
12760 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61 72 73  ol? value = Pars
12770 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d  eBoolean(text);.
12780 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
12790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
127a0 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c  f (value == null
127b0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
127c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
127d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
127e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
127f0 20 20 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f    error = TraceO
12800 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65  ps.DebugAndTrace
12810 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
12820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12830 20 20 20 20 20 20 20 54 72 61 63 65 50 72 69 6f         TracePrio
12840 72 69 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62  rity.Lowest, deb
12850 75 67 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20  ugCallback,..   
12860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12880 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20   traceCallback, 
12890 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
128a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
128b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
128c0 20 20 20 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d      "Invalid {0}
128d0 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20   boolean value: 
128e0 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  {1}",..         
128f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12900 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69             ForDi
12910 73 70 6c 61 79 28 61 72 67 29 2c 20 46 6f 72 44  splay(arg), ForD
12920 69 73 70 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a  isplay(text)),..
12930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12950 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72      traceCategor
12960 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
12970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12980 20 20 20 20 20 20 20 69 66 20 28 73 74 72 69 63         if (stric
12990 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t)..            
129a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
129b0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
129c0 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  alse;....       
129d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
129e0 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75           continu
129f0 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
12a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12a10 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
12a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12a30 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e   configuration.n
12a40 6f 56 73 32 30 31 30 20 3d 20 28 62 6f 6f 6c 29  oVs2010 = (bool)
12a50 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20  value;..        
12a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12a70 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
12a80 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20             else 
12a90 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28  if (MatchOption(
12aa0 6e 65 77 41 72 67 2c 20 22 6e 6f 54 72 61 63 65  newArg, "noTrace
12ab0 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  "))..           
12ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
12ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12ae0 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
12af0 3f 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65 42  ? value = ParseB
12b00 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d  oolean(text);...
12b10 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
12b20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
12b30 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d  (value == null).
12b40 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
12b50 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
12b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12b80 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73  error = TraceOps
12b90 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d  .DebugAndTrace(.
12ba0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
12bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12bc0 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69       TracePriori
12bd0 74 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75 67  ty.Lowest, debug
12be0 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20  Callback,..     
12bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
12c10 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74  raceCallback, St
12c20 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
12c30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12c50 20 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62    "Invalid {0} b
12c60 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31  oolean value: {1
12c70 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }",..           
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 20 20 46 6f 72 44 69 73 70           ForDisp
12ca0 6c 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69 73  lay(arg), ForDis
12cb0 70 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20 20  play(text)),..  
12cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12ce0 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
12cf0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
12d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12d10 20 20 20 20 20 69 66 20 28 73 74 72 69 63 74 29       if (strict)
12d20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
12d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12d40 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
12d50 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  se;....         
12d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12d70 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b         continue;
12d80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
12d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
12da0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
12db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
12dc0 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 54  onfiguration.noT
12dd0 72 61 63 65 20 3d 20 28 62 6f 6f 6c 29 76 61 6c  race = (bool)val
12de0 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
12df0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
12e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12e10 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20          else if 
12e20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77  (MatchOption(new
12e30 41 72 67 2c 20 22 6e 6f 43 6f 6e 73 6f 6c 65 22  Arg, "noConsole"
12e40 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
12e50 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
12e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12e70 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 3f             bool?
12e80 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65 42 6f   value = ParseBo
12e90 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a  olean(text);....
12ea0 20 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 20 20 20 69 66 20 28              if (
12ec0 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  value == null)..
12ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12ee0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
12ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
12f10 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e  rror = TraceOps.
12f20 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a  DebugAndTrace(..
12f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12f50 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69 74      TracePriorit
12f60 79 2e 4c 6f 77 65 73 74 2c 20 64 65 62 75 67 43  y.Lowest, debugC
12f70 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20  allback,..      
12f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
12fa0 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72  aceCallback, Str
12fb0 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
12fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12fe0 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f   "Invalid {0} bo
12ff0 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d  olean value: {1}
13000 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
13010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13020 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c          ForDispl
13030 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69 73 70  ay(arg), ForDisp
13040 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20 20 20  lay(text)),..   
13050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13070 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
13080 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
13090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
130a0 20 20 20 20 69 66 20 28 73 74 72 69 63 74 29 0d      if (strict).
130b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
130c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
130d0 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
130e0 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
130f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13100 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d        continue;.
13110 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
13120 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
13130 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
13140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
13150 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 43 6f  nfiguration.noCo
13160 6e 73 6f 6c 65 20 3d 20 28 62 6f 6f 6c 29 76 61  nsole = (bool)va
13170 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lue;..          
13180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
13190 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
131a0 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66           else if
131b0 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65   (MatchOption(ne
131c0 77 41 72 67 2c 20 22 6e 6f 4c 6f 67 22 29 29 0d  wArg, "noLog")).
131d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
131e0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
131f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13200 20 20 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76 61          bool? va
13210 6c 75 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65  lue = ParseBoole
13220 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20  an(text);....   
13230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13240 20 20 20 20 20 20 20 20 20 69 66 20 28 76 61 6c           if (val
13250 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ue == null)..   
13260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13270 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
13280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13290 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
132a0 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 44 65 62  r = TraceOps.Deb
132b0 75 67 41 6e 64 54 72 61 63 65 28 0d 0a 20 20 20  ugAndTrace(..   
132c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
132d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
132e0 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c   TracePriority.L
132f0 6f 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c 6c  owest, debugCall
13300 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20  back,..         
13310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13320 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
13330 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67  Callback, String
13340 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
13350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 49                "I
13370 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65  nvalid {0} boole
13380 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d  an value: {1}",.
13390 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
133a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
133b0 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28       ForDisplay(
133c0 61 72 67 29 2c 20 46 6f 72 44 69 73 70 6c 61 79  arg), ForDisplay
133d0 28 74 65 78 74 29 29 2c 0d 0a 20 20 20 20 20 20  (text)),..      
133e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
133f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
13400 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
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 20 20 20 20 20 20 20                  
13430 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20   if (strict)..  
13440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13460 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
13470 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
13480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13490 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20     continue;..  
134a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
134b0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
134c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
134d0 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69             confi
134e0 67 75 72 61 74 69 6f 6e 2e 6e 6f 4c 6f 67 20 3d  guration.noLog =
134f0 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20   (bool)value;.. 
13500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13510 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
13520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13530 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20    else..        
13540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13550 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
13560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
13570 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e  rror = TraceOps.
13580 44 65 62 75 67 41 6e 64 54 72 61 63 65 28 0d 0a  DebugAndTrace(..
13590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
135a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
135b0 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f  TracePriority.Lo
135c0 77 65 73 74 2c 20 64 65 62 75 67 43 61 6c 6c 62  west, debugCallb
135d0 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ack,..          
135e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
135f0 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
13600 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d  ack, String.Form
13610 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
13620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13630 20 20 20 20 20 22 55 6e 73 75 70 70 6f 72 74 65       "Unsupporte
13640 64 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 20 6f  d command line o
13650 70 74 69 6f 6e 3a 20 7b 30 7d 22 2c 0d 0a 20 20  ption: {0}",..  
13660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f                Fo
13680 72 44 69 73 70 6c 61 79 28 61 72 67 29 29 2c 20  rDisplay(arg)), 
13690 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
136a0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
136b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
136c0 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20  f (strict)..    
136d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
136e0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
136f0 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
13700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13710 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
13720 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
13730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13740 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d     return true;.
13750 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
13760 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
13770 20 20 20 20 63 61 74 63 68 20 28 45 78 63 65 70      catch (Excep
13780 74 69 6f 6e 20 65 29 0d 0a 20 20 20 20 20 20 20  tion e)..       
13790 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
137a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
137b0 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e  TraceOps.DebugAn
137c0 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69 6f  dTrace(TracePrio
137d0 72 69 74 79 2e 48 69 67 68 65 73 74 2c 0d 0a 20  rity.Highest,.. 
137e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
137f0 20 20 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c         debugCall
13800 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62  back, traceCallb
13810 61 63 6b 2c 20 65 2c 20 74 72 61 63 65 43 61 74  ack, e, traceCat
13820 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
13830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
13840 72 72 6f 72 20 3d 20 22 46 61 69 6c 65 64 20 74  rror = "Failed t
13850 6f 20 6d 6f 64 69 66 79 20 63 6f 6e 66 69 67 75  o modify configu
13860 72 61 74 69 6f 6e 2e 22 3b 0d 0a 20 20 20 20 20  ration.";..     
13870 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
13880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13890 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20  return false;.. 
138a0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
138b0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
138c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
138d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
138e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
138f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
13900 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
13910 75 62 6c 69 63 20 73 74 61 74 69 63 20 62 6f 6f  ublic static boo
13920 6c 20 50 72 6f 63 65 73 73 28 0d 0a 20 20 20 20  l Process(..    
13930 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
13940 6e 67 5b 5d 20 61 72 67 73 2c 0d 0a 20 20 20 20  ng[] args,..    
13950 20 20 20 20 20 20 20 20 20 20 20 20 43 6f 6e 66              Conf
13960 69 67 75 72 61 74 69 6f 6e 20 63 6f 6e 66 69 67  iguration config
13970 75 72 61 74 69 6f 6e 2c 0d 0a 20 20 20 20 20 20  uration,..      
13980 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 73            bool s
13990 74 72 69 63 74 2c 0d 0a 20 20 20 20 20 20 20 20  trict,..        
139a0 20 20 20 20 20 20 20 20 72 65 66 20 73 74 72 69          ref stri
139b0 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20  ng error..      
139c0 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
139d0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
139e0 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79 0d              try.
139f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
13a00 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
13a10 20 20 20 20 20 20 20 20 69 66 20 28 63 6f 6e 66          if (conf
13a20 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c  iguration == nul
13a30 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
13a40 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
13a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13a60 20 20 20 65 72 72 6f 72 20 3d 20 22 49 6e 76 61     error = "Inva
13a70 6c 69 64 20 63 6f 6e 66 69 67 75 72 61 74 69 6f  lid configuratio
13a80 6e 2e 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  n.";..          
13a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
13aa0 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
13ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13ac0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
13ad0 20 20 20 20 20 20 20 20 20 20 41 73 73 65 6d 62            Assemb
13ae0 6c 79 20 61 73 73 65 6d 62 6c 79 20 3d 20 63 6f  ly assembly = co
13af0 6e 66 69 67 75 72 61 74 69 6f 6e 2e 61 73 73 65  nfiguration.asse
13b00 6d 62 6c 79 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  mbly;....       
13b10 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
13b20 28 61 73 73 65 6d 62 6c 79 20 3d 3d 20 6e 75 6c  (assembly == nul
13b30 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
13b40 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
13b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13b60 20 20 20 65 72 72 6f 72 20 3d 20 22 49 6e 76 61     error = "Inva
13b70 6c 69 64 20 61 73 73 65 6d 62 6c 79 2e 22 3b 0d  lid assembly.";.
13b80 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
13b90 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
13ba0 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
13bb0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
13bc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
13bd0 20 20 20 20 20 69 66 20 28 21 63 6f 6e 66 69 67       if (!config
13be0 75 72 61 74 69 6f 6e 2e 6e 6f 54 72 61 63 65 29  uration.noTrace)
13bf0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
13c00 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
13c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13c20 20 69 66 20 28 21 63 6f 6e 66 69 67 75 72 61 74   if (!configurat
13c30 69 6f 6e 2e 6e 6f 4c 6f 67 20 26 26 0d 0a 20 20  ion.noLog &&..  
13c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13c50 20 20 20 20 20 20 20 20 20 20 53 74 72 69 6e 67            String
13c60 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 63  .IsNullOrEmpty(c
13c70 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6c 6f 67  onfiguration.log
13c80 46 69 6c 65 4e 61 6d 65 29 29 0d 0a 20 20 20 20  FileName))..    
13c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13ca0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
13cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13cc0 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e     configuration
13cd0 2e 6c 6f 67 46 69 6c 65 4e 61 6d 65 20 3d 20 47  .logFileName = G
13ce0 65 74 4c 6f 67 46 69 6c 65 4e 61 6d 65 28 29 3b  etLogFileName();
13cf0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
13d00 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
13d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13d20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
13d60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
13d70 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21 63            if (!c
13d80 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 43  onfiguration.noC
13d90 6f 6e 73 6f 6c 65 29 0d 0a 20 20 20 20 20 20 20  onsole)..       
13da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13db0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
13dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13dd0 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
13de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13df0 2f 2f 20 4e 4f 54 45 3a 20 49 6e 20 76 65 72 62  // NOTE: In verb
13e00 6f 73 65 20 6d 6f 64 65 2c 20 64 65 62 75 67 20  ose mode, debug 
13e10 6f 75 74 70 75 74 20 28 74 68 61 74 20 6d 65 65  output (that mee
13e20 74 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ts..            
13e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13e40 2f 2f 20 20 20 20 20 20 20 74 68 65 20 63 6f 6e  //       the con
13e50 66 69 67 75 72 65 64 20 70 72 69 6f 72 69 74 79  figured priority
13e60 20 63 72 69 74 65 72 69 61 29 20 77 69 6c 6c 20   criteria) will 
13e70 62 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  be..            
13e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13e90 2f 2f 20 20 20 20 20 20 20 64 69 73 70 6c 61 79  //       display
13ea0 65 64 20 74 6f 20 74 68 65 20 63 6f 6e 73 6f 6c  ed to the consol
13eb0 65 3b 20 6f 74 68 65 72 77 69 73 65 2c 20 74 72  e; otherwise, tr
13ec0 61 63 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ace..           
13ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13ee0 20 2f 2f 20 20 20 20 20 20 20 6f 75 74 70 75 74   //       output
13ef0 20 28 74 68 61 74 20 6d 65 65 74 73 20 74 68 65   (that meets the
13f00 20 63 6f 6e 66 69 67 75 72 65 64 20 70 72 69 6f   configured prio
13f10 72 69 74 79 0d 0a 20 20 20 20 20 20 20 20 20 20  rity..          
13f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13f30 20 20 2f 2f 20 20 20 20 20 20 20 63 72 69 74 65    //       crite
13f40 72 69 61 29 20 77 69 6c 6c 20 62 65 20 64 69 73  ria) will be dis
13f50 70 6c 61 79 65 64 20 74 6f 20 74 68 65 20 63 6f  played to the co
13f60 6e 73 6f 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20  nsole...        
13f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13f80 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
13f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13fa0 20 20 20 20 69 66 20 28 21 63 6f 6e 66 69 67 75      if (!configu
13fb0 72 61 74 69 6f 6e 2e 76 65 72 62 6f 73 65 29 0d  ration.verbose).
13fc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
13fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
13fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14000 54 72 61 63 65 2e 4c 69 73 74 65 6e 65 72 73 2e  Trace.Listeners.
14010 41 64 64 28 6e 65 77 20 43 6f 6e 73 6f 6c 65 54  Add(new ConsoleT
14020 72 61 63 65 4c 69 73 74 65 6e 65 72 28 29 29 3b  raceListener());
14030 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
14040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
14050 0a 23 69 66 20 44 45 42 55 47 0d 0a 20 20 20 20  .#if DEBUG..    
14060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14070 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20          else..  
14080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14090 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
140a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
140b0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
140c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
140d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
140e0 20 2f 2f 20 4e 4f 54 45 3a 20 46 6f 72 20 61 20   // NOTE: For a 
140f0 62 75 69 6c 64 20 77 69 74 68 20 22 44 45 42 55  build with "DEBU
14100 47 22 20 64 65 66 69 6e 65 64 2c 20 77 65 0d 0a  G" defined, we..
14110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14130 2f 2f 20 20 20 20 20 20 20 63 61 6e 20 73 69 6d  //       can sim
14140 70 6c 79 20 75 73 65 20 74 68 65 20 44 65 62 75  ply use the Debu
14150 67 20 63 6c 61 73 73 3b 0d 0a 20 20 20 20 20 20  g class;..      
14160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14170 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
14180 20 20 20 6f 74 68 65 72 77 69 73 65 2c 20 74 68     otherwise, th
14190 65 20 63 6f 6e 73 6f 6c 65 20 77 69 6c 6c 20 62  e console will b
141a0 65 20 75 73 65 64 0d 0a 20 20 20 20 20 20 20 20  e used..        
141b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
141c0 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
141d0 20 64 69 72 65 63 74 6c 79 20 28 62 79 20 44 65   directly (by De
141e0 62 75 67 43 6f 72 65 29 2e 0d 0a 20 20 20 20 20  bugCore)...     
141f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14200 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
14210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 44                 D
14230 65 62 75 67 2e 4c 69 73 74 65 6e 65 72 73 2e 41  ebug.Listeners.A
14240 64 64 28 6e 65 77 20 43 6f 6e 73 6f 6c 65 54 72  dd(new ConsoleTr
14250 61 63 65 4c 69 73 74 65 6e 65 72 28 29 29 3b 0d  aceListener());.
14260 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
14270 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
14280 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20  #endif..        
14290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
142a0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
142b0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
142c0 28 21 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e  (!configuration.
142d0 6e 6f 4c 6f 67 20 26 26 0d 0a 20 20 20 20 20 20  noLog &&..      
142e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
142f0 20 20 20 20 20 20 21 53 74 72 69 6e 67 2e 49 73        !String.Is
14300 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 63 6f 6e 66  NullOrEmpty(conf
14310 69 67 75 72 61 74 69 6f 6e 2e 6c 6f 67 46 69 6c  iguration.logFil
14320 65 4e 61 6d 65 29 29 0d 0a 20 20 20 20 20 20 20  eName))..       
14330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14340 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
14350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14360 54 72 61 63 65 2e 4c 69 73 74 65 6e 65 72 73 2e  Trace.Listeners.
14370 41 64 64 28 6e 65 77 20 54 65 78 74 57 72 69 74  Add(new TextWrit
14380 65 72 54 72 61 63 65 4c 69 73 74 65 6e 65 72 28  erTraceListener(
14390 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
143a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
143b0 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e    configuration.
143c0 6c 6f 67 46 69 6c 65 4e 61 6d 65 29 29 3b 0d 0a  logFileName));..
143d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
143e0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
143f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
14400 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
14410 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
14420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14430 2f 2f 20 4e 4f 54 45 3a 20 44 75 6d 70 20 74 68  // NOTE: Dump th
14440 65 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20  e configuration 
14450 6e 6f 77 20 69 6e 20 63 61 73 65 20 77 65 20 6e  now in case we n
14460 65 65 64 20 74 6f 0d 0a 20 20 20 20 20 20 20 20  eed to..        
14470 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
14480 20 20 20 20 20 74 72 6f 75 62 6c 65 73 68 6f 6f       troubleshoo
14490 74 20 61 6e 79 20 69 73 73 75 65 73 2e 0d 0a 20  t any issues... 
144a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
144b0 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
144c0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 63             if (c
144d0 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 64 65 62  onfiguration.deb
144e0 75 67 50 72 69 6f 72 69 74 79 20 3c 3d 20 54 72  ugPriority <= Tr
144f0 61 63 65 50 72 69 6f 72 69 74 79 2e 4d 65 64 69  acePriority.Medi
14500 75 6d 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  um)..           
14510 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
14520 66 69 67 75 72 61 74 69 6f 6e 2e 44 75 6d 70 28  figuration.Dump(
14530 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 29 3b 0d  debugCallback);.
14540 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
14550 20 20 20 20 20 20 20 69 66 20 28 63 6f 6e 66 69         if (confi
14560 67 75 72 61 74 69 6f 6e 2e 74 72 61 63 65 50 72  guration.tracePr
14570 69 6f 72 69 74 79 20 3c 3d 20 54 72 61 63 65 50  iority <= TraceP
14580 72 69 6f 72 69 74 79 2e 4d 65 64 69 75 6d 29 0d  riority.Medium).
14590 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
145a0 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75           configu
145b0 72 61 74 69 6f 6e 2e 44 75 6d 70 28 74 72 61 63  ration.Dump(trac
145c0 65 43 61 6c 6c 62 61 63 6b 29 3b 0d 0a 0d 0a 20  eCallback);.... 
145d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
145e0 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
145f0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f             // NO
14600 54 45 3a 20 53 68 6f 77 20 77 68 65 72 65 20 77  TE: Show where w
14610 65 20 61 72 65 20 72 75 6e 6e 69 6e 67 20 66 72  e are running fr
14620 6f 6d 20 61 6e 64 20 68 6f 77 20 77 65 20 77 65  om and how we we
14630 72 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  re..            
14640 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
14650 20 69 6e 76 6f 6b 65 64 2e 0d 0a 20 20 20 20 20   invoked...     
14660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
14670 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
14680 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6c 6f         string lo
14690 63 61 74 69 6f 6e 20 3d 20 61 73 73 65 6d 62 6c  cation = assembl
146a0 79 2e 4c 6f 63 61 74 69 6f 6e 3b 0d 0a 0d 0a 20  y.Location;.... 
146b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
146c0 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75     TraceOps.Debu
146d0 67 41 6e 64 54 72 61 63 65 28 54 72 61 63 65 50  gAndTrace(TraceP
146e0 72 69 6f 72 69 74 79 2e 4d 65 64 69 75 6d 2c 0d  riority.Medium,.
146f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
14700 20 20 20 20 20 20 20 20 20 64 65 62 75 67 43 61           debugCa
14710 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c  llback, traceCal
14720 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f  lback, String.Fo
14730 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
14740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
14750 52 75 6e 6e 69 6e 67 20 65 78 65 63 75 74 61 62  Running executab
14760 6c 65 20 69 73 3a 20 7b 30 7d 22 2c 20 46 6f 72  le is: {0}", For
14770 44 69 73 70 6c 61 79 28 6c 6f 63 61 74 69 6f 6e  Display(location
14780 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
14790 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
147a0 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
147b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
147c0 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62      TraceOps.Deb
147d0 75 67 41 6e 64 54 72 61 63 65 28 54 72 61 63 65  ugAndTrace(Trace
147e0 50 72 69 6f 72 69 74 79 2e 4d 65 64 69 75 6d 2c  Priority.Medium,
147f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
14800 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67 43            debugC
14810 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61  allback, traceCa
14820 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46  llback, String.F
14830 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
14840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14850 22 4f 72 69 67 69 6e 61 6c 20 63 6f 6d 6d 61 6e  "Original comman
14860 64 20 6c 69 6e 65 20 69 73 3a 20 7b 30 7d 22 2c  d line is: {0}",
14870 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
14880 20 20 20 20 20 20 20 20 20 20 45 6e 76 69 72 6f            Enviro
14890 6e 6d 65 6e 74 2e 43 6f 6d 6d 61 6e 64 4c 69 6e  nment.CommandLin
148a0 65 29 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72  e), traceCategor
148b0 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
148c0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21             if (!
148d0 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 77 68  configuration.wh
148e0 61 74 49 66 29 0d 0a 20 20 20 20 20 20 20 20 20  atIf)..         
148f0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
14900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14910 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
14920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14930 20 20 2f 2f 20 4e 4f 54 45 3a 20 49 66 20 74 68    // NOTE: If th
14940 65 20 64 65 62 75 67 67 65 72 20 69 73 20 61 74  e debugger is at
14950 74 61 63 68 65 64 20 61 6e 64 20 57 68 61 74 2d  tached and What-
14960 49 66 20 6d 6f 64 65 0d 0a 20 20 20 20 20 20 20  If mode..       
14970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14980 20 2f 2f 20 20 20 20 20 20 20 69 73 20 5b 6e 6f   //       is [no
14990 77 5d 20 64 69 73 61 62 6c 65 64 2c 20 69 73 73  w] disabled, iss
149a0 75 65 20 61 20 77 61 72 6e 69 6e 67 2e 0d 0a 20  ue a warning... 
149b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
149c0 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
149d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
149e0 20 20 20 69 66 20 28 44 65 62 75 67 67 65 72 2e     if (Debugger.
149f0 49 73 41 74 74 61 63 68 65 64 29 0d 0a 20 20 20  IsAttached)..   
14a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14a10 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70           TraceOp
14a20 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63 65 28  s.DebugAndTrace(
14a30 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4d 65  TracePriority.Me
14a40 64 69 75 6d 2c 0d 0a 20 20 20 20 20 20 20 20 20  dium,..         
14a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14a60 20 20 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c         debugCall
14a70 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62  back, traceCallb
14a80 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ack,..          
14a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14aa0 20 20 20 20 20 20 22 46 6f 72 63 65 64 20 74 6f        "Forced to
14ab0 20 64 69 73 61 62 6c 65 20 5c 22 77 68 61 74 2d   disable \"what-
14ac0 69 66 5c 22 20 6d 6f 64 65 20 77 69 74 68 20 22  if\" mode with "
14ad0 20 2b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   +..            
14ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14af0 20 20 20 20 22 64 65 62 75 67 67 65 72 20 61 74      "debugger at
14b00 74 61 63 68 65 64 2e 22 2c 20 74 72 61 63 65 43  tached.", traceC
14b10 61 74 65 67 6f 72 79 29 3b 0d 0a 20 20 20 20 20  ategory);..     
14b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
14b30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
14b40 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20        else..    
14b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14b60 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
14b70 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
14b80 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63  Ops.DebugAndTrac
14b90 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e  e(TracePriority.
14ba0 48 69 67 68 65 72 2c 0d 0a 20 20 20 20 20 20 20  Higher,..       
14bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14bc0 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61       debugCallba
14bd0 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63  ck, traceCallbac
14be0 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  k,..            
14bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14c00 22 4e 6f 20 61 63 74 75 61 6c 20 63 68 61 6e 67  "No actual chang
14c10 65 73 20 77 69 6c 6c 20 62 65 20 6d 61 64 65 20  es will be made 
14c20 74 6f 20 74 68 69 73 20 22 20 2b 0d 0a 20 20 20  to this " +..   
14c30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14c40 20 20 20 20 20 20 20 20 20 22 73 79 73 74 65 6d           "system
14c50 20 62 65 63 61 75 73 65 20 5c 22 77 68 61 74 2d   because \"what-
14c60 69 66 5c 22 20 6d 6f 64 65 20 69 73 20 65 6e 61  if\" mode is ena
14c70 62 6c 65 64 2e 22 2c 0d 0a 20 20 20 20 20 20 20  bled.",..       
14c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14c90 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
14ca0 72 79 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ry);..          
14cb0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
14cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14cd0 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
14ce0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f             // NO
14cf0 54 45 3a 20 49 66 20 74 68 65 20 63 6f 6d 6d 61  TE: If the comma
14d00 6e 64 20 6c 69 6e 65 20 68 61 73 20 6e 6f 74 20  nd line has not 
14d10 62 65 65 6e 20 6d 61 6e 75 61 6c 6c 79 0d 0a 20  been manually.. 
14d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14d30 20 20 20 2f 2f 20 20 20 20 20 20 20 63 6f 6e 66     //       conf
14d40 69 72 6d 65 64 20 28 69 2e 65 2e 20 76 69 61 20  irmed (i.e. via 
14d50 74 68 65 20 65 78 70 6c 69 63 69 74 20 63 6f 6d  the explicit com
14d60 6d 61 6e 64 20 6c 69 6e 65 0d 0a 20 20 20 20 20  mand line..     
14d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
14d80 2f 20 20 20 20 20 20 20 6f 70 74 69 6f 6e 29 2c  /       option),
14d90 20 74 68 65 6e 20 73 74 6f 70 20 70 72 6f 63 65   then stop proce
14da0 73 73 69 6e 67 20 6e 6f 77 2e 20 20 57 65 20 65  ssing now.  We e
14db0 6e 66 6f 72 63 65 0d 0a 20 20 20 20 20 20 20 20  nforce..        
14dc0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
14dd0 20 20 20 20 20 74 68 69 73 20 72 75 6c 65 20 73       this rule s
14de0 6f 20 74 68 61 74 20 73 69 6d 70 6c 79 20 64 6f  o that simply do
14df0 75 62 6c 65 2d 63 6c 69 63 6b 69 6e 67 20 74 68  uble-clicking th
14e00 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
14e10 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
14e20 65 78 65 63 75 74 61 62 6c 65 20 77 69 6c 6c 20  executable will 
14e30 6e 6f 74 20 72 65 73 75 6c 74 20 69 6e 20 61 6e  not result in an
14e40 79 20 63 68 61 6e 67 65 73 20 62 65 69 6e 67 0d  y changes being.
14e50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
14e60 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6d 61       //       ma
14e70 64 65 20 74 6f 20 74 68 65 20 73 79 73 74 65 6d  de to the system
14e80 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
14e90 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
14ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
14eb0 66 20 28 21 63 6f 6e 66 69 67 75 72 61 74 69 6f  f (!configuratio
14ec0 6e 2e 63 6f 6e 66 69 72 6d 29 0d 0a 20 20 20 20  n.confirm)..    
14ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14ee0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
14ef0 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
14f00 20 3d 20 22 43 61 6e 6e 6f 74 20 63 6f 6e 74 69   = "Cannot conti
14f10 6e 75 65 2c 20 74 68 65 20 5c 22 63 6f 6e 66 69  nue, the \"confi
14f20 72 6d 5c 22 20 6f 70 74 69 6f 6e 20 69 73 20 22  rm\" option is "
14f30 20 2b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   +..            
14f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14f50 22 6e 6f 74 20 65 6e 61 62 6c 65 64 2e 22 3b 0d  "not enabled.";.
14f60 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
14f70 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
14f80 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
14f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
14fa0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
14fb0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72         return tr
14fc0 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
14fd0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
14fe0 20 20 20 20 20 20 20 20 63 61 74 63 68 20 28 45          catch (E
14ff0 78 63 65 70 74 69 6f 6e 20 65 29 0d 0a 20 20 20  xception e)..   
15000 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
15010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15020 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62      TraceOps.Deb
15030 75 67 41 6e 64 54 72 61 63 65 28 54 72 61 63 65  ugAndTrace(Trace
15040 50 72 69 6f 72 69 74 79 2e 48 69 67 68 65 73 74  Priority.Highest
15050 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
15060 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67             debug
15070 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43  Callback, traceC
15080 61 6c 6c 62 61 63 6b 2c 20 65 2c 20 74 72 61 63  allback, e, trac
15090 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
150a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
150b0 20 20 20 65 72 72 6f 72 20 3d 20 22 46 61 69 6c     error = "Fail
150c0 65 64 20 74 6f 20 70 72 6f 63 65 73 73 20 63 6f  ed to process co
150d0 6e 66 69 67 75 72 61 74 69 6f 6e 2e 22 3b 0d 0a  nfiguration.";..
150e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
150f0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
15100 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
15110 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
15120 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
15130 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
15140 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15150 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15160 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15170 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
15180 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69      public stati
15190 63 20 62 6f 6f 6c 20 43 68 65 63 6b 52 75 6e 74  c bool CheckRunt
151a0 69 6d 65 56 65 72 73 69 6f 6e 28 0d 0a 20 20 20  imeVersion(..   
151b0 20 20 20 20 20 20 20 20 20 20 20 20 20 43 6f 6e               Con
151c0 66 69 67 75 72 61 74 69 6f 6e 20 63 6f 6e 66 69  figuration confi
151d0 67 75 72 61 74 69 6f 6e 2c 0d 0a 20 20 20 20 20  guration,..     
151e0 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
151f0 73 74 72 69 63 74 2c 0d 0a 20 20 20 20 20 20 20  strict,..       
15200 20 20 20 20 20 20 20 20 20 72 65 66 20 73 74 72           ref str
15210 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20 20 20  ing error..     
15220 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
15230 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
15240 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79               try
15250 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
15260 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
15270 20 20 20 20 20 20 20 20 20 69 66 20 28 63 6f 6e           if (con
15280 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20 6e 75  figuration == nu
15290 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
152a0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
152b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
152c0 20 20 20 20 65 72 72 6f 72 20 3d 20 22 49 6e 76      error = "Inv
152d0 61 6c 69 64 20 63 6f 6e 66 69 67 75 72 61 74 69  alid configurati
152e0 6f 6e 2e 22 3b 0d 0a 20 20 20 20 20 20 20 20 20  on.";..         
152f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
15300 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
15310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15320 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
15330 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
15340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15350 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 57 68 61 74     // NOTE: What
15360 20 76 65 72 73 69 6f 6e 20 6f 66 20 74 68 65 20   version of the 
15370 72 75 6e 74 69 6d 65 20 77 61 73 20 74 68 65 20  runtime was the 
15380 63 6f 72 65 20 28 70 72 69 6d 61 72 79 29 0d 0a  core (primary)..
15390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
153a0 20 20 20 20 2f 2f 20 20 20 20 20 20 20 61 73 73      //       ass
153b0 65 6d 62 6c 79 20 63 6f 6d 70 69 6c 65 64 20 61  embly compiled a
153c0 67 61 69 6e 73 74 20 28 65 2e 67 2e 20 22 76 32  gainst (e.g. "v2
153d0 2e 30 2e 35 30 37 32 37 22 20 6f 72 0d 0a 20 20  .0.50727" or..  
153e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
153f0 20 20 2f 2f 20 20 20 20 20 20 20 22 76 34 2e 30    //       "v4.0
15400 2e 33 30 33 31 39 22 29 2e 0d 0a 20 20 20 20 20  .30319")...     
15410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
15420 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
15430 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 63 6f         string co
15440 72 65 49 6d 61 67 65 52 75 6e 74 69 6d 65 56 65  reImageRuntimeVe
15450 72 73 69 6f 6e 20 3d 20 47 65 74 49 6d 61 67 65  rsion = GetImage
15460 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 28 0d  RuntimeVersion(.
15470 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
15480 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75           configu
15490 72 61 74 69 6f 6e 2e 63 6f 72 65 46 69 6c 65 4e  ration.coreFileN
154a0 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ame);....       
154b0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
154c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
154d0 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 57 65       // NOTE: We
154e0 20 61 6c 6c 6f 77 20 74 68 65 20 61 63 74 75 61   allow the actua
154f0 6c 20 69 6d 61 67 65 20 72 75 6e 74 69 6d 65 20  l image runtime 
15500 63 68 65 63 6b 69 6e 67 20 74 6f 20 62 65 0d 0a  checking to be..
15510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15520 20 20 20 20 2f 2f 20 20 20 20 20 20 20 62 79 70      //       byp
15530 61 73 73 65 64 20 76 69 61 20 74 68 65 20 22 2d  assed via the "-
15540 6e 6f 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e  noRuntimeVersion
15550 22 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 0d 0a  " command line..
15560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15570 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6f 70 74      //       opt
15580 69 6f 6e 2e 20 20 54 68 65 20 63 6f 6d 6d 61 6e  ion.  The comman
15590 64 20 6c 69 6e 65 20 6f 70 74 69 6f 6e 20 69 73  d line option is
155a0 20 69 6e 74 65 6e 64 65 64 20 66 6f 72 0d 0a 20   intended for.. 
155b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
155c0 20 20 20 2f 2f 20 20 20 20 20 20 20 65 78 70 65     //       expe
155d0 72 74 20 75 73 65 20 6f 6e 6c 79 2e 0d 0a 20 20  rt use only...  
155e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
155f0 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
15600 20 20 20 20 20 20 20 20 20 20 69 66 20 28 63 6f            if (co
15610 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 52 75  nfiguration.noRu
15620 6e 74 69 6d 65 56 65 72 73 69 6f 6e 29 0d 0a 20  ntimeVersion).. 
15630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15640 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
15650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
15660 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54  aceOps.DebugAndT
15670 72 61 63 65 28 54 72 61 63 65 50 72 69 6f 72 69  race(TracePriori
15680 74 79 2e 4d 65 64 69 75 6d 2c 0d 0a 20 20 20 20  ty.Medium,..    
15690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
156a0 20 20 20 20 20 20 20 20 64 65 62 75 67 43 61 6c          debugCal
156b0 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c  lback, traceCall
156c0 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72  back, String.For
156d0 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
156e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
156f0 20 20 22 41 73 73 65 6d 62 6c 79 20 69 73 20 63    "Assembly is c
15700 6f 6d 70 69 6c 65 64 20 66 6f 72 20 74 68 65 20  ompiled for the 
15710 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b 20 7b  .NET Framework {
15720 30 7d 3b 20 22 20 2b 0d 0a 20 20 20 20 20 20 20  0}; " +..       
15730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15740 20 20 20 20 20 22 68 6f 77 65 76 65 72 2c 20 69       "however, i
15750 6e 73 74 61 6c 6c 61 74 69 6f 6e 20 72 65 73 74  nstallation rest
15760 72 69 63 74 69 6f 6e 73 20 62 61 73 65 64 20 6f  rictions based o
15770 6e 20 74 68 69 73 20 22 20 2b 0d 0a 20 20 20 20  n this " +..    
15780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15790 20 20 20 20 20 20 20 20 22 66 61 63 74 20 68 61          "fact ha
157a0 76 65 20 62 65 65 6e 20 64 69 73 61 62 6c 65 64  ve been disabled
157b0 20 76 69 61 20 74 68 65 20 63 6f 6d 6d 61 6e 64   via the command
157c0 20 6c 69 6e 65 2e 22 2c 0d 0a 20 20 20 20 20 20   line.",..      
157d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
157e0 20 20 20 20 20 20 63 6f 72 65 49 6d 61 67 65 52        coreImageR
157f0 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 29 2c 20  untimeVersion), 
15800 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
15810 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
15820 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
15830 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20  n true;..       
15840 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
15850 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
15860 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
15870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
15880 20 54 4f 44 4f 3a 20 52 65 73 74 72 69 63 74 20   TODO: Restrict 
15890 74 68 65 20 63 6f 6e 66 69 67 75 72 61 74 69 6f  the configuratio
158a0 6e 20 62 61 73 65 64 20 6f 6e 20 77 68 69 63 68  n based on which
158b0 20 69 6d 61 67 65 0d 0a 20 20 20 20 20 20 20 20   image..        
158c0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
158d0 20 20 20 20 20 72 75 6e 74 69 6d 65 20 76 65 72       runtime ver
158e0 73 69 6f 6e 73 20 28 77 68 69 63 68 20 6d 6f 72  sions (which mor
158f0 65 2d 6f 72 2d 6c 65 73 73 20 63 6f 72 72 65 73  e-or-less corres
15900 70 6f 6e 64 0d 0a 20 20 20 20 20 20 20 20 20 20  pond..          
15910 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
15920 20 20 20 74 6f 20 2e 4e 45 54 20 46 72 61 6d 65     to .NET Frame
15930 77 6f 72 6b 20 76 65 72 73 69 6f 6e 73 29 20 61  work versions) a
15940 72 65 20 73 75 70 70 6f 72 74 65 64 20 62 79 20  re supported by 
15950 74 68 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  the..           
15960 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
15970 20 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 56 69    versions of Vi
15980 73 75 61 6c 20 53 74 75 64 69 6f 20 74 68 61 74  sual Studio that
15990 20 61 72 65 20 69 6e 73 74 61 6c 6c 65 64 2e 0d   are installed..
159a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
159b0 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
159c0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
159d0 28 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72  (String.IsNullOr
159e0 45 6d 70 74 79 28 63 6f 72 65 49 6d 61 67 65 52  Empty(coreImageR
159f0 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 29 29 0d  untimeVersion)).
15a00 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
15a10 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
15a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15a30 65 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64  error = "invalid
15a40 20 63 6f 72 65 20 66 69 6c 65 20 69 6d 61 67 65   core file image
15a50 20 72 75 6e 74 69 6d 65 20 76 65 72 73 69 6f 6e   runtime version
15a60 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ";..            
15a70 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
15a80 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
15a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
15aa0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
15ab0 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 53        else if (S
15ac0 74 72 69 6e 67 2e 45 71 75 61 6c 73 28 0d 0a 20  tring.Equals(.. 
15ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15ae0 20 20 20 20 20 20 20 20 20 20 20 63 6f 72 65 49             coreI
15af0 6d 61 67 65 52 75 6e 74 69 6d 65 56 65 72 73 69  mageRuntimeVersi
15b00 6f 6e 2c 20 43 4c 52 76 32 49 6d 61 67 65 52 75  on, CLRv2ImageRu
15b10 6e 74 69 6d 65 56 65 72 73 69 6f 6e 2c 0d 0a 20  ntimeVersion,.. 
15b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15b30 20 20 20 20 20 20 20 20 20 20 20 53 74 72 69 6e             Strin
15b40 67 43 6f 6d 70 61 72 69 73 6f 6e 2e 49 6e 76 61  gComparison.Inva
15b50 72 69 61 6e 74 43 75 6c 74 75 72 65 29 29 0d 0a  riantCulture))..
15b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15b70 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
15b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
15b90 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
15ba0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f             // NO
15bb0 54 45 3a 20 46 6f 72 20 74 68 65 20 43 4c 52 20  TE: For the CLR 
15bc0 76 32 2e 30 20 72 75 6e 74 69 6d 65 2c 20 6d 61  v2.0 runtime, ma
15bd0 6b 65 20 73 75 72 65 20 77 65 20 64 69 73 61 62  ke sure we disab
15be0 6c 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  le..            
15bf0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
15c00 20 20 20 20 20 61 6e 79 20 61 74 74 65 6d 70 74       any attempt
15c10 20 74 6f 20 75 73 65 20 69 74 20 66 6f 72 20 74   to use it for t
15c20 68 69 6e 67 73 20 74 68 61 74 20 72 65 71 75 69  hings that requi
15c30 72 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  re..            
15c40 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
15c50 20 20 20 20 20 61 6e 20 61 73 73 65 6d 62 6c 79       an assembly
15c60 20 63 6f 6d 70 69 6c 65 64 20 66 6f 72 20 74 68   compiled for th
15c70 65 20 43 4c 52 20 76 34 2e 30 2e 20 20 49 74 20  e CLR v4.0.  It 
15c80 69 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  is..            
15c90 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
15ca0 20 20 20 20 20 75 6e 63 65 72 74 61 69 6e 20 69       uncertain i
15cb0 66 20 74 68 69 73 20 69 73 20 61 63 74 75 61 6c  f this is actual
15cc0 6c 79 20 61 20 70 72 6f 62 6c 65 6d 20 69 6e 0d  ly a problem in.
15cd0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
15ce0 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
15cf0 20 20 70 72 61 63 74 69 63 65 20 61 73 20 74 68    practice as th
15d00 65 20 43 4c 52 20 76 34 2e 30 20 63 61 6e 20 6c  e CLR v4.0 can l
15d10 6f 61 64 20 61 6e 64 20 75 73 65 20 61 6e 0d 0a  oad and use an..
15d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15d30 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
15d40 20 61 73 73 65 6d 62 6c 79 20 63 6f 6d 70 69 6c   assembly compil
15d50 65 64 20 77 69 74 68 20 74 68 65 20 43 4c 52 20  ed with the CLR 
15d60 76 32 2e 30 3b 20 68 6f 77 65 76 65 72 2c 0d 0a  v2.0; however,..
15d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15d80 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
15d90 20 73 69 6e 63 65 20 74 68 69 73 20 70 72 6f 6a   since this proj
15da0 65 63 74 20 6f 66 66 65 72 73 20 62 6f 74 68 20  ect offers both 
15db0 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 73 2c 0d  configurations,.
15dc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
15dd0 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
15de0 20 20 77 65 20 63 75 72 72 65 6e 74 6c 79 20 64    we currently d
15df0 69 73 61 6c 6c 6f 77 20 74 68 69 73 20 6d 69 73  isallow this mis
15e00 6d 61 74 63 68 2e 0d 0a 20 20 20 20 20 20 20 20  match...        
15e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15e20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
15e30 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66              conf
15e40 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 4e 65 74 46  iguration.noNetF
15e50 78 34 30 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20  x40 = true;..   
15e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15e70 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69       configurati
15e80 6f 6e 2e 6e 6f 56 73 32 30 31 30 20 3d 20 74 72  on.noVs2010 = tr
15e90 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ue;....         
15ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
15eb0 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64  raceOps.DebugAnd
15ec0 54 72 61 63 65 28 54 72 61 63 65 50 72 69 6f 72  Trace(TracePrior
15ed0 69 74 79 2e 4d 65 64 69 75 6d 2c 0d 0a 20 20 20  ity.Medium,..   
15ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15ef0 20 20 20 20 20 20 20 20 20 64 65 62 75 67 43 61           debugCa
15f00 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c  llback, traceCal
15f10 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f  lback, String.Fo
15f20 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
15f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15f40 20 20 20 22 41 73 73 65 6d 62 6c 79 20 69 73 20     "Assembly is 
15f50 63 6f 6d 70 69 6c 65 64 20 66 6f 72 20 74 68 65  compiled for the
15f60 20 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b 20   .NET Framework 
15f70 7b 30 7d 2c 20 22 20 2b 0d 0a 20 20 20 20 20 20  {0}, " +..      
15f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15f90 20 20 20 20 20 20 22 73 75 70 70 6f 72 74 20 66        "support f
15fa0 6f 72 20 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72  or .NET Framewor
15fb0 6b 20 7b 31 7d 20 69 73 20 6e 6f 77 20 64 69 73  k {1} is now dis
15fc0 61 62 6c 65 64 2e 22 2c 0d 0a 20 20 20 20 20 20  abled.",..      
15fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15fe0 20 20 20 20 20 20 43 4c 52 76 32 49 6d 61 67 65        CLRv2Image
15ff0 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 2c 20  RuntimeVersion, 
16000 43 4c 52 76 34 49 6d 61 67 65 52 75 6e 74 69 6d  CLRv4ImageRuntim
16010 65 56 65 72 73 69 6f 6e 29 2c 0d 0a 20 20 20 20  eVersion),..    
16020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16030 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74          traceCat
16040 65 67 6f 72 79 29 3b 0d 0a 20 20 20 20 20 20 20  egory);..       
16050 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
16060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16070 20 20 20 20 65 6c 73 65 20 69 66 20 28 53 74 72      else if (Str
16080 69 6e 67 2e 45 71 75 61 6c 73 28 0d 0a 20 20 20  ing.Equals(..   
16090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
160a0 20 20 20 20 20 20 20 20 20 63 6f 72 65 49 6d 61           coreIma
160b0 67 65 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e  geRuntimeVersion
160c0 2c 20 43 4c 52 76 34 49 6d 61 67 65 52 75 6e 74  , CLRv4ImageRunt
160d0 69 6d 65 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20  imeVersion,..   
160e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
160f0 20 20 20 20 20 20 20 20 20 53 74 72 69 6e 67 43           StringC
16100 6f 6d 70 61 72 69 73 6f 6e 2e 49 6e 76 61 72 69  omparison.Invari
16110 61 6e 74 43 75 6c 74 75 72 65 29 29 0d 0a 20 20  antCulture))..  
16120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16130 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
16140 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
16150 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
16160 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45           // NOTE
16170 3a 20 46 6f 72 20 74 68 65 20 43 4c 52 20 76 34  : For the CLR v4
16180 2e 30 20 72 75 6e 74 69 6d 65 2c 20 6d 61 6b 65  .0 runtime, make
16190 20 73 75 72 65 20 77 65 20 64 69 73 61 62 6c 65   sure we disable
161a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
161b0 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
161c0 20 20 20 61 6e 79 20 61 74 74 65 6d 70 74 20 74     any attempt t
161d0 6f 20 75 73 65 20 69 74 20 66 6f 72 20 74 68 69  o use it for thi
161e0 6e 67 73 20 74 68 61 74 20 72 65 71 75 69 72 65  ngs that require
161f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
16200 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
16210 20 20 20 61 6e 20 61 73 73 65 6d 62 6c 79 20 63     an assembly c
16220 6f 6d 70 69 6c 65 64 20 66 6f 72 20 74 68 65 20  ompiled for the 
16230 43 4c 52 20 76 32 2e 30 2e 0d 0a 20 20 20 20 20  CLR v2.0...     
16240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16250 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
16260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
16270 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 4e  onfiguration.noN
16280 65 74 46 78 32 30 20 3d 20 74 72 75 65 3b 0d 0a  etFx20 = true;..
16290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
162a0 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72          configur
162b0 61 74 69 6f 6e 2e 6e 6f 56 73 32 30 30 38 20 3d  ation.noVs2008 =
162c0 20 74 72 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20   true;....      
162d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
162e0 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67    TraceOps.Debug
162f0 41 6e 64 54 72 61 63 65 28 54 72 61 63 65 50 72  AndTrace(TracePr
16300 69 6f 72 69 74 79 2e 4d 65 64 69 75 6d 2c 0d 0a  iority.Medium,..
16310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16320 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75              debu
16330 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65  gCallback, trace
16340 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67  Callback, String
16350 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
16360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16370 20 20 20 20 20 20 22 41 73 73 65 6d 62 6c 79 20        "Assembly 
16380 69 73 20 63 6f 6d 70 69 6c 65 64 20 66 6f 72 20  is compiled for 
16390 74 68 65 20 2e 4e 45 54 20 46 72 61 6d 65 77 6f  the .NET Framewo
163a0 72 6b 20 7b 30 7d 2c 20 22 20 2b 0d 0a 20 20 20  rk {0}, " +..   
163b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
163c0 20 20 20 20 20 20 20 20 20 22 73 75 70 70 6f 72           "suppor
163d0 74 20 66 6f 72 20 2e 4e 45 54 20 46 72 61 6d 65  t for .NET Frame
163e0 77 6f 72 6b 20 7b 31 7d 20 69 73 20 6e 6f 77 20  work {1} is now 
163f0 64 69 73 61 62 6c 65 64 2e 22 2c 0d 0a 20 20 20  disabled.",..   
16400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16410 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70           ForDisp
16420 6c 61 79 28 43 4c 52 76 34 49 6d 61 67 65 52 75  lay(CLRv4ImageRu
16430 6e 74 69 6d 65 56 65 72 73 69 6f 6e 29 2c 0d 0a  ntimeVersion),..
16440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16450 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44              ForD
16460 69 73 70 6c 61 79 28 43 4c 52 76 32 49 6d 61 67  isplay(CLRv2Imag
16470 65 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 29  eRuntimeVersion)
16480 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
16490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
164a0 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
164b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
164c0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
164d0 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65              else
164e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
164f0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
16500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16510 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e   error = String.
16520 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
16530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16540 20 20 20 20 20 22 75 6e 73 75 70 70 6f 72 74 65       "unsupporte
16550 64 20 63 6f 72 65 20 66 69 6c 65 20 69 6d 61 67  d core file imag
16560 65 20 72 75 6e 74 69 6d 65 20 76 65 72 73 69 6f  e runtime versio
16570 6e 20 22 20 2b 0d 0a 20 20 20 20 20 20 20 20 20  n " +..         
16580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16590 20 20 20 22 7b 30 7d 2c 20 6d 75 73 74 20 62 65     "{0}, must be
165a0 20 7b 31 7d 20 6f 72 20 7b 32 7d 22 2c 0d 0a 20   {1} or {2}",.. 
165b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
165c0 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69             ForDi
165d0 73 70 6c 61 79 28 63 6f 72 65 49 6d 61 67 65 52  splay(coreImageR
165e0 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 29 2c 0d  untimeVersion),.
165f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
16600 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72               For
16610 44 69 73 70 6c 61 79 28 43 4c 52 76 32 49 6d 61  Display(CLRv2Ima
16620 67 65 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e  geRuntimeVersion
16630 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
16640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16650 46 6f 72 44 69 73 70 6c 61 79 28 43 4c 52 76 34  ForDisplay(CLRv4
16660 49 6d 61 67 65 52 75 6e 74 69 6d 65 56 65 72 73  ImageRuntimeVers
16670 69 6f 6e 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ion));....      
16680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16690 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
166a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
166b0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
166c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
166d0 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20  turn true;..    
166e0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
166f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
16700 61 74 63 68 20 28 45 78 63 65 70 74 69 6f 6e 20  atch (Exception 
16710 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e)..            
16720 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
16730 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
16740 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63  Ops.DebugAndTrac
16750 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e  e(TracePriority.
16760 48 69 67 68 65 73 74 2c 0d 0a 20 20 20 20 20 20  Highest,..      
16770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16780 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c    debugCallback,
16790 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20   traceCallback, 
167a0 65 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72 79  e, traceCategory
167b0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
167c0 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
167d0 3d 20 22 46 61 69 6c 65 64 20 74 6f 20 63 68 65  = "Failed to che
167e0 63 6b 20 69 6d 61 67 65 20 72 75 6e 74 69 6d 65  ck image runtime
167f0 20 76 65 72 73 69 6f 6e 2e 22 3b 0d 0a 20 20 20   version.";..   
16800 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
16810 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
16820 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
16830 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
16840 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64              #end
16850 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
16860 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
16870 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16880 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16890 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
168a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
168b0 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e           #region
168c0 20 50 75 62 6c 69 63 20 4d 65 74 68 6f 64 73 0d   Public Methods.
168d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
168e0 6c 69 63 20 62 6f 6f 6c 20 48 61 73 46 6c 61 67  lic bool HasFlag
168f0 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s(..            
16900 20 20 20 20 49 6e 73 74 61 6c 6c 46 6c 61 67 73      InstallFlags
16910 20 68 61 73 46 6c 61 67 73 2c 0d 0a 20 20 20 20   hasFlags,..    
16920 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
16930 20 61 6c 6c 0d 0a 20 20 20 20 20 20 20 20 20 20   all..          
16940 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
16950 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
16960 20 20 20 20 20 20 20 20 69 66 20 28 61 6c 6c 29          if (all)
16970 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
16980 20 20 20 20 20 20 72 65 74 75 72 6e 20 28 28 69        return ((i
16990 6e 73 74 61 6c 6c 46 6c 61 67 73 20 26 20 68 61  nstallFlags & ha
169a0 73 46 6c 61 67 73 29 20 3d 3d 20 68 61 73 46 6c  sFlags) == hasFl
169b0 61 67 73 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ags);..         
169c0 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20         else..   
169d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
169e0 20 72 65 74 75 72 6e 20 28 28 69 6e 73 74 61 6c   return ((instal
169f0 6c 46 6c 61 67 73 20 26 20 68 61 73 46 6c 61 67  lFlags & hasFlag
16a00 73 29 20 21 3d 20 49 6e 73 74 61 6c 6c 46 6c 61  s) != InstallFla
16a10 67 73 2e 4e 6f 6e 65 29 3b 0d 0a 20 20 20 20 20  gs.None);..     
16a20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
16a30 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
16a40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16a50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16a60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16a70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
16a80 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
16a90 63 20 76 6f 69 64 20 44 75 6d 70 28 0d 0a 20 20  c void Dump(..  
16aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
16ab0 61 63 65 43 61 6c 6c 62 61 63 6b 20 74 72 61 63  aceCallback trac
16ac0 65 43 61 6c 6c 62 61 63 6b 0d 0a 20 20 20 20 20  eCallback..     
16ad0 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
16ae0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
16af0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
16b00 28 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 20 21  (traceCallback !
16b10 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
16b20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
16b30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16b40 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74  traceCallback(St
16b50 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65  ring.Format(Name
16b60 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d  AndValueFormat,.
16b70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
16b80 20 20 20 20 20 20 20 20 20 22 41 73 73 65 6d 62           "Assemb
16b90 6c 79 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  ly", ForDisplay(
16ba0 61 73 73 65 6d 62 6c 79 29 29 2c 0d 0a 20 20 20  assembly)),..   
16bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16bc0 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
16bd0 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
16be0 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
16bf0 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67  eCallback(String
16c00 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56  .Format(NameAndV
16c10 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20  alueFormat,..   
16c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16c30 20 20 20 20 20 22 4c 6f 67 46 69 6c 65 4e 61 6d       "LogFileNam
16c40 65 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 6c  e", ForDisplay(l
16c50 6f 67 46 69 6c 65 4e 61 6d 65 29 29 2c 0d 0a 20  ogFileName)),.. 
16c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16c70 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
16c80 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
16c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
16ca0 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69  aceCallback(Stri
16cb0 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e  ng.Format(NameAn
16cc0 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20  dValueFormat,.. 
16cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16ce0 20 20 20 20 20 20 20 22 44 69 72 65 63 74 6f 72         "Director
16cf0 79 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 64  y", ForDisplay(d
16d00 69 72 65 63 74 6f 72 79 29 29 2c 0d 0a 20 20 20  irectory)),..   
16d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16d20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
16d30 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
16d40 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
16d50 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67  eCallback(String
16d60 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56  .Format(NameAndV
16d70 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20  alueFormat,..   
16d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16d90 20 20 20 20 20 22 43 6f 72 65 46 69 6c 65 4e 61       "CoreFileNa
16da0 6d 65 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  me", ForDisplay(
16db0 63 6f 72 65 46 69 6c 65 4e 61 6d 65 29 29 2c 0d  coreFileName)),.
16dc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
16dd0 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
16de0 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
16df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16e00 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74  traceCallback(St
16e10 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65  ring.Format(Name
16e20 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d  AndValueFormat,.
16e30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
16e40 20 20 20 20 20 20 20 20 20 22 4c 69 6e 71 46 69           "LinqFi
16e50 6c 65 4e 61 6d 65 22 2c 20 46 6f 72 44 69 73 70  leName", ForDisp
16e60 6c 61 79 28 6c 69 6e 71 46 69 6c 65 4e 61 6d 65  lay(linqFileName
16e70 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
16e80 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
16e90 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
16ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16eb0 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63      traceCallbac
16ec0 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  k(String.Format(
16ed0 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d  NameAndValueForm
16ee0 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at,..           
16ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 44 65               "De
16f00 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 22 2c  signerFileName",
16f10 20 46 6f 72 44 69 73 70 6c 61 79 28 64 65 73 69   ForDisplay(desi
16f20 67 6e 65 72 46 69 6c 65 4e 61 6d 65 29 29 2c 0d  gnerFileName)),.
16f30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
16f40 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
16f50 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
16f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16f70 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74  traceCallback(St
16f80 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65  ring.Format(Name
16f90 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d  AndValueFormat,.
16fa0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
16fb0 20 20 20 20 20 20 20 20 20 22 44 65 62 75 67 46           "DebugF
16fc0 6f 72 6d 61 74 22 2c 20 46 6f 72 44 69 73 70 6c  ormat", ForDispl
16fd0 61 79 28 64 65 62 75 67 46 6f 72 6d 61 74 29 29  ay(debugFormat))
16fe0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
16ff0 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
17000 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
17010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17020 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28    traceCallback(
17030 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61  String.Format(Na
17040 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74  meAndValueFormat
17050 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
17060 20 20 20 20 20 20 20 20 20 20 20 22 54 72 61 63             "Trac
17070 65 46 6f 72 6d 61 74 22 2c 20 46 6f 72 44 69 73  eFormat", ForDis
17080 70 6c 61 79 28 74 72 61 63 65 46 6f 72 6d 61 74  play(traceFormat
17090 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
170a0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
170b0 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
170c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
170d0 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63      traceCallbac
170e0 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  k(String.Format(
170f0 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d  NameAndValueForm
17100 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at,..           
17110 20 20 20 20 20 20 20 20 20 20 20 20 20 22 49 6e               "In
17120 73 74 61 6c 6c 46 6c 61 67 73 22 2c 20 46 6f 72  stallFlags", For
17130 44 69 73 70 6c 61 79 28 69 6e 73 74 61 6c 6c 46  Display(installF
17140 6c 61 67 73 29 29 2c 0d 0a 20 20 20 20 20 20 20  lags)),..       
17150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17160 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
17170 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
17180 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c          traceCal
17190 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72  lback(String.For
171a0 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65  mat(NameAndValue
171b0 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20  Format,..       
171c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
171d0 20 22 44 65 62 75 67 50 72 69 6f 72 69 74 79 22   "DebugPriority"
171e0 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 64 65 62  , ForDisplay(deb
171f0 75 67 50 72 69 6f 72 69 74 79 29 29 2c 0d 0a 20  ugPriority)),.. 
17200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17210 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
17220 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
17230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
17240 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69  aceCallback(Stri
17250 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e  ng.Format(NameAn
17260 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20  dValueFormat,.. 
17270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17280 20 20 20 20 20 20 20 22 54 72 61 63 65 50 72 69         "TracePri
17290 6f 72 69 74 79 22 2c 20 46 6f 72 44 69 73 70 6c  ority", ForDispl
172a0 61 79 28 74 72 61 63 65 50 72 69 6f 72 69 74 79  ay(tracePriority
172b0 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
172c0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
172d0 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
172e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
172f0 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63      traceCallbac
17300 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  k(String.Format(
17310 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d  NameAndValueForm
17320 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at,..           
17330 20 20 20 20 20 20 20 20 20 20 20 20 20 22 49 6e               "In
17340 73 74 61 6c 6c 22 2c 20 46 6f 72 44 69 73 70 6c  stall", ForDispl
17350 61 79 28 69 6e 73 74 61 6c 6c 29 29 2c 0d 0a 20  ay(install)),.. 
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 74 72 61 63 65 43 61 74 65         traceCate
17380 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
17390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
173a0 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69  aceCallback(Stri
173b0 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e  ng.Format(NameAn
173c0 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20  dValueFormat,.. 
173d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
173e0 20 20 20 20 20 20 20 22 4e 6f 52 75 6e 74 69 6d         "NoRuntim
173f0 65 56 65 72 73 69 6f 6e 22 2c 20 46 6f 72 44 69  eVersion", ForDi
17400 73 70 6c 61 79 28 6e 6f 52 75 6e 74 69 6d 65 56  splay(noRuntimeV
17410 65 72 73 69 6f 6e 29 29 2c 0d 0a 20 20 20 20 20  ersion)),..     
17420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17430 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
17440 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
17450 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
17460 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46  allback(String.F
17470 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c  ormat(NameAndVal
17480 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20  ueFormat,..     
17490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
174a0 20 20 20 22 4e 6f 44 65 73 6b 74 6f 70 22 2c 20     "NoDesktop", 
174b0 46 6f 72 44 69 73 70 6c 61 79 28 6e 6f 44 65 73  ForDisplay(noDes
174c0 6b 74 6f 70 29 29 2c 0d 0a 20 20 20 20 20 20 20  ktop)),..       
174d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
174e0 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
174f0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
17500 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c          traceCal
17510 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72  lback(String.For
17520 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65  mat(NameAndValue
17530 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20  Format,..       
17540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17550 20 22 4e 6f 43 6f 6d 70 61 63 74 22 2c 20 46 6f   "NoCompact", Fo
17560 72 44 69 73 70 6c 61 79 28 6e 6f 43 6f 6d 70 61  rDisplay(noCompa
17570 63 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  ct)),..         
17580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
17590 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
175a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
175b0 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
175c0 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ack(String.Forma
175d0 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f  t(NameAndValueFo
175e0 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  rmat,..         
175f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
17600 4e 6f 4e 65 74 46 78 32 30 22 2c 20 46 6f 72 44  NoNetFx20", ForD
17610 69 73 70 6c 61 79 28 6e 6f 4e 65 74 46 78 32 30  isplay(noNetFx20
17620 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
17630 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
17640 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
17650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17660 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63      traceCallbac
17670 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  k(String.Format(
17680 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d  NameAndValueForm
17690 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at,..           
176a0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 4e 6f               "No
176b0 4e 65 74 46 78 34 30 22 2c 20 46 6f 72 44 69 73  NetFx40", ForDis
176c0 70 6c 61 79 28 6e 6f 4e 65 74 46 78 34 30 29 29  play(noNetFx40))
176d0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
176e0 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
176f0 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
17700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17710 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28    traceCallback(
17720 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61  String.Format(Na
17730 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74  meAndValueFormat
17740 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
17750 20 20 20 20 20 20 20 20 20 20 20 22 4e 6f 56 73             "NoVs
17760 32 30 30 38 22 2c 20 46 6f 72 44 69 73 70 6c 61  2008", ForDispla
17770 79 28 6e 6f 56 73 32 30 30 38 29 29 2c 0d 0a 20  y(noVs2008)),.. 
17780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17790 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
177a0 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
177b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
177c0 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69  aceCallback(Stri
177d0 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e  ng.Format(NameAn
177e0 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20  dValueFormat,.. 
177f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17800 20 20 20 20 20 20 20 22 4e 6f 56 73 32 30 31 30         "NoVs2010
17810 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 6e 6f  ", ForDisplay(no
17820 56 73 32 30 31 30 29 29 2c 0d 0a 20 20 20 20 20  Vs2010)),..     
17830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17840 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
17850 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
17860 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
17870 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46  allback(String.F
17880 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c  ormat(NameAndVal
17890 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20  ueFormat,..     
178a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
178b0 20 20 20 22 4e 6f 54 72 61 63 65 22 2c 20 46 6f     "NoTrace", Fo
178c0 72 44 69 73 70 6c 61 79 28 6e 6f 54 72 61 63 65  rDisplay(noTrace
178d0 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
178e0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
178f0 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
17900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17910 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63      traceCallbac
17920 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  k(String.Format(
17930 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d  NameAndValueForm
17940 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at,..           
17950 20 20 20 20 20 20 20 20 20 20 20 20 20 22 4e 6f               "No
17960 43 6f 6e 73 6f 6c 65 22 2c 20 46 6f 72 44 69 73  Console", ForDis
17970 70 6c 61 79 28 6e 6f 43 6f 6e 73 6f 6c 65 29 29  play(noConsole))
17980 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
17990 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
179a0 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
179b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
179c0 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28    traceCallback(
179d0 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61  String.Format(Na
179e0 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74  meAndValueFormat
179f0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
17a00 20 20 20 20 20 20 20 20 20 20 20 22 4e 6f 4c 6f             "NoLo
17a10 67 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 6e  g", ForDisplay(n
17a20 6f 4c 6f 67 29 29 2c 0d 0a 20 20 20 20 20 20 20  oLog)),..       
17a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17a40 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
17a50 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
17a60 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c          traceCal
17a70 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72  lback(String.For
17a80 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65  mat(NameAndValue
17a90 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20  Format,..       
17aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17ab0 20 22 57 68 61 74 49 66 22 2c 20 46 6f 72 44 69   "WhatIf", ForDi
17ac0 73 70 6c 61 79 28 77 68 61 74 49 66 29 29 2c 0d  splay(whatIf)),.
17ad0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
17ae0 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
17af0 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
17b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17b10 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74  traceCallback(St
17b20 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65  ring.Format(Name
17b30 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d  AndValueFormat,.
17b40 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
17b50 20 20 20 20 20 20 20 20 20 22 56 65 72 62 6f 73           "Verbos
17b60 65 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 76  e", ForDisplay(v
17b70 65 72 62 6f 73 65 29 29 2c 0d 0a 20 20 20 20 20  erbose)),..     
17b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17b90 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
17ba0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
17bb0 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
17bc0 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46  allback(String.F
17bd0 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c  ormat(NameAndVal
17be0 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20  ueFormat,..     
17bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17c00 20 20 20 22 43 6f 6e 66 69 72 6d 22 2c 20 46 6f     "Confirm", Fo
17c10 72 44 69 73 70 6c 61 79 28 63 6f 6e 66 69 72 6d  rDisplay(confirm
17c20 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
17c30 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
17c40 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 20 20  ceCategory);..  
17c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
17c60 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
17c70 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64              #end
17c80 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
17c90 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
17ca0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17cb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17cc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17cd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
17ce0 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e           #region
17cf0 20 50 75 62 6c 69 63 20 50 72 6f 70 65 72 74 69   Public Properti
17d00 65 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  es..            
17d10 70 72 69 76 61 74 65 20 41 73 73 65 6d 62 6c 79  private Assembly
17d20 20 61 73 73 65 6d 62 6c 79 3b 0d 0a 20 20 20 20   assembly;..    
17d30 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 41          public A
17d40 73 73 65 6d 62 6c 79 20 41 73 73 65 6d 62 6c 79  ssembly Assembly
17d50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
17d60 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
17d70 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 61 73   get { return as
17d80 73 65 6d 62 6c 79 3b 20 7d 0d 0a 20 20 20 20 20  sembly; }..     
17d90 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b             set {
17da0 20 61 73 73 65 6d 62 6c 79 20 3d 20 76 61 6c 75   assembly = valu
17db0 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  e; }..          
17dc0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
17dd0 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
17de0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17df0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17e00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17e10 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
17e20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
17e30 72 69 6e 67 20 6c 6f 67 46 69 6c 65 4e 61 6d 65  ring logFileName
17e40 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ;..            p
17e50 75 62 6c 69 63 20 73 74 72 69 6e 67 20 4c 6f 67  ublic string Log
17e60 46 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20  FileName..      
17e70 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
17e80 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72           get { r
17e90 65 74 75 72 6e 20 6c 6f 67 46 69 6c 65 4e 61 6d  eturn logFileNam
17ea0 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  e; }..          
17eb0 20 20 20 20 20 20 73 65 74 20 7b 20 6c 6f 67 46        set { logF
17ec0 69 6c 65 4e 61 6d 65 20 3d 20 76 61 6c 75 65 3b  ileName = value;
17ed0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
17ee0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
17ef0 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
17f00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17f10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17f20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17f30 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
17f40 20 20 20 20 70 72 69 76 61 74 65 20 73 74 72 69      private stri
17f50 6e 67 20 64 69 72 65 63 74 6f 72 79 3b 0d 0a 20  ng directory;.. 
17f60 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
17f70 63 20 73 74 72 69 6e 67 20 44 69 72 65 63 74 6f  c string Directo
17f80 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ry..            
17f90 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
17fa0 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20     get { return 
17fb0 64 69 72 65 63 74 6f 72 79 3b 20 7d 0d 0a 20 20  directory; }..  
17fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65                se
17fd0 74 20 7b 20 64 69 72 65 63 74 6f 72 79 20 3d 20  t { directory = 
17fe0 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20  value; }..      
17ff0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
18000 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
18010 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18020 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18030 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18040 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
18050 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
18060 65 20 73 74 72 69 6e 67 20 63 6f 72 65 46 69 6c  e string coreFil
18070 65 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20  eName;..        
18080 20 20 20 20 70 75 62 6c 69 63 20 73 74 72 69 6e      public strin
18090 67 20 43 6f 72 65 46 69 6c 65 4e 61 6d 65 0d 0a  g CoreFileName..
180a0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
180b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67                 g
180c0 65 74 20 7b 20 72 65 74 75 72 6e 20 63 6f 72 65  et { return core
180d0 46 69 6c 65 4e 61 6d 65 3b 20 7d 0d 0a 20 20 20  FileName; }..   
180e0 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74               set
180f0 20 7b 20 63 6f 72 65 46 69 6c 65 4e 61 6d 65 20   { coreFileName 
18100 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20  = value; }..    
18110 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
18120 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
18130 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18140 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18150 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18160 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
18170 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
18180 61 74 65 20 73 74 72 69 6e 67 20 6c 69 6e 71 46  ate string linqF
18190 69 6c 65 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20  ileName;..      
181a0 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 72        public str
181b0 69 6e 67 20 4c 69 6e 71 46 69 6c 65 4e 61 6d 65  ing LinqFileName
181c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
181d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
181e0 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 6c 69   get { return li
181f0 6e 71 46 69 6c 65 4e 61 6d 65 3b 20 7d 0d 0a 20  nqFileName; }.. 
18200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
18210 65 74 20 7b 20 6c 69 6e 71 46 69 6c 65 4e 61 6d  et { linqFileNam
18220 65 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20  e = value; }..  
18230 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
18240 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
18250 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18260 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18270 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18280 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
18290 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
182a0 69 76 61 74 65 20 73 74 72 69 6e 67 20 64 65 73  ivate string des
182b0 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 3b 0d 0a  ignerFileName;..
182c0 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
182d0 69 63 20 73 74 72 69 6e 67 20 44 65 73 69 67 6e  ic string Design
182e0 65 72 46 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20  erFileName..    
182f0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
18300 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b             get {
18310 20 72 65 74 75 72 6e 20 64 65 73 69 67 6e 65 72   return designer
18320 46 69 6c 65 4e 61 6d 65 3b 20 7d 0d 0a 20 20 20  FileName; }..   
18330 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74               set
18340 20 7b 20 64 65 73 69 67 6e 65 72 46 69 6c 65 4e   { designerFileN
18350 61 6d 65 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a  ame = value; }..
18360 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
18370 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
18380 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18390 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
183a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
183b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
183c0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
183d0 70 72 69 76 61 74 65 20 73 74 72 69 6e 67 20 64  private string d
183e0 65 62 75 67 46 6f 72 6d 61 74 3b 0d 0a 20 20 20  ebugFormat;..   
183f0 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
18400 73 74 72 69 6e 67 20 44 65 62 75 67 46 6f 72 6d  string DebugForm
18410 61 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  at..            
18420 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
18430 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20     get { return 
18440 64 65 62 75 67 46 6f 72 6d 61 74 3b 20 7d 0d 0a  debugFormat; }..
18450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18460 73 65 74 20 7b 20 64 65 62 75 67 46 6f 72 6d 61  set { debugForma
18470 74 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20  t = value; }..  
18480 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
18490 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
184a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
184b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
184c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
184d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
184e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
184f0 69 76 61 74 65 20 73 74 72 69 6e 67 20 74 72 61  ivate string tra
18500 63 65 46 6f 72 6d 61 74 3b 0d 0a 20 20 20 20 20  ceFormat;..     
18510 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74         public st
18520 72 69 6e 67 20 54 72 61 63 65 46 6f 72 6d 61 74  ring TraceFormat
18530 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
18540 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
18550 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 74 72   get { return tr
18560 61 63 65 46 6f 72 6d 61 74 3b 20 7d 0d 0a 20 20  aceFormat; }..  
18570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65                se
18580 74 20 7b 20 74 72 61 63 65 46 6f 72 6d 61 74 20  t { traceFormat 
18590 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20  = value; }..    
185a0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
185b0 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
185c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
185d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
185e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
185f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
18600 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
18610 61 74 65 20 49 6e 73 74 61 6c 6c 46 6c 61 67 73  ate InstallFlags
18620 20 69 6e 73 74 61 6c 6c 46 6c 61 67 73 3b 0d 0a   installFlags;..
18630 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
18640 69 63 20 49 6e 73 74 61 6c 6c 46 6c 61 67 73 20  ic InstallFlags 
18650 49 6e 73 74 61 6c 6c 46 6c 61 67 73 0d 0a 20 20  InstallFlags..  
18660 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
18670 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74               get
18680 20 7b 20 72 65 74 75 72 6e 20 69 6e 73 74 61 6c   { return instal
18690 6c 46 6c 61 67 73 3b 20 7d 0d 0a 20 20 20 20 20  lFlags; }..     
186a0 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b             set {
186b0 20 69 6e 73 74 61 6c 6c 46 6c 61 67 73 20 3d 20   installFlags = 
186c0 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20  value; }..      
186d0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
186e0 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
186f0 2f 2f 2f 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 0d 0a 0d 0a 20 20  //////////....  
18730 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
18740 65 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 20  e TracePriority 
18750 64 65 62 75 67 50 72 69 6f 72 69 74 79 3b 0d 0a  debugPriority;..
18760 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
18770 69 63 20 54 72 61 63 65 50 72 69 6f 72 69 74 79  ic TracePriority
18780 20 44 65 62 75 67 50 72 69 6f 72 69 74 79 0d 0a   DebugPriority..
18790 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
187a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67                 g
187b0 65 74 20 7b 20 72 65 74 75 72 6e 20 64 65 62 75  et { return debu
187c0 67 50 72 69 6f 72 69 74 79 3b 20 7d 0d 0a 20 20  gPriority; }..  
187d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65                se
187e0 74 20 7b 20 64 65 62 75 67 50 72 69 6f 72 69 74  t { debugPriorit
187f0 79 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20  y = value; }..  
18800 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
18810 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
18820 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18830 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18840 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18850 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
18860 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
18870 69 76 61 74 65 20 54 72 61 63 65 50 72 69 6f 72  ivate TracePrior
18880 69 74 79 20 74 72 61 63 65 50 72 69 6f 72 69 74  ity tracePriorit
18890 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y;..            
188a0 70 75 62 6c 69 63 20 54 72 61 63 65 50 72 69 6f  public TracePrio
188b0 72 69 74 79 20 54 72 61 63 65 50 72 69 6f 72 69  rity TracePriori
188c0 74 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ty..            
188d0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
188e0 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20     get { return 
188f0 74 72 61 63 65 50 72 69 6f 72 69 74 79 3b 20 7d  tracePriority; }
18900 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
18910 20 20 73 65 74 20 7b 20 74 72 61 63 65 50 72 69    set { tracePri
18920 6f 72 69 74 79 20 3d 20 76 61 6c 75 65 3b 20 7d  ority = value; }
18930 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
18940 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
18950 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18960 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18970 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18980 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18990 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
189a0 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 69    private bool i
189b0 6e 73 74 61 6c 6c 3b 0d 0a 20 20 20 20 20 20 20  nstall;..       
189c0 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c       public bool
189d0 20 49 6e 73 74 61 6c 6c 0d 0a 20 20 20 20 20 20   Install..      
189e0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
189f0 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72           get { r
18a00 65 74 75 72 6e 20 69 6e 73 74 61 6c 6c 3b 20 7d  eturn install; }
18a10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
18a20 20 20 73 65 74 20 7b 20 69 6e 73 74 61 6c 6c 20    set { install 
18a30 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20  = value; }..    
18a40 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
18a50 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
18a60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18a70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18a80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18a90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
18aa0 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
18ab0 61 74 65 20 62 6f 6f 6c 20 6e 6f 52 75 6e 74 69  ate bool noRunti
18ac0 6d 65 56 65 72 73 69 6f 6e 3b 0d 0a 20 20 20 20  meVersion;..    
18ad0 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 62          public b
18ae0 6f 6f 6c 20 4e 6f 52 75 6e 74 69 6d 65 56 65 72  ool NoRuntimeVer
18af0 73 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 20 20  sion..          
18b00 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
18b10 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72       get { retur
18b20 6e 20 6e 6f 52 75 6e 74 69 6d 65 56 65 72 73 69  n noRuntimeVersi
18b30 6f 6e 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  on; }..         
18b40 20 20 20 20 20 20 20 73 65 74 20 7b 20 6e 6f 52         set { noR
18b50 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 20 3d 20  untimeVersion = 
18b60 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20  value; }..      
18b70 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
18b80 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
18b90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18ba0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18bb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18bc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
18bd0 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
18be0 65 20 62 6f 6f 6c 20 6e 6f 44 65 73 6b 74 6f 70  e bool noDesktop
18bf0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ;..            p
18c00 75 62 6c 69 63 20 62 6f 6f 6c 20 4e 6f 44 65 73  ublic bool NoDes
18c10 6b 74 6f 70 0d 0a 20 20 20 20 20 20 20 20 20 20  ktop..          
18c20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
18c30 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72       get { retur
18c40 6e 20 6e 6f 44 65 73 6b 74 6f 70 3b 20 7d 0d 0a  n noDesktop; }..
18c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18c60 73 65 74 20 7b 20 6e 6f 44 65 73 6b 74 6f 70 20  set { noDesktop 
18c70 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20  = value; }..    
18c80 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
18c90 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
18ca0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18cb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18cc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18cd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
18ce0 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
18cf0 61 74 65 20 62 6f 6f 6c 20 6e 6f 43 6f 6d 70 61  ate bool noCompa
18d00 63 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ct;..           
18d10 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 4e 6f 43   public bool NoC
18d20 6f 6d 70 61 63 74 0d 0a 20 20 20 20 20 20 20 20  ompact..        
18d30 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
18d40 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74         get { ret
18d50 75 72 6e 20 6e 6f 43 6f 6d 70 61 63 74 3b 20 7d  urn noCompact; }
18d60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
18d70 20 20 73 65 74 20 7b 20 6e 6f 43 6f 6d 70 61 63    set { noCompac
18d80 74 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20  t = value; }..  
18d90 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
18da0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
18db0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18dc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18dd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18de0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
18df0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
18e00 69 76 61 74 65 20 62 6f 6f 6c 20 6e 6f 4e 65 74  ivate bool noNet
18e10 46 78 32 30 3b 0d 0a 20 20 20 20 20 20 20 20 20  Fx20;..         
18e20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 4e     public bool N
18e30 6f 4e 65 74 46 78 32 30 0d 0a 20 20 20 20 20 20  oNetFx20..      
18e40 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
18e50 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72           get { r
18e60 65 74 75 72 6e 20 6e 6f 4e 65 74 46 78 32 30 3b  eturn noNetFx20;
18e70 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
18e80 20 20 20 20 73 65 74 20 7b 20 6e 6f 4e 65 74 46      set { noNetF
18e90 78 32 30 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a  x20 = value; }..
18ea0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
18eb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
18ec0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18ed0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18ee0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18ef0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18f00 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
18f10 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 6e 6f 4e  private bool noN
18f20 65 74 46 78 34 30 3b 0d 0a 20 20 20 20 20 20 20  etFx40;..       
18f30 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c       public bool
18f40 20 4e 6f 4e 65 74 46 78 34 30 0d 0a 20 20 20 20   NoNetFx40..    
18f50 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
18f60 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b             get {
18f70 20 72 65 74 75 72 6e 20 6e 6f 4e 65 74 46 78 34   return noNetFx4
18f80 30 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  0; }..          
18f90 20 20 20 20 20 20 73 65 74 20 7b 20 6e 6f 4e 65        set { noNe
18fa0 74 46 78 34 30 20 3d 20 76 61 6c 75 65 3b 20 7d  tFx40 = value; }
18fb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
18fc0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
18fd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18fe0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18ff0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19000 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19010 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
19020 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 6e    private bool n
19030 6f 56 73 32 30 30 38 3b 0d 0a 20 20 20 20 20 20  oVs2008;..      
19040 20 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f        public boo
19050 6c 20 4e 6f 56 73 32 30 30 38 0d 0a 20 20 20 20  l NoVs2008..    
19060 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
19070 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b             get {
19080 20 72 65 74 75 72 6e 20 6e 6f 56 73 32 30 30 38   return noVs2008
19090 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
190a0 20 20 20 20 20 73 65 74 20 7b 20 6e 6f 56 73 32       set { noVs2
190b0 30 30 38 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a  008 = value; }..
190c0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
190d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
190e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
190f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19100 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19110 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19120 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
19130 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 6e 6f 56  private bool noV
19140 73 32 30 31 30 3b 0d 0a 20 20 20 20 20 20 20 20  s2010;..        
19150 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20      public bool 
19160 4e 6f 56 73 32 30 31 30 0d 0a 20 20 20 20 20 20  NoVs2010..      
19170 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
19180 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72           get { r
19190 65 74 75 72 6e 20 6e 6f 56 73 32 30 31 30 3b 20  eturn noVs2010; 
191a0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
191b0 20 20 20 73 65 74 20 7b 20 6e 6f 56 73 32 30 31     set { noVs201
191c0 30 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20  0 = value; }..  
191d0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
191e0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
191f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19200 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19210 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19220 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
19230 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
19240 69 76 61 74 65 20 62 6f 6f 6c 20 6e 6f 54 72 61  ivate bool noTra
19250 63 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ce;..           
19260 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 4e 6f 54   public bool NoT
19270 72 61 63 65 0d 0a 20 20 20 20 20 20 20 20 20 20  race..          
19280 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
19290 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72       get { retur
192a0 6e 20 6e 6f 54 72 61 63 65 3b 20 7d 0d 0a 20 20  n noTrace; }..  
192b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65                se
192c0 74 20 7b 20 6e 6f 54 72 61 63 65 20 3d 20 76 61  t { noTrace = va
192d0 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  lue; }..        
192e0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
192f0 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
19300 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19310 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19320 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19330 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
19340 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
19350 62 6f 6f 6c 20 6e 6f 43 6f 6e 73 6f 6c 65 3b 0d  bool noConsole;.
19360 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
19370 6c 69 63 20 62 6f 6f 6c 20 4e 6f 43 6f 6e 73 6f  lic bool NoConso
19380 6c 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  le..            
19390 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
193a0 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20     get { return 
193b0 6e 6f 43 6f 6e 73 6f 6c 65 3b 20 7d 0d 0a 20 20  noConsole; }..  
193c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65                se
193d0 74 20 7b 20 6e 6f 43 6f 6e 73 6f 6c 65 20 3d 20  t { noConsole = 
193e0 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20  value; }..      
193f0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
19400 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
19410 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19420 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19430 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19440 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
19450 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
19460 65 20 62 6f 6f 6c 20 6e 6f 4c 6f 67 3b 0d 0a 20  e bool noLog;.. 
19470 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
19480 63 20 62 6f 6f 6c 20 4e 6f 4c 6f 67 0d 0a 20 20  c bool NoLog..  
19490 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
194a0 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74               get
194b0 20 7b 20 72 65 74 75 72 6e 20 6e 6f 4c 6f 67 3b   { return noLog;
194c0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
194d0 20 20 20 20 73 65 74 20 7b 20 6e 6f 4c 6f 67 20      set { noLog 
194e0 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20  = value; }..    
194f0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
19500 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
19510 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19520 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19530 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19540 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
19550 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
19560 61 74 65 20 62 6f 6f 6c 20 77 68 61 74 49 66 3b  ate bool whatIf;
19570 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
19580 62 6c 69 63 20 62 6f 6f 6c 20 57 68 61 74 49 66  blic bool WhatIf
19590 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
195a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
195b0 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 77 68   get { return wh
195c0 61 74 49 66 3b 20 7d 0d 0a 20 20 20 20 20 20 20  atIf; }..       
195d0 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 77           set { w
195e0 68 61 74 49 66 20 3d 20 76 61 6c 75 65 3b 20 7d  hatIf = value; }
195f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
19600 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
19610 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19620 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19630 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19640 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19650 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
19660 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 76    private bool v
19670 65 72 62 6f 73 65 3b 0d 0a 20 20 20 20 20 20 20  erbose;..       
19680 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c       public bool
19690 20 56 65 72 62 6f 73 65 0d 0a 20 20 20 20 20 20   Verbose..      
196a0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
196b0 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72           get { r
196c0 65 74 75 72 6e 20 76 65 72 62 6f 73 65 3b 20 7d  eturn verbose; }
196d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
196e0 20 20 73 65 74 20 7b 20 76 65 72 62 6f 73 65 20    set { verbose 
196f0 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20  = value; }..    
19700 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
19710 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
19720 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19730 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19740 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19750 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
19760 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
19770 61 74 65 20 62 6f 6f 6c 20 63 6f 6e 66 69 72 6d  ate bool confirm
19780 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ;..            p
19790 75 62 6c 69 63 20 62 6f 6f 6c 20 43 6f 6e 66 69  ublic bool Confi
197a0 72 6d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  rm..            
197b0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
197c0 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20     get { return 
197d0 63 6f 6e 66 69 72 6d 3b 20 7d 0d 0a 20 20 20 20  confirm; }..    
197e0 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
197f0 7b 20 63 6f 6e 66 69 72 6d 20 3d 20 76 61 6c 75  { confirm = valu
19800 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  e; }..          
19810 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
19820 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 20 20 20   #endregion..   
19830 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
19840 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
19850 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
19860 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19870 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19880 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19890 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
198a0 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e  .        #region
198b0 20 46 72 61 6d 65 77 6f 72 6b 4c 69 73 74 20 43   FrameworkList C
198c0 6c 61 73 73 0d 0a 20 20 20 20 20 20 20 20 70 72  lass..        pr
198d0 69 76 61 74 65 20 73 65 61 6c 65 64 20 63 6c 61  ivate sealed cla
198e0 73 73 20 46 72 61 6d 65 77 6f 72 6b 4c 69 73 74  ss FrameworkList
198f0 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
19900 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e           #region
19910 20 50 75 62 6c 69 63 20 43 6f 6e 73 74 72 75 63   Public Construc
19920 74 6f 72 73 0d 0a 20 20 20 20 20 20 20 20 20 20  tors..          
19930 20 20 70 75 62 6c 69 63 20 46 72 61 6d 65 77 6f    public Framewo
19940 72 6b 4c 69 73 74 28 29 0d 0a 20 20 20 20 20 20  rkList()..      
19950 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
19960 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e           // do n
19970 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20  othing...       
19980 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
19990 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
199a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
199b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
199c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
199d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
199e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
199f0 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
19a00 20 23 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20   #region Public 
19a10 4d 65 74 68 6f 64 73 0d 0a 20 20 20 20 20 20 20  Methods..       
19a20 20 20 20 20 20 70 72 69 76 61 74 65 20 52 65 67       private Reg
19a30 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79  istryKey rootKey
19a40 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ;..            p
19a50 75 62 6c 69 63 20 52 65 67 69 73 74 72 79 4b 65  ublic RegistryKe
19a60 79 20 52 6f 6f 74 4b 65 79 0d 0a 20 20 20 20 20  y RootKey..     
19a70 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
19a80 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20            get { 
19a90 72 65 74 75 72 6e 20 72 6f 6f 74 4b 65 79 3b 20  return rootKey; 
19aa0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
19ab0 20 20 20 73 65 74 20 7b 20 72 6f 6f 74 4b 65 79     set { rootKey
19ac0 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20   = value; }..   
19ad0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
19ae0 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
19af0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19b00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19b10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19b20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
19b30 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
19b40 76 61 74 65 20 53 74 72 69 6e 67 4c 69 73 74 20  vate StringList 
19b50 6e 61 6d 65 73 3b 0d 0a 20 20 20 20 20 20 20 20  names;..        
19b60 20 20 20 20 70 75 62 6c 69 63 20 53 74 72 69 6e      public Strin
19b70 67 4c 69 73 74 20 4e 61 6d 65 73 0d 0a 20 20 20  gList Names..   
19b80 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
19b90 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20              get 
19ba0 7b 20 72 65 74 75 72 6e 20 6e 61 6d 65 73 3b 20  { return names; 
19bb0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
19bc0 20 20 20 73 65 74 20 7b 20 6e 61 6d 65 73 20 3d     set { names =
19bd0 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20   value; }..     
19be0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
19bf0 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
19c00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19c10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19c20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19c30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
19c40 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
19c50 74 65 20 56 65 72 73 69 6f 6e 4d 61 70 20 76 65  te VersionMap ve
19c60 72 73 69 6f 6e 73 3b 0d 0a 20 20 20 20 20 20 20  rsions;..       
19c70 20 20 20 20 20 70 75 62 6c 69 63 20 56 65 72 73       public Vers
19c80 69 6f 6e 4d 61 70 20 56 65 72 73 69 6f 6e 73 0d  ionMap Versions.
19c90 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
19ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19cb0 67 65 74 20 7b 20 72 65 74 75 72 6e 20 76 65 72  get { return ver
19cc0 73 69 6f 6e 73 3b 20 7d 0d 0a 20 20 20 20 20 20  sions; }..      
19cd0 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20            set { 
19ce0 76 65 72 73 69 6f 6e 73 20 3d 20 76 61 6c 75 65  versions = value
19cf0 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
19d00 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
19d10 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
19d20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19d30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19d40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19d50 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
19d60 20 20 20 20 20 70 72 69 76 61 74 65 20 53 74 72       private Str
19d70 69 6e 67 4c 69 73 74 20 70 6c 61 74 66 6f 72 6d  ingList platform
19d80 4e 61 6d 65 73 3b 0d 0a 20 20 20 20 20 20 20 20  Names;..        
19d90 20 20 20 20 70 75 62 6c 69 63 20 53 74 72 69 6e      public Strin
19da0 67 4c 69 73 74 20 50 6c 61 74 66 6f 72 6d 4e 61  gList PlatformNa
19db0 6d 65 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20  mes..           
19dc0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
19dd0 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e      get { return
19de0 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 73 3b 20   platformNames; 
19df0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
19e00 20 20 20 73 65 74 20 7b 20 70 6c 61 74 66 6f 72     set { platfor
19e10 6d 4e 61 6d 65 73 20 3d 20 76 61 6c 75 65 3b 20  mNames = value; 
19e20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
19e30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65  ..            #e
19e40 6e 64 72 65 67 69 6f 6e 0d 0a 20 20 20 20 20 20  ndregion..      
19e50 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e    }..        #en
19e60 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
19e70 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
19e80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19e90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19ea0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19eb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
19ec0 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 56 73        #region Vs
19ed0 4c 69 73 74 20 43 6c 61 73 73 0d 0a 20 20 20 20  List Class..    
19ee0 20 20 20 20 70 72 69 76 61 74 65 20 73 65 61 6c      private seal
19ef0 65 64 20 63 6c 61 73 73 20 56 73 4c 69 73 74 0d  ed class VsList.
19f00 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
19f10 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
19f20 50 75 62 6c 69 63 20 43 6f 6e 73 74 72 75 63 74  Public Construct
19f30 6f 72 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ors..           
19f40 20 70 75 62 6c 69 63 20 56 73 4c 69 73 74 28 29   public VsList()
19f50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
19f60 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
19f70 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d   // do nothing..
19f80 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
19f90 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64              #end
19fa0 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
19fb0 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
19fc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19fd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19fe0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19ff0 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
1a000 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e           #region
1a010 20 50 75 62 6c 69 63 20 50 72 6f 70 65 72 74 69   Public Properti
1a020 65 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  es..            
1a030 70 72 69 76 61 74 65 20 52 65 67 69 73 74 72 79  private Registry
1a040 4b 65 79 20 72 6f 6f 74 4b 65 79 3b 0d 0a 20 20  Key rootKey;..  
1a050 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
1a060 20 52 65 67 69 73 74 72 79 4b 65 79 20 52 6f 6f   RegistryKey Roo
1a070 74 4b 65 79 0d 0a 20 20 20 20 20 20 20 20 20 20  tKey..          
1a080 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
1a090 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72       get { retur
1a0a0 6e 20 72 6f 6f 74 4b 65 79 3b 20 7d 0d 0a 20 20  n rootKey; }..  
1a0b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65                se
1a0c0 74 20 7b 20 72 6f 6f 74 4b 65 79 20 3d 20 76 61  t { rootKey = va
1a0d0 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  lue; }..        
1a0e0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
1a0f0 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
1a100 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a110 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a120 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a130 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
1a140 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
1a150 56 65 72 73 69 6f 6e 4c 69 73 74 20 76 65 72 73  VersionList vers
1a160 69 6f 6e 73 3b 0d 0a 20 20 20 20 20 20 20 20 20  ions;..         
1a170 20 20 20 70 75 62 6c 69 63 20 56 65 72 73 69 6f     public Versio
1a180 6e 4c 69 73 74 20 56 65 72 73 69 6f 6e 73 0d 0a  nList Versions..
1a190 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
1a1a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67                 g
1a1b0 65 74 20 7b 20 72 65 74 75 72 6e 20 76 65 72 73  et { return vers
1a1c0 69 6f 6e 73 3b 20 7d 0d 0a 20 20 20 20 20 20 20  ions; }..       
1a1d0 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 76           set { v
1a1e0 65 72 73 69 6f 6e 73 20 3d 20 76 61 6c 75 65 3b  ersions = value;
1a1f0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
1a200 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
1a210 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
1a220 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a230 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a240 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a250 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
1a260 20 20 20 20 70 72 69 76 61 74 65 20 56 65 72 73      private Vers
1a270 69 6f 6e 4c 69 73 74 4d 61 70 20 66 72 61 6d 65  ionListMap frame
1a280 77 6f 72 6b 56 65 72 73 69 6f 6e 73 3b 0d 0a 20  workVersions;.. 
1a290 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
1a2a0 63 20 56 65 72 73 69 6f 6e 4c 69 73 74 4d 61 70  c VersionListMap
1a2b0 20 46 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f   FrameworkVersio
1a2c0 6e 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ns..            
1a2d0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
1a2e0 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20     get { return 
1a2f0 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e  frameworkVersion
1a300 73 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  s; }..          
1a310 20 20 20 20 20 20 73 65 74 20 7b 20 66 72 61 6d        set { fram
1a320 65 77 6f 72 6b 56 65 72 73 69 6f 6e 73 20 3d 20  eworkVersions = 
1a330 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20  value; }..      
1a340 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
1a350 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
1a360 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a370 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a380 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a390 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
1a3a0 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
1a3b0 65 20 56 65 72 73 69 6f 6e 4c 69 73 74 20 69 6e  e VersionList in
1a3c0 73 74 61 6c 6c 65 64 56 65 72 73 69 6f 6e 73 3b  stalledVersions;
1a3d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
1a3e0 62 6c 69 63 20 56 65 72 73 69 6f 6e 4c 69 73 74  blic VersionList
1a3f0 20 49 6e 73 74 61 6c 6c 65 64 56 65 72 73 69 6f   InstalledVersio
1a400 6e 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ns..            
1a410 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
1a420 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20     get { return 
1a430 69 6e 73 74 61 6c 6c 65 64 56 65 72 73 69 6f 6e  installedVersion
1a440 73 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  s; }..          
1a450 20 20 20 20 20 20 73 65 74 20 7b 20 69 6e 73 74        set { inst
1a460 61 6c 6c 65 64 56 65 72 73 69 6f 6e 73 20 3d 20  alledVersions = 
1a470 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20  value; }..      
1a480 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
1a490 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
1a4a0 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
1a4b0 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
1a4c0 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
1a4d0 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  on....        //
1a4e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a4f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a500 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a510 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a520 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
1a530 20 23 72 65 67 69 6f 6e 20 50 72 69 76 61 74 65   #region Private
1a540 20 43 6f 6e 73 74 61 6e 74 20 44 61 74 61 0d 0a   Constant Data..
1a550 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
1a560 63 6f 6e 73 74 20 73 74 72 69 6e 67 20 43 6f 72  const string Cor
1a570 65 46 69 6c 65 4e 61 6d 65 20 3d 20 22 53 79 73  eFileName = "Sys
1a580 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e  tem.Data.SQLite.
1a590 64 6c 6c 22 3b 0d 0a 20 20 20 20 20 20 20 20 70  dll";..        p
1a5a0 72 69 76 61 74 65 20 63 6f 6e 73 74 20 73 74 72  rivate const str
1a5b0 69 6e 67 20 4c 69 6e 71 46 69 6c 65 4e 61 6d 65  ing LinqFileName
1a5c0 20 3d 20 22 53 79 73 74 65 6d 2e 44 61 74 61 2e   = "System.Data.
1a5d0 53 51 4c 69 74 65 2e 4c 69 6e 71 2e 64 6c 6c 22  SQLite.Linq.dll"
1a5e0 3b 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  ;..        priva
1a5f0 74 65 20 63 6f 6e 73 74 20 73 74 72 69 6e 67 20  te const string 
1a600 44 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65  DesignerFileName
1a610 20 3d 20 22 53 51 4c 69 74 65 2e 44 65 73 69 67   = "SQLite.Desig
1a620 6e 65 72 2e 64 6c 6c 22 3b 0d 0a 20 20 20 20 20  ner.dll";..     
1a630 20 20 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74     private const
1a640 20 73 74 72 69 6e 67 20 50 72 6f 76 69 64 65 72   string Provider
1a650 4e 61 6d 65 20 3d 20 22 53 51 4c 69 74 65 20 44  Name = "SQLite D
1a660 61 74 61 20 50 72 6f 76 69 64 65 72 22 3b 0d 0a  ata Provider";..
1a670 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
1a680 63 6f 6e 73 74 20 73 74 72 69 6e 67 20 50 72 6f  const string Pro
1a690 6a 65 63 74 4e 61 6d 65 20 3d 20 22 53 79 73 74  jectName = "Syst
1a6a0 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 22 3b  em.Data.SQLite";
1a6b0 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
1a6c0 65 20 63 6f 6e 73 74 20 73 74 72 69 6e 67 20 4c  e const string L
1a6d0 65 67 61 63 79 50 72 6f 6a 65 63 74 4e 61 6d 65  egacyProjectName
1a6e0 20 3d 20 22 53 51 4c 69 74 65 22 3b 0d 0a 20 20   = "SQLite";..  
1a6f0 20 20 20 20 20 20 70 72 69 76 61 74 65 20 63 6f        private co
1a700 6e 73 74 20 73 74 72 69 6e 67 20 49 6e 76 61 72  nst string Invar
1a710 69 61 6e 74 4e 61 6d 65 20 3d 20 22 53 79 73 74  iantName = "Syst
1a720 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 22 3b  em.Data.SQLite";
1a730 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
1a740 65 20 63 6f 6e 73 74 20 73 74 72 69 6e 67 20 46  e const string F
1a750 61 63 74 6f 72 79 54 79 70 65 4e 61 6d 65 20 3d  actoryTypeName =
1a760 20 22 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51   "System.Data.SQ
1a770 4c 69 74 65 2e 53 51 4c 69 74 65 46 61 63 74 6f  Lite.SQLiteFacto
1a780 72 79 22 3b 0d 0a 20 20 20 20 20 20 20 20 70 72  ry";..        pr
1a790 69 76 61 74 65 20 63 6f 6e 73 74 20 73 74 72 69  ivate const stri
1a7a0 6e 67 20 44 65 73 63 72 69 70 74 69 6f 6e 20 3d  ng Description =
1a7b0 20 22 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b   ".NET Framework
1a7c0 20 44 61 74 61 20 50 72 6f 76 69 64 65 72 20 66   Data Provider f
1a7d0 6f 72 20 53 51 4c 69 74 65 22 3b 0d 0a 0d 0a 20  or SQLite";.... 
1a7e0 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
1a7f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a800 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a810 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a820 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
1a830 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
1a840 65 20 63 6f 6e 73 74 20 73 74 72 69 6e 67 20 43  e const string C
1a850 4c 52 76 32 49 6d 61 67 65 52 75 6e 74 69 6d 65  LRv2ImageRuntime
1a860 56 65 72 73 69 6f 6e 20 3d 20 22 76 32 2e 30 2e  Version = "v2.0.
1a870 35 30 37 32 37 22 3b 0d 0a 20 20 20 20 20 20 20  50727";..       
1a880 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20 73   private const s
1a890 74 72 69 6e 67 20 43 4c 52 76 34 49 6d 61 67 65  tring CLRv4Image
1a8a0 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 20 3d  RuntimeVersion =
1a8b0 20 22 76 34 2e 30 2e 33 30 33 31 39 22 3b 0d 0a   "v4.0.30319";..
1a8c0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
1a8d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a8e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a8f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a900 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a910 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69  /....        pri
1a920 76 61 74 65 20 63 6f 6e 73 74 20 73 74 72 69 6e  vate const strin
1a930 67 20 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f  g NameAndValueFo
1a940 72 6d 61 74 20 3d 20 22 7b 30 7d 3a 20 7b 31 7d  rmat = "{0}: {1}
1a950 22 3b 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  ";..        priv
1a960 61 74 65 20 63 6f 6e 73 74 20 73 74 72 69 6e 67  ate const string
1a970 20 4c 6f 67 46 69 6c 65 53 75 66 66 69 78 20 3d   LogFileSuffix =
1a980 20 22 2e 6c 6f 67 22 3b 0d 0a 0d 0a 20 20 20 20   ".log";....    
1a990 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
1a9a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a9b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a9c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a9d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
1a9e0 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
1a9f0 74 61 74 69 63 20 72 65 61 64 6f 6e 6c 79 20 73  tatic readonly s
1aa00 74 72 69 6e 67 20 56 73 49 64 46 6f 72 6d 61 74  tring VsIdFormat
1aa10 20 3d 20 22 42 22 3b 0d 0a 0d 0a 20 20 20 20 20   = "B";....     
1aa20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
1aa30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1aa40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1aa50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1aa60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
1aa70 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
1aa80 61 74 69 63 20 72 65 61 64 6f 6e 6c 79 20 73 74  atic readonly st
1aa90 72 69 6e 67 20 46 72 61 6d 65 77 6f 72 6b 4b 65  ring FrameworkKe
1aaa0 79 4e 61 6d 65 20 3d 0d 0a 20 20 20 20 20 20 20  yName =..       
1aab0 20 20 20 20 20 22 53 6f 66 74 77 61 72 65 5c 5c       "Software\\
1aac0 4d 69 63 72 6f 73 6f 66 74 5c 5c 2e 4e 45 54 46  Microsoft\\.NETF
1aad0 72 61 6d 65 77 6f 72 6b 22 3b 0d 0a 0d 0a 20 20  ramework";....  
1aae0 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
1aaf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ab00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ab10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ab20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
1ab30 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
1ab40 20 73 74 61 74 69 63 20 72 65 61 64 6f 6e 6c 79   static readonly
1ab50 20 73 74 72 69 6e 67 20 46 72 61 6d 65 77 6f 72   string Framewor
1ab60 6b 53 64 6b 4b 65 79 4e 61 6d 65 20 3d 0d 0a 20  kSdkKeyName =.. 
1ab70 20 20 20 20 20 20 20 20 20 20 20 22 53 6f 66 74             "Soft
1ab80 77 61 72 65 5c 5c 4d 69 63 72 6f 73 6f 66 74 5c  ware\\Microsoft\
1ab90 5c 4d 69 63 72 6f 73 6f 66 74 20 53 44 4b 73 5c  \Microsoft SDKs\
1aba0 5c 2e 4e 45 54 46 72 61 6d 65 77 6f 72 6b 22 3b  \.NETFramework";
1abb0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
1abc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1abd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1abe0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1abf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ac00 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70  ///....        p
1ac10 72 69 76 61 74 65 20 73 74 61 74 69 63 20 72 65  rivate static re
1ac20 61 64 6f 6e 6c 79 20 73 74 72 69 6e 67 20 57 69  adonly string Wi
1ac30 6e 64 6f 77 73 53 64 6b 4b 65 79 4e 61 6d 65 20  ndowsSdkKeyName 
1ac40 3d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22  =..            "
1ac50 53 6f 66 74 77 61 72 65 5c 5c 4d 69 63 72 6f 73  Software\\Micros
1ac60 6f 66 74 5c 5c 4d 69 63 72 6f 73 6f 66 74 20 53  oft\\Microsoft S
1ac70 44 4b 73 5c 5c 57 69 6e 64 6f 77 73 22 3b 0d 0a  DKs\\Windows";..
1ac80 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
1ac90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1aca0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1acb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1acc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1acd0 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69  /....        pri
1ace0 76 61 74 65 20 73 74 61 74 69 63 20 72 65 61 64  vate static read
1acf0 6f 6e 6c 79 20 73 74 72 69 6e 67 20 58 50 61 74  only string XPat
1ad00 68 46 6f 72 41 64 64 45 6c 65 6d 65 6e 74 20 3d  hForAddElement =
1ad10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 63  ..            "c
1ad20 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2f 73 79 73  onfiguration/sys
1ad30 74 65 6d 2e 64 61 74 61 2f 44 62 50 72 6f 76 69  tem.data/DbProvi
1ad40 64 65 72 46 61 63 74 6f 72 69 65 73 2f 61 64 64  derFactories/add
1ad50 5b 40 69 6e 76 61 72 69 61 6e 74 3d 5c 22 7b 30  [@invariant=\"{0
1ad60 7d 5c 22 5d 22 3b 0d 0a 0d 0a 20 20 20 20 20 20  }\"]";....      
1ad70 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
1ad80 20 72 65 61 64 6f 6e 6c 79 20 73 74 72 69 6e 67   readonly string
1ad90 20 58 50 61 74 68 46 6f 72 52 65 6d 6f 76 65 45   XPathForRemoveE
1ada0 6c 65 6d 65 6e 74 20 3d 0d 0a 20 20 20 20 20 20  lement =..      
1adb0 20 20 20 20 20 20 22 63 6f 6e 66 69 67 75 72 61        "configura
1adc0 74 69 6f 6e 2f 73 79 73 74 65 6d 2e 64 61 74 61  tion/system.data
1add0 2f 44 62 50 72 6f 76 69 64 65 72 46 61 63 74 6f  /DbProviderFacto
1ade0 72 69 65 73 2f 72 65 6d 6f 76 65 5b 40 69 6e 76  ries/remove[@inv
1adf0 61 72 69 61 6e 74 3d 5c 22 7b 30 7d 5c 22 5d 22  ariant=\"{0}\"]"
1ae00 3b 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72  ;..        #endr
1ae10 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
1ae20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
1ae30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ae40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ae50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ae60 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
1ae70 20 20 20 20 23 72 65 67 69 6f 6e 20 50 72 69 76      #region Priv
1ae80 61 74 65 20 53 74 61 74 69 63 20 44 61 74 61 0d  ate Static Data.
1ae90 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
1aea0 20 73 74 61 74 69 63 20 41 73 73 65 6d 62 6c 79   static Assembly
1aeb0 20 74 68 69 73 41 73 73 65 6d 62 6c 79 20 3d 20   thisAssembly = 
1aec0 41 73 73 65 6d 62 6c 79 2e 47 65 74 45 78 65 63  Assembly.GetExec
1aed0 75 74 69 6e 67 41 73 73 65 6d 62 6c 79 28 29 3b  utingAssembly();
1aee0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  ....        priv
1aef0 61 74 65 20 73 74 61 74 69 63 20 73 74 72 69 6e  ate static strin
1af00 67 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 20  g traceCategory 
1af10 3d 20 50 61 74 68 2e 47 65 74 46 69 6c 65 4e 61  = Path.GetFileNa
1af20 6d 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me(..           
1af30 20 74 68 69 73 41 73 73 65 6d 62 6c 79 2e 4c 6f   thisAssembly.Lo
1af40 63 61 74 69 6f 6e 29 3b 20 2f 2a 20 4e 4f 54 45  cation); /* NOTE
1af50 3a 20 53 61 6d 65 20 66 6f 72 20 64 65 62 75 67  : Same for debug
1af60 20 61 6e 64 20 74 72 61 63 65 2e 20 2a 2f 0d 0a   and trace. */..
1af70 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
1af80 65 20 73 74 61 74 69 63 20 54 72 61 63 65 43 61  e static TraceCa
1af90 6c 6c 62 61 63 6b 20 64 65 62 75 67 43 61 6c 6c  llback debugCall
1afa0 62 61 63 6b 20 3d 20 41 70 70 44 65 62 75 67 3b  back = AppDebug;
1afb0 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
1afc0 65 20 73 74 61 74 69 63 20 54 72 61 63 65 43 61  e static TraceCa
1afd0 6c 6c 62 61 63 6b 20 74 72 61 63 65 43 61 6c 6c  llback traceCall
1afe0 62 61 63 6b 20 3d 20 41 70 70 54 72 61 63 65 3b  back = AppTrace;
1aff0 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65  ..        #endre
1b000 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
1b010 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b020 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b030 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b040 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b050 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
1b060 20 20 20 23 72 65 67 69 6f 6e 20 54 72 61 63 65     #region Trace
1b070 20 48 61 6e 64 6c 69 6e 67 0d 0a 20 20 20 20 20   Handling..     
1b080 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
1b090 63 20 73 74 72 69 6e 67 20 47 65 74 4c 6f 67 46  c string GetLogF
1b0a0 69 6c 65 4e 61 6d 65 28 29 0d 0a 20 20 20 20 20  ileName()..     
1b0b0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
1b0c0 20 20 73 74 72 69 6e 67 20 72 65 73 75 6c 74 20    string result 
1b0d0 3d 20 50 61 74 68 2e 47 65 74 54 65 6d 70 46 69  = Path.GetTempFi
1b0e0 6c 65 4e 61 6d 65 28 29 3b 20 2f 2a 20 74 68 72  leName(); /* thr
1b0f0 6f 77 20 2a 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  ow */....       
1b100 20 20 20 20 20 46 69 6c 65 2e 4d 6f 76 65 28 72       File.Move(r
1b110 65 73 75 6c 74 2c 20 72 65 73 75 6c 74 20 2b 20  esult, result + 
1b120 4c 6f 67 46 69 6c 65 53 75 66 66 69 78 29 3b 20  LogFileSuffix); 
1b130 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20  /* throw */..   
1b140 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 20           result 
1b150 2b 3d 20 4c 6f 67 46 69 6c 65 53 75 66 66 69 78  += LogFileSuffix
1b160 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
1b170 20 72 65 74 75 72 6e 20 72 65 73 75 6c 74 3b 0d   return result;.
1b180 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
1b190 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
1b1a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b1b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b1c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b1d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
1b1e0 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
1b1f0 20 73 74 61 74 69 63 20 76 6f 69 64 20 41 70 70   static void App
1b200 44 65 62 75 67 28 0d 0a 20 20 20 20 20 20 20 20  Debug(..        
1b210 20 20 20 20 73 74 72 69 6e 67 20 6d 65 73 73 61      string messa
1b220 67 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ge,..           
1b230 20 73 74 72 69 6e 67 20 63 61 74 65 67 6f 72 79   string category
1b240 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d  ..            ).
1b250 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
1b260 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73          TraceOps
1b270 2e 44 65 62 75 67 43 6f 72 65 28 53 74 72 69 6e  .DebugCore(Strin
1b280 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
1b290 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
1b2a0 4f 70 73 2e 44 65 62 75 67 46 6f 72 6d 61 74 2c  Ops.DebugFormat,
1b2b0 20 54 72 61 63 65 4f 70 73 2e 4e 65 78 74 44 65   TraceOps.NextDe
1b2c0 62 75 67 49 64 28 29 2c 0d 0a 20 20 20 20 20 20  bugId(),..      
1b2d0 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f            TraceO
1b2e0 70 73 2e 54 69 6d 65 53 74 61 6d 70 28 44 61 74  ps.TimeStamp(Dat
1b2f0 65 54 69 6d 65 2e 55 74 63 4e 6f 77 29 2c 20 6d  eTime.UtcNow), m
1b300 65 73 73 61 67 65 29 2c 20 63 61 74 65 67 6f 72  essage), categor
1b310 79 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  y);..        }..
1b320 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
1b330 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b340 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b350 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b360 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b370 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69  /....        pri
1b380 76 61 74 65 20 73 74 61 74 69 63 20 76 6f 69 64  vate static void
1b390 20 41 70 70 54 72 61 63 65 28 0d 0a 20 20 20 20   AppTrace(..    
1b3a0 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6d          string m
1b3b0 65 73 73 61 67 65 2c 0d 0a 20 20 20 20 20 20 20  essage,..       
1b3c0 20 20 20 20 20 73 74 72 69 6e 67 20 63 61 74 65       string cate
1b3d0 67 6f 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20  gory..          
1b3e0 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a    )..        {..
1b3f0 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
1b400 65 4f 70 73 2e 54 72 61 63 65 43 6f 72 65 28 53  eOps.TraceCore(S
1b410 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
1b420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
1b430 72 61 63 65 4f 70 73 2e 54 72 61 63 65 46 6f 72  raceOps.TraceFor
1b440 6d 61 74 2c 20 54 72 61 63 65 4f 70 73 2e 4e 65  mat, TraceOps.Ne
1b450 78 74 54 72 61 63 65 49 64 28 29 2c 0d 0a 20 20  xtTraceId(),..  
1b460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
1b470 61 63 65 4f 70 73 2e 54 69 6d 65 53 74 61 6d 70  aceOps.TimeStamp
1b480 28 44 61 74 65 54 69 6d 65 2e 55 74 63 4e 6f 77  (DateTime.UtcNow
1b490 29 2c 20 6d 65 73 73 61 67 65 29 2c 20 63 61 74  ), message), cat
1b4a0 65 67 6f 72 79 29 3b 0d 0a 20 20 20 20 20 20 20  egory);..       
1b4b0 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64   }..        #end
1b4c0 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
1b4d0 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
1b4e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b4f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b500 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b510 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
1b520 20 20 20 20 20 23 72 65 67 69 6f 6e 20 47 65 6e       #region Gen
1b530 65 72 69 63 20 53 74 72 69 6e 67 20 48 61 6e 64  eric String Hand
1b540 6c 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 70 72  ling..        pr
1b550 69 76 61 74 65 20 73 74 61 74 69 63 20 73 74 72  ivate static str
1b560 69 6e 67 20 46 6f 72 44 69 73 70 6c 61 79 28 0d  ing ForDisplay(.
1b570 0a 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a  .            obj
1b580 65 63 74 20 76 61 6c 75 65 0d 0a 20 20 20 20 20  ect value..     
1b590 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
1b5a0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
1b5b0 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75   if (value == nu
1b5c0 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
1b5d0 20 20 20 20 20 72 65 74 75 72 6e 20 22 3c 6e 75       return "<nu
1b5e0 6c 6c 3e 22 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ll>";....       
1b5f0 20 20 20 20 20 73 74 72 69 6e 67 20 72 65 73 75       string resu
1b600 6c 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  lt;..           
1b610 20 54 79 70 65 20 74 79 70 65 20 3d 20 76 61 6c   Type type = val
1b620 75 65 2e 47 65 74 54 79 70 65 28 29 3b 0d 0a 0d  ue.GetType();...
1b630 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
1b640 28 74 79 70 65 20 3d 3d 20 74 79 70 65 6f 66 28  (type == typeof(
1b650 58 6d 6c 45 6c 65 6d 65 6e 74 29 29 0d 0a 20 20  XmlElement))..  
1b660 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1b670 20 20 20 20 20 20 20 20 20 20 20 20 20 58 6d 6c               Xml
1b680 45 6c 65 6d 65 6e 74 20 65 6c 65 6d 65 6e 74 20  Element element 
1b690 3d 20 28 58 6d 6c 45 6c 65 6d 65 6e 74 29 76 61  = (XmlElement)va
1b6a0 6c 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  lue;....        
1b6b0 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 20 3d          result =
1b6c0 20 65 6c 65 6d 65 6e 74 2e 4f 75 74 65 72 58 6d   element.OuterXm
1b6d0 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l;..            
1b6e0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 65  }..            e
1b6f0 6c 73 65 20 69 66 20 28 74 79 70 65 20 3d 3d 20  lse if (type == 
1b700 74 79 70 65 6f 66 28 56 65 72 73 69 6f 6e 29 29  typeof(Version))
1b710 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
1b720 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1b730 20 56 65 72 73 69 6f 6e 20 76 65 72 73 69 6f 6e   Version version
1b740 20 3d 20 28 56 65 72 73 69 6f 6e 29 76 61 6c 75   = (Version)valu
1b750 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
1b760 20 20 20 20 20 20 72 65 73 75 6c 74 20 3d 20 53        result = S
1b770 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22 76 7b  tring.Format("v{
1b780 30 7d 22 2c 20 76 65 72 73 69 6f 6e 29 3b 0d 0a  0}", version);..
1b790 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
1b7a0 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d             else.
1b7b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
1b7c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b7d0 72 65 73 75 6c 74 20 3d 20 76 61 6c 75 65 2e 54  result = value.T
1b7e0 6f 53 74 72 69 6e 67 28 29 3b 0d 0a 0d 0a 20 20  oString();....  
1b7f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
1b800 20 28 72 65 73 75 6c 74 2e 4c 65 6e 67 74 68 20   (result.Length 
1b810 3d 3d 20 30 29 0d 0a 20 20 20 20 20 20 20 20 20  == 0)..         
1b820 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
1b830 6e 20 22 3c 65 6d 70 74 79 3e 22 3b 0d 0a 0d 0a  n "<empty>";....
1b840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b850 72 65 73 75 6c 74 20 3d 20 53 74 72 69 6e 67 2e  result = String.
1b860 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
1b870 20 20 20 20 20 20 20 20 20 20 20 20 20 74 79 70               typ
1b880 65 2e 49 73 53 75 62 63 6c 61 73 73 4f 66 28 74  e.IsSubclassOf(t
1b890 79 70 65 6f 66 28 56 61 6c 75 65 54 79 70 65 29  ypeof(ValueType)
1b8a0 29 20 3f 20 22 7b 30 7d 22 20 3a 20 22 5c 22 7b  ) ? "{0}" : "\"{
1b8b0 30 7d 5c 22 22 2c 0d 0a 20 20 20 20 20 20 20 20  0}\"",..        
1b8c0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75              resu
1b8d0 6c 74 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lt);..          
1b8e0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
1b8f0 20 20 20 72 65 74 75 72 6e 20 72 65 73 75 6c 74     return result
1b900 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  ;..        }..  
1b910 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
1b920 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
1b930 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b940 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b950 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b960 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b970 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23  ///....        #
1b980 72 65 67 69 6f 6e 20 2e 4e 45 54 20 46 72 61 6d  region .NET Fram
1b990 65 77 6f 72 6b 20 48 61 6e 64 6c 69 6e 67 0d 0a  ework Handling..
1b9a0 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
1b9b0 73 74 61 74 69 63 20 73 74 72 69 6e 67 20 47 65  static string Ge
1b9c0 74 49 6d 61 67 65 52 75 6e 74 69 6d 65 56 65 72  tImageRuntimeVer
1b9d0 73 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20  sion(..         
1b9e0 20 20 20 73 74 72 69 6e 67 20 66 69 6c 65 4e 61     string fileNa
1b9f0 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  me..            
1ba00 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
1ba10 20 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20            try.. 
1ba20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
1ba30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 41 73                As
1ba40 73 65 6d 62 6c 79 20 61 73 73 65 6d 62 6c 79 20  sembly assembly 
1ba50 3d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  =..             
1ba60 20 20 20 20 20 20 20 41 73 73 65 6d 62 6c 79 2e         Assembly.
1ba70 52 65 66 6c 65 63 74 69 6f 6e 4f 6e 6c 79 4c 6f  ReflectionOnlyLo
1ba80 61 64 46 72 6f 6d 28 66 69 6c 65 4e 61 6d 65 29  adFrom(fileName)
1ba90 3b 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 0d  ; /* throw */...
1baa0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1bab0 20 69 66 20 28 61 73 73 65 6d 62 6c 79 20 21 3d   if (assembly !=
1bac0 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
1bad0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
1bae0 72 6e 20 61 73 73 65 6d 62 6c 79 2e 49 6d 61 67  rn assembly.Imag
1baf0 65 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 3b  eRuntimeVersion;
1bb00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
1bb10 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 61 74  .            cat
1bb20 63 68 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ch..            
1bb30 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
1bb40 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67     // do nothing
1bb50 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ...            }
1bb60 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1bb70 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 20 20  return null;..  
1bb80 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
1bb90 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
1bba0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1bbb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1bbc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1bbd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
1bbe0 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
1bbf0 61 74 69 63 20 73 74 72 69 6e 67 20 47 65 74 46  atic string GetF
1bc00 72 61 6d 65 77 6f 72 6b 44 69 72 65 63 74 6f 72  rameworkDirector
1bc10 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
1bc20 52 65 67 69 73 74 72 79 4b 65 79 20 72 6f 6f 74  RegistryKey root
1bc30 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  Key,..          
1bc40 20 20 56 65 72 73 69 6f 6e 20 66 72 61 6d 65 77    Version framew
1bc50 6f 72 6b 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20  orkVersion,..   
1bc60 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68           bool wh
1bc70 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20  atIf,..         
1bc80 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 0d     bool verbose.
1bc90 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a  .            )..
1bca0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
1bcb0 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 4d 6f         using (Mo
1bcc0 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65  ckRegistryKey ke
1bcd0 79 20 3d 20 52 65 67 69 73 74 72 79 48 65 6c 70  y = RegistryHelp
1bce0 65 72 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a  er.OpenSubKey(..
1bcf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bd00 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 46 72 61      rootKey, Fra
1bd10 6d 65 77 6f 72 6b 4b 65 79 4e 61 6d 65 2c 20 66  meworkKeyName, f
1bd20 61 6c 73 65 2c 20 77 68 61 74 49 66 2c 20 76 65  alse, whatIf, ve
1bd30 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20  rbose))..       
1bd40 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1bd50 20 20 20 20 20 20 20 20 69 66 20 28 6b 65 79 20          if (key 
1bd60 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
1bd70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
1bd80 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20  turn null;....  
1bd90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f 62                ob
1bda0 6a 65 63 74 20 76 61 6c 75 65 20 3d 20 52 65 67  ject value = Reg
1bdb0 69 73 74 72 79 48 65 6c 70 65 72 2e 47 65 74 56  istryHelper.GetV
1bdc0 61 6c 75 65 28 0d 0a 20 20 20 20 20 20 20 20 20  alue(..         
1bdd0 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 2c 20             key, 
1bde0 22 49 6e 73 74 61 6c 6c 52 6f 6f 74 22 2c 20 6e  "InstallRoot", n
1bdf0 75 6c 6c 2c 20 77 68 61 74 49 66 2c 20 76 65 72  ull, whatIf, ver
1be00 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  bose);....      
1be10 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21 28            if (!(
1be20 76 61 6c 75 65 20 69 73 20 73 74 72 69 6e 67 29  value is string)
1be30 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
1be40 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75         return nu
1be50 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ll;....         
1be60 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 50 61         return Pa
1be70 74 68 2e 43 6f 6d 62 69 6e 65 28 0d 0a 20 20 20  th.Combine(..   
1be80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1be90 20 28 73 74 72 69 6e 67 29 76 61 6c 75 65 2c 20   (string)value, 
1bea0 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22 76  String.Format("v
1beb0 7b 30 7d 22 2c 20 66 72 61 6d 65 77 6f 72 6b 56  {0}", frameworkV
1bec0 65 72 73 69 6f 6e 29 29 3b 0d 0a 20 20 20 20 20  ersion));..     
1bed0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
1bee0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f    }....        /
1bef0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1bf00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1bf10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1bf20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1bf30 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
1bf40 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
1bf50 20 73 74 72 69 6e 67 20 47 65 74 53 64 6b 42 69   string GetSdkBi
1bf60 6e 61 72 79 46 69 6c 65 4e 61 6d 65 28 0d 0a 20  naryFileName(.. 
1bf70 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73             Regis
1bf80 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d  tryKey rootKey,.
1bf90 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72  .            str
1bfa0 69 6e 67 20 66 69 6c 65 4e 61 6d 65 2c 0d 0a 20  ing fileName,.. 
1bfb0 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
1bfc0 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20  whatIf,..       
1bfd0 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73       bool verbos
1bfe0 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29  e..            )
1bff0 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
1c000 20 20 20 20 20 20 20 20 20 53 74 72 69 6e 67 44           StringD
1c010 69 63 74 69 6f 6e 61 72 79 20 72 65 73 75 6c 74  ictionary result
1c020 73 20 3d 20 6e 65 77 20 53 74 72 69 6e 67 44 69  s = new StringDi
1c030 63 74 69 6f 6e 61 72 79 28 29 3b 0d 0a 0d 0a 20  ctionary();.... 
1c040 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
1c050 67 5b 5d 20 6b 65 79 4e 61 6d 65 73 20 3d 20 7b  g[] keyNames = {
1c060 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1c070 20 20 46 72 61 6d 65 77 6f 72 6b 4b 65 79 4e 61    FrameworkKeyNa
1c080 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me,..           
1c090 20 20 20 20 20 46 72 61 6d 65 77 6f 72 6b 53 64       FrameworkSd
1c0a0 6b 4b 65 79 4e 61 6d 65 2c 0d 0a 20 20 20 20 20  kKeyName,..     
1c0b0 20 20 20 20 20 20 20 20 20 20 20 57 69 6e 64 6f             Windo
1c0c0 77 73 53 64 6b 4b 65 79 4e 61 6d 65 0d 0a 20 20  wsSdkKeyName..  
1c0d0 20 20 20 20 20 20 20 20 20 20 7d 3b 0d 0a 0d 0a            };....
1c0e0 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
1c0f0 6e 67 5b 5d 20 76 61 6c 75 65 4e 61 6d 65 73 20  ng[] valueNames 
1c100 3d 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  = {..           
1c110 20 20 20 20 20 22 73 64 6b 49 6e 73 74 61 6c 6c       "sdkInstall
1c120 52 6f 6f 74 76 32 2e 30 22 2c 0d 0a 20 20 20 20  Rootv2.0",..    
1c130 20 20 20 20 20 20 20 20 20 20 20 20 22 49 6e 73              "Ins
1c140 74 61 6c 6c 61 74 69 6f 6e 46 6f 6c 64 65 72 22  tallationFolder"
1c150 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
1c160 20 20 20 22 49 6e 73 74 61 6c 6c 61 74 69 6f 6e     "Installation
1c170 46 6f 6c 64 65 72 22 0d 0a 20 20 20 20 20 20 20  Folder"..       
1c180 20 20 20 20 20 7d 3b 0d 0a 0d 0a 20 20 20 20 20       };....     
1c190 20 20 20 20 20 20 20 62 6f 6f 6c 5b 5d 20 75 73         bool[] us
1c1a0 65 53 75 62 4b 65 79 73 20 3d 20 7b 0d 0a 20 20  eSubKeys = {..  
1c1b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 61                fa
1c1c0 6c 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  lse,..          
1c1d0 20 20 20 20 20 20 74 72 75 65 2c 0d 0a 20 20 20        true,..   
1c1e0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 75               tru
1c1f0 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  e..            }
1c200 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
1c210 20 66 6f 72 20 28 69 6e 74 20 69 6e 64 65 78 20   for (int index 
1c220 3d 20 30 3b 20 69 6e 64 65 78 20 3c 20 6b 65 79  = 0; index < key
1c230 4e 61 6d 65 73 2e 4c 65 6e 67 74 68 3b 20 69 6e  Names.Length; in
1c240 64 65 78 2b 2b 29 0d 0a 20 20 20 20 20 20 20 20  dex++)..        
1c250 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1c260 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 4d 6f         using (Mo
1c270 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65  ckRegistryKey ke
1c280 79 20 3d 20 52 65 67 69 73 74 72 79 48 65 6c 70  y = RegistryHelp
1c290 65 72 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a  er.OpenSubKey(..
1c2a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c2b0 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c          rootKey,
1c2c0 20 6b 65 79 4e 61 6d 65 73 5b 69 6e 64 65 78 5d   keyNames[index]
1c2d0 2c 20 66 61 6c 73 65 2c 20 77 68 61 74 49 66 2c  , false, whatIf,
1c2e0 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20   verbose))..    
1c2f0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
1c300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c310 20 20 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75     if (key == nu
1c320 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
1c330 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
1c340 74 69 6e 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  tinue;....      
1c350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
1c360 20 28 75 73 65 53 75 62 4b 65 79 73 5b 69 6e 64   (useSubKeys[ind
1c370 65 78 5d 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ex])..          
1c380 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1c390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c3a0 20 20 20 20 20 66 6f 72 65 61 63 68 20 28 73 74       foreach (st
1c3b0 72 69 6e 67 20 73 75 62 4b 65 79 4e 61 6d 65 20  ring subKeyName 
1c3c0 69 6e 20 52 65 67 69 73 74 72 79 48 65 6c 70 65  in RegistryHelpe
1c3d0 72 2e 47 65 74 53 75 62 4b 65 79 4e 61 6d 65 73  r.GetSubKeyNames
1c3e0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
1c3f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c400 20 20 20 6b 65 79 2c 20 77 68 61 74 49 66 2c 20     key, whatIf, 
1c410 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20  verbose))..     
1c420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c430 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
1c440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c450 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67    using (MockReg
1c460 69 73 74 72 79 4b 65 79 20 73 75 62 4b 65 79 20  istryKey subKey 
1c470 3d 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72  = RegistryHelper
1c480 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20  .OpenSubKey(..  
1c490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c4a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c4b0 20 20 6b 65 79 2c 20 73 75 62 4b 65 79 4e 61 6d    key, subKeyNam
1c4c0 65 2c 20 66 61 6c 73 65 2c 20 77 68 61 74 49 66  e, false, whatIf
1c4d0 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20  , verbose))..   
1c4e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c4f0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
1c500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c510 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
1c520 73 75 62 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d  subKey == null).
1c530 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1c540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c550 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a       continue;..
1c560 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1c570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c580 20 20 6f 62 6a 65 63 74 20 76 61 6c 75 65 20 3d    object value =
1c590 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e   RegistryHelper.
1c5a0 47 65 74 56 61 6c 75 65 28 0d 0a 20 20 20 20 20  GetValue(..     
1c5b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c5c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
1c5d0 75 62 4b 65 79 2c 20 76 61 6c 75 65 4e 61 6d 65  ubKey, valueName
1c5e0 73 5b 69 6e 64 65 78 5d 2c 20 6e 75 6c 6c 2c 20  s[index], null, 
1c5f0 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20  whatIf,..       
1c600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c610 20 20 20 20 20 20 20 20 20 20 20 20 20 76 65 72               ver
1c620 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  bose);....      
1c630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c640 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21 28            if (!(
1c650 76 61 6c 75 65 20 69 73 20 73 74 72 69 6e 67 29  value is string)
1c660 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
1c670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c680 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b         continue;
1c690 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1c6a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c6b0 20 20 20 20 73 74 72 69 6e 67 20 70 61 74 68 20      string path 
1c6c0 3d 20 28 73 74 72 69 6e 67 29 76 61 6c 75 65 3b  = (string)value;
1c6d0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1c6e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c6f0 20 20 20 20 69 66 20 28 21 44 69 72 65 63 74 6f      if (!Directo
1c700 72 79 2e 45 78 69 73 74 73 28 70 61 74 68 29 29  ry.Exists(path))
1c710 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1c720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c730 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d        continue;.
1c740 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1c750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c760 20 20 20 70 61 74 68 20 3d 20 50 61 74 68 2e 43     path = Path.C
1c770 6f 6d 62 69 6e 65 28 70 61 74 68 2c 20 22 62 69  ombine(path, "bi
1c780 6e 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  n");....        
1c790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c7a0 20 20 20 20 20 20 20 20 69 66 20 28 21 44 69 72          if (!Dir
1c7b0 65 63 74 6f 72 79 2e 45 78 69 73 74 73 28 70 61  ectory.Exists(pa
1c7c0 74 68 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  th))..          
1c7d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c7e0 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e            contin
1c7f0 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ue;....         
1c800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c810 20 20 20 20 20 20 20 69 66 20 28 53 74 72 69 6e         if (Strin
1c820 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28  g.IsNullOrEmpty(
1c830 66 69 6c 65 4e 61 6d 65 29 29 0d 0a 20 20 20 20  fileName))..    
1c840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c850 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
1c860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c880 20 20 20 72 65 73 75 6c 74 73 2e 41 64 64 28 73     results.Add(s
1c890 75 62 4b 65 79 2e 4e 61 6d 65 2c 20 70 61 74 68  ubKey.Name, path
1c8a0 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
1c8b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c8c0 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65          continue
1c8d0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
1c8e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c8f0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
1c900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c910 20 20 20 20 20 20 20 20 70 61 74 68 20 3d 20 50          path = P
1c920 61 74 68 2e 43 6f 6d 62 69 6e 65 28 70 61 74 68  ath.Combine(path
1c930 2c 20 66 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a  , fileName);....
1c940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c960 69 66 20 28 46 69 6c 65 2e 45 78 69 73 74 73 28  if (File.Exists(
1c970 70 61 74 68 29 29 0d 0a 20 20 20 20 20 20 20 20  path))..        
1c980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c990 20 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75              resu
1c9a0 6c 74 73 2e 41 64 64 28 73 75 62 4b 65 79 2e 4e  lts.Add(subKey.N
1c9b0 61 6d 65 2c 20 70 61 74 68 29 3b 0d 0a 20 20 20  ame, path);..   
1c9c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c9d0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
1c9e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c9f0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
1ca00 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
1ca10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ca20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20    else..        
1ca30 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
1ca40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ca50 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 76 61         object va
1ca60 6c 75 65 20 3d 20 52 65 67 69 73 74 72 79 48 65  lue = RegistryHe
1ca70 6c 70 65 72 2e 47 65 74 56 61 6c 75 65 28 0d 0a  lper.GetValue(..
1ca80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ca90 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 2c              key,
1caa0 20 76 61 6c 75 65 4e 61 6d 65 73 5b 69 6e 64 65   valueNames[inde
1cab0 78 5d 2c 20 6e 75 6c 6c 2c 20 77 68 61 74 49 66  x], null, whatIf
1cac0 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20  , verbose);.... 
1cad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cae0 20 20 20 20 20 20 20 69 66 20 28 21 28 76 61 6c         if (!(val
1caf0 75 65 20 69 73 20 73 74 72 69 6e 67 29 29 0d 0a  ue is string))..
1cb00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cb10 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74              cont
1cb20 69 6e 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  inue;....       
1cb30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cb40 20 73 74 72 69 6e 67 20 70 61 74 68 20 3d 20 28   string path = (
1cb50 73 74 72 69 6e 67 29 76 61 6c 75 65 3b 0d 0a 0d  string)value;...
1cb60 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1cb70 20 20 20 20 20 20 20 20 20 69 66 20 28 21 44 69           if (!Di
1cb80 72 65 63 74 6f 72 79 2e 45 78 69 73 74 73 28 70  rectory.Exists(p
1cb90 61 74 68 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ath))..         
1cba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cbb0 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 0d 0a     continue;....
1cbc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cbd0 20 20 20 20 20 20 20 20 70 61 74 68 20 3d 20 50          path = P
1cbe0 61 74 68 2e 43 6f 6d 62 69 6e 65 28 70 61 74 68  ath.Combine(path
1cbf0 2c 20 22 62 69 6e 22 29 3b 0d 0a 0d 0a 20 20 20  , "bin");....   
1cc00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cc10 20 20 20 20 20 69 66 20 28 21 44 69 72 65 63 74       if (!Direct
1cc20 6f 72 79 2e 45 78 69 73 74 73 28 70 61 74 68 29  ory.Exists(path)
1cc30 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
1cc40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
1cc50 6f 6e 74 69 6e 75 65 3b 0d 0a 0d 0a 20 20 20 20  ontinue;....    
1cc60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cc70 20 20 20 20 69 66 20 28 53 74 72 69 6e 67 2e 49      if (String.I
1cc80 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 66 69 6c  sNullOrEmpty(fil
1cc90 65 4e 61 6d 65 29 29 0d 0a 20 20 20 20 20 20 20  eName))..       
1cca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ccb0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1ccc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ccd0 72 65 73 75 6c 74 73 2e 41 64 64 28 6b 65 79 2e  results.Add(key.
1cce0 4e 61 6d 65 2c 20 70 61 74 68 29 3b 0d 0a 20 20  Name, path);..  
1ccf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cd00 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e            contin
1cd10 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
1cd20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
1cd30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1cd40 20 20 20 20 20 20 20 20 20 20 70 61 74 68 20 3d            path =
1cd50 20 50 61 74 68 2e 43 6f 6d 62 69 6e 65 28 70 61   Path.Combine(pa
1cd60 74 68 2c 20 66 69 6c 65 4e 61 6d 65 29 3b 0d 0a  th, fileName);..
1cd70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1cd80 20 20 20 20 20 20 20 20 20 20 69 66 20 28 46 69            if (Fi
1cd90 6c 65 2e 45 78 69 73 74 73 28 70 61 74 68 29 29  le.Exists(path))
1cda0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1cdb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
1cdc0 73 75 6c 74 73 2e 41 64 64 28 6b 65 79 2e 4e 61  sults.Add(key.Na
1cdd0 6d 65 2c 20 70 61 74 68 29 3b 0d 0a 20 20 20 20  me, path);..    
1cde0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cdf0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
1ce00 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
1ce10 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
1ce20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
1ce30 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 49 66 20 77     // NOTE: If w
1ce40 65 20 66 6f 75 6e 64 20 73 6f 6d 65 20 72 65 73  e found some res
1ce50 75 6c 74 73 2c 20 72 65 74 75 72 6e 20 74 68 65  ults, return the
1ce60 20 6c 61 73 74 20 28 6c 61 74 65 73 74 29 20 6f   last (latest) o
1ce70 6e 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ne...           
1ce80 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
1ce90 20 69 66 20 28 72 65 73 75 6c 74 73 2e 43 6f 75   if (results.Cou
1cea0 6e 74 20 3e 20 30 29 0d 0a 20 20 20 20 20 20 20  nt > 0)..       
1ceb0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
1cec0 72 65 73 75 6c 74 73 5b 6e 65 77 20 53 74 72 69  results[new Stri
1ced0 6e 67 4c 69 73 74 28 72 65 73 75 6c 74 73 2e 4b  ngList(results.K
1cee0 65 79 73 29 5b 72 65 73 75 6c 74 73 2e 43 6f 75  eys)[results.Cou
1cef0 6e 74 20 2d 20 31 5d 5d 3b 0d 0a 0d 0a 20 20 20  nt - 1]];....   
1cf00 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
1cf10 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 7d  null;..        }
1cf20 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65  ..        #endre
1cf30 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
1cf40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cf50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cf60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cf70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cf80 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
1cf90 20 20 20 23 72 65 67 69 6f 6e 20 50 65 72 2d 46     #region Per-F
1cfa0 72 61 6d 65 77 6f 72 6b 2f 50 6c 61 74 66 6f 72  ramework/Platfor
1cfb0 6d 20 48 61 6e 64 6c 69 6e 67 0d 0a 20 20 20 20  m Handling..    
1cfc0 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74      private stat
1cfd0 69 63 20 76 6f 69 64 20 49 6e 69 74 69 61 6c 69  ic void Initiali
1cfe0 7a 65 46 72 61 6d 65 77 6f 72 6b 4c 69 73 74 28  zeFrameworkList(
1cff0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 43 6f  ..            Co
1d000 6e 66 69 67 75 72 61 74 69 6f 6e 20 63 6f 6e 66  nfiguration conf
1d010 69 67 75 72 61 74 69 6f 6e 2c 0d 0a 20 20 20 20  iguration,..    
1d020 20 20 20 20 20 20 20 20 72 65 66 20 46 72 61 6d          ref Fram
1d030 65 77 6f 72 6b 4c 69 73 74 20 66 72 61 6d 65 77  eworkList framew
1d040 6f 72 6b 4c 69 73 74 0d 0a 20 20 20 20 20 20 20  orkList..       
1d050 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
1d060 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  {..            i
1d070 66 20 28 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74  f (frameworkList
1d080 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
1d090 20 20 20 20 20 20 20 20 20 20 20 66 72 61 6d 65             frame
1d0a0 77 6f 72 6b 4c 69 73 74 20 3d 20 6e 65 77 20 46  workList = new F
1d0b0 72 61 6d 65 77 6f 72 6b 4c 69 73 74 28 29 3b 0d  rameworkList();.
1d0c0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
1d0d0 66 20 28 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74  f (frameworkList
1d0e0 2e 52 6f 6f 74 4b 65 79 20 3d 3d 20 6e 75 6c 6c  .RootKey == null
1d0f0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
1d100 20 20 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74     frameworkList
1d110 2e 52 6f 6f 74 4b 65 79 20 3d 20 52 65 67 69 73  .RootKey = Regis
1d120 74 72 79 2e 4c 6f 63 61 6c 4d 61 63 68 69 6e 65  try.LocalMachine
1d130 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
1d140 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
1d150 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d160 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d170 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d180 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
1d190 20 20 20 20 69 66 20 28 66 72 61 6d 65 77 6f 72      if (framewor
1d1a0 6b 4c 69 73 74 2e 4e 61 6d 65 73 20 3d 3d 20 6e  kList.Names == n
1d1b0 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
1d1c0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
1d1d0 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4c 69       frameworkLi
1d1e0 73 74 2e 4e 61 6d 65 73 20 3d 20 6e 65 77 20 53  st.Names = new S
1d1f0 74 72 69 6e 67 4c 69 73 74 28 29 3b 0d 0a 0d 0a  tringList();....
1d200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d210 69 66 20 28 28 63 6f 6e 66 69 67 75 72 61 74 69  if ((configurati
1d220 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 21  on == null) || !
1d230 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 4e 6f  configuration.No
1d240 44 65 73 6b 74 6f 70 29 0d 0a 20 20 20 20 20 20  Desktop)..      
1d250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 72                fr
1d260 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e 61 6d 65  ameworkList.Name
1d270 73 2e 41 64 64 28 22 2e 4e 45 54 46 72 61 6d 65  s.Add(".NETFrame
1d280 77 6f 72 6b 22 29 3b 0d 0a 0d 0a 20 20 20 20 20  work");....     
1d290 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 28             if ((
1d2a0 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d  configuration ==
1d2b0 20 6e 75 6c 6c 29 20 7c 7c 20 21 63 6f 6e 66 69   null) || !confi
1d2c0 67 75 72 61 74 69 6f 6e 2e 4e 6f 43 6f 6d 70 61  guration.NoCompa
1d2d0 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ct)..           
1d2e0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1d2f0 20 20 20 20 20 20 20 20 20 20 20 20 66 72 61 6d              fram
1d300 65 77 6f 72 6b 4c 69 73 74 2e 4e 61 6d 65 73 2e  eworkList.Names.
1d310 41 64 64 28 22 2e 4e 45 54 43 6f 6d 70 61 63 74  Add(".NETCompact
1d320 46 72 61 6d 65 77 6f 72 6b 22 29 3b 0d 0a 20 20  Framework");..  
1d330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d340 20 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e    frameworkList.
1d350 4e 61 6d 65 73 2e 41 64 64 28 22 2e 4e 45 54 43  Names.Add(".NETC
1d360 6f 6d 70 61 63 74 46 72 61 6d 65 77 6f 72 6b 22  ompactFramework"
1d370 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
1d380 20 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72          framewor
1d390 6b 4c 69 73 74 2e 4e 61 6d 65 73 2e 41 64 64 28  kList.Names.Add(
1d3a0 22 2e 4e 45 54 43 6f 6d 70 61 63 74 46 72 61 6d  ".NETCompactFram
1d3b0 65 77 6f 72 6b 22 29 3b 0d 0a 20 20 20 20 20 20  ework");..      
1d3c0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
1d3d0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
1d3e0 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
1d3f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d400 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d410 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d420 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
1d430 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
1d440 28 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 56  (frameworkList.V
1d450 65 72 73 69 6f 6e 73 20 3d 3d 20 6e 75 6c 6c 29  ersions == null)
1d460 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
1d470 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1d480 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 56   frameworkList.V
1d490 65 72 73 69 6f 6e 73 20 3d 20 6e 65 77 20 56 65  ersions = new Ve
1d4a0 72 73 69 6f 6e 4d 61 70 28 29 3b 0d 0a 0d 0a 20  rsionMap();.... 
1d4b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
1d4c0 66 20 28 28 63 6f 6e 66 69 67 75 72 61 74 69 6f  f ((configuratio
1d4d0 6e 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 21 63  n == null) || !c
1d4e0 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 4e 6f 44  onfiguration.NoD
1d4f0 65 73 6b 74 6f 70 29 0d 0a 20 20 20 20 20 20 20  esktop)..       
1d500 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
1d510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d520 56 65 72 73 69 6f 6e 4c 69 73 74 20 64 65 73 6b  VersionList desk
1d530 74 6f 70 56 65 72 73 69 6f 6e 4c 69 73 74 20 3d  topVersionList =
1d540 20 6e 65 77 20 56 65 72 73 69 6f 6e 4c 69 73 74   new VersionList
1d550 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ();....         
1d560 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 28             if ((
1d570 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d  configuration ==
1d580 20 6e 75 6c 6c 29 20 7c 7c 20 21 63 6f 6e 66 69   null) || !confi
1d590 67 75 72 61 74 69 6f 6e 2e 4e 6f 4e 65 74 46 78  guration.NoNetFx
1d5a0 32 30 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  20)..           
1d5b0 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65 73               des
1d5c0 6b 74 6f 70 56 65 72 73 69 6f 6e 4c 69 73 74 2e  ktopVersionList.
1d5d0 41 64 64 28 6e 65 77 20 56 65 72 73 69 6f 6e 28  Add(new Version(
1d5e0 32 2c 20 30 2c 20 35 30 37 32 37 29 29 3b 0d 0a  2, 0, 50727));..
1d5f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1d600 20 20 20 20 20 20 69 66 20 28 28 63 6f 6e 66 69        if ((confi
1d610 67 75 72 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c  guration == null
1d620 29 20 7c 7c 20 21 63 6f 6e 66 69 67 75 72 61 74  ) || !configurat
1d630 69 6f 6e 2e 4e 6f 4e 65 74 46 78 34 30 29 0d 0a  ion.NoNetFx40)..
1d640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d650 20 20 20 20 20 20 20 20 64 65 73 6b 74 6f 70 56          desktopV
1d660 65 72 73 69 6f 6e 4c 69 73 74 2e 41 64 64 28 6e  ersionList.Add(n
1d670 65 77 20 56 65 72 73 69 6f 6e 28 34 2c 20 30 2c  ew Version(4, 0,
1d680 20 33 30 33 31 39 29 29 3b 0d 0a 0d 0a 20 20 20   30319));....   
1d690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d6a0 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 56   frameworkList.V
1d6b0 65 72 73 69 6f 6e 73 2e 41 64 64 28 22 2e 4e 45  ersions.Add(".NE
1d6c0 54 46 72 61 6d 65 77 6f 72 6b 22 2c 0d 0a 20 20  TFramework",..  
1d6d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d6e0 20 20 20 20 20 20 64 65 73 6b 74 6f 70 56 65 72        desktopVer
1d6f0 73 69 6f 6e 4c 69 73 74 29 3b 0d 0a 20 20 20 20  sionList);..    
1d700 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
1d710 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1d720 20 69 66 20 28 28 63 6f 6e 66 69 67 75 72 61 74   if ((configurat
1d730 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20  ion == null) || 
1d740 21 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 4e  !configuration.N
1d750 6f 43 6f 6d 70 61 63 74 29 0d 0a 20 20 20 20 20  oCompact)..     
1d760 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
1d770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d780 20 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e    frameworkList.
1d790 56 65 72 73 69 6f 6e 73 2e 41 64 64 28 22 2e 4e  Versions.Add(".N
1d7a0 45 54 43 6f 6d 70 61 63 74 46 72 61 6d 65 77 6f  ETCompactFramewo
1d7b0 72 6b 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  rk",..          
1d7c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 65                ne
1d7d0 77 20 56 65 72 73 69 6f 6e 4c 69 73 74 28 6e 65  w VersionList(ne
1d7e0 77 20 56 65 72 73 69 6f 6e 5b 5d 20 7b 0d 0a 20  w Version[] {.. 
1d7f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d800 20 20 20 20 20 20 20 6e 65 77 20 56 65 72 73 69         new Versi
1d810 6f 6e 28 32 2c 20 30 2c 20 30 2c 20 30 29 2c 20  on(2, 0, 0, 0), 
1d820 6e 65 77 20 56 65 72 73 69 6f 6e 28 33 2c 20 35  new Version(3, 5
1d830 2c 20 30 2c 20 30 29 0d 0a 20 20 20 20 20 20 20  , 0, 0)..       
1d840 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 29 29               }))
1d850 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
1d860 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
1d870 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
1d880 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
1d890 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d8a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d8b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d8c0 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
1d8d0 20 20 20 20 20 20 69 66 20 28 66 72 61 6d 65 77        if (framew
1d8e0 6f 72 6b 4c 69 73 74 2e 50 6c 61 74 66 6f 72 6d  orkList.Platform
1d8f0 4e 61 6d 65 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  Names == null)..
1d900 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
1d910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66                 f
1d920 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 50 6c 61  rameworkList.Pla
1d930 74 66 6f 72 6d 4e 61 6d 65 73 20 3d 20 6e 65 77  tformNames = new
1d940 20 53 74 72 69 6e 67 4c 69 73 74 28 29 3b 0d 0a   StringList();..
1d950 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1d960 20 20 69 66 20 28 28 63 6f 6e 66 69 67 75 72 61    if ((configura
1d970 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c  tion == null) ||
1d980 20 21 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e   !configuration.
1d990 4e 6f 44 65 73 6b 74 6f 70 29 0d 0a 20 20 20 20  NoDesktop)..    
1d9a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d9b0 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 50 6c  frameworkList.Pl
1d9c0 61 74 66 6f 72 6d 4e 61 6d 65 73 2e 41 64 64 28  atformNames.Add(
1d9d0 6e 75 6c 6c 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  null);....      
1d9e0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 28 63            if ((c
1d9f0 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20  onfiguration == 
1da00 6e 75 6c 6c 29 20 7c 7c 20 21 63 6f 6e 66 69 67  null) || !config
1da10 75 72 61 74 69 6f 6e 2e 4e 6f 43 6f 6d 70 61 63  uration.NoCompac
1da20 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t)..            
1da30 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1da40 20 20 20 20 20 20 20 20 20 20 20 66 72 61 6d 65             frame
1da50 77 6f 72 6b 4c 69 73 74 2e 50 6c 61 74 66 6f 72  workList.Platfor
1da60 6d 4e 61 6d 65 73 2e 41 64 64 28 22 50 6f 63 6b  mNames.Add("Pock
1da70 65 74 50 43 22 29 3b 0d 0a 20 20 20 20 20 20 20  etPC");..       
1da80 20 20 20 20 20 20 20 20 20 20 20 20 20 66 72 61               fra
1da90 6d 65 77 6f 72 6b 4c 69 73 74 2e 50 6c 61 74 66  meworkList.Platf
1daa0 6f 72 6d 4e 61 6d 65 73 2e 41 64 64 28 22 53 6d  ormNames.Add("Sm
1dab0 61 72 74 70 68 6f 6e 65 22 29 3b 0d 0a 20 20 20  artphone");..   
1dac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dad0 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 50   frameworkList.P
1dae0 6c 61 74 66 6f 72 6d 4e 61 6d 65 73 2e 41 64 64  latformNames.Add
1daf0 28 22 57 69 6e 64 6f 77 73 43 45 22 29 3b 0d 0a  ("WindowsCE");..
1db00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1db10 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
1db20 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
1db30 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
1db40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1db50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a  //////////////..
1db80 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
1db90 65 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 48 61  e static bool Ha
1dba0 76 65 46 72 61 6d 65 77 6f 72 6b 28 0d 0a 20 20  veFramework(..  
1dbb0 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74            Regist
1dbc0 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a  ryKey rootKey,..
1dbd0 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
1dbe0 6e 67 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65  ng frameworkName
1dbf0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 56  ,..            V
1dc00 65 72 73 69 6f 6e 20 66 72 61 6d 65 77 6f 72 6b  ersion framework
1dc10 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20  Version,..      
1dc20 20 20 20 20 20 20 73 74 72 69 6e 67 20 70 6c 61        string pla
1dc30 74 66 6f 72 6d 4e 61 6d 65 2c 0d 0a 20 20 20 20  tformName,..    
1dc40 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61          bool wha
1dc50 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf,..          
1dc60 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 0d 0a    bool verbose..
1dc70 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
1dc80 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
1dc90 20 20 20 20 20 20 73 74 72 69 6e 67 20 66 6f 72        string for
1dca0 6d 61 74 20 3d 20 21 53 74 72 69 6e 67 2e 49 73  mat = !String.Is
1dcb0 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 70 6c 61 74  NullOrEmpty(plat
1dcc0 66 6f 72 6d 4e 61 6d 65 29 20 3f 0d 0a 20 20 20  formName) ?..   
1dcd0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 53 6f               "So
1dce0 66 74 77 61 72 65 5c 5c 4d 69 63 72 6f 73 6f 66  ftware\\Microsof
1dcf0 74 5c 5c 7b 30 7d 5c 5c 76 7b 31 7d 5c 5c 7b 32  t\\{0}\\v{1}\\{2
1dd00 7d 22 20 3a 0d 0a 20 20 20 20 20 20 20 20 20 20  }" :..          
1dd10 20 20 20 20 20 20 22 53 6f 66 74 77 61 72 65 5c        "Software\
1dd20 5c 4d 69 63 72 6f 73 6f 66 74 5c 5c 7b 30 7d 5c  \Microsoft\\{0}\
1dd30 5c 76 7b 31 7d 22 3b 0d 0a 0d 0a 20 20 20 20 20  \v{1}";....     
1dd40 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6b 65         string ke
1dd50 79 4e 61 6d 65 20 3d 20 53 74 72 69 6e 67 2e 46  yName = String.F
1dd60 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
1dd70 20 20 20 20 20 20 20 20 66 6f 72 6d 61 74 2c 20          format, 
1dd80 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 20 66  frameworkName, f
1dd90 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c  rameworkVersion,
1dda0 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 29 3b 0d   platformName);.
1ddb0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 75  ...            u
1ddc0 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74  sing (MockRegist
1ddd0 72 79 4b 65 79 20 6b 65 79 20 3d 20 52 65 67 69  ryKey key = Regi
1dde0 73 74 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53  stryHelper.OpenS
1ddf0 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20  ubKey(..        
1de00 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74              root
1de10 4b 65 79 2c 20 6b 65 79 4e 61 6d 65 2c 20 66 61  Key, keyName, fa
1de20 6c 73 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72  lse, whatIf, ver
1de30 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20  bose))..        
1de40 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1de50 20 20 20 20 20 20 20 69 66 20 28 6b 65 79 20 3d         if (key =
1de60 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
1de70 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
1de80 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20  urn false;....  
1de90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
1dea0 20 28 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 20 21   (platformName !
1deb0 3d 20 6e 75 6c 6c 29 20 2f 2f 20 4e 4f 54 45 3a  = null) // NOTE:
1dec0 20 53 6b 69 70 20 6e 6f 6e 2d 64 65 73 6b 74 6f   Skip non-deskto
1ded0 70 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  p...            
1dee0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74          return t
1def0 72 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  rue;....        
1df00 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 64          string d
1df10 69 72 65 63 74 6f 72 79 20 3d 20 47 65 74 46 72  irectory = GetFr
1df20 61 6d 65 77 6f 72 6b 44 69 72 65 63 74 6f 72 79  ameworkDirectory
1df30 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
1df40 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20         rootKey, 
1df50 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e  frameworkVersion
1df60 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73  , whatIf, verbos
1df70 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
1df80 20 20 20 20 20 20 20 69 66 20 28 53 74 72 69 6e         if (Strin
1df90 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28  g.IsNullOrEmpty(
1dfa0 64 69 72 65 63 74 6f 72 79 29 29 0d 0a 20 20 20  directory))..   
1dfb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dfc0 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
1dfd0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1dfe0 20 20 69 66 20 28 21 44 69 72 65 63 74 6f 72 79    if (!Directory
1dff0 2e 45 78 69 73 74 73 28 64 69 72 65 63 74 6f 72  .Exists(director
1e000 79 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  y))..           
1e010 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
1e020 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  false;....      
1e030 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
1e040 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20   true;..        
1e050 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d      }..        }
1e060 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
1e070 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e080 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e090 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e0a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e0b0 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70  ///....        p
1e0c0 72 69 76 61 74 65 20 73 74 61 74 69 63 20 62 6f  rivate static bo
1e0d0 6f 6c 20 46 6f 72 45 61 63 68 46 72 61 6d 65 77  ol ForEachFramew
1e0e0 6f 72 6b 43 6f 6e 66 69 67 28 0d 0a 20 20 20 20  orkConfig(..    
1e0f0 20 20 20 20 20 20 20 20 46 72 61 6d 65 77 6f 72          Framewor
1e100 6b 4c 69 73 74 20 66 72 61 6d 65 77 6f 72 6b 4c  kList frameworkL
1e110 69 73 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ist,..          
1e120 20 20 46 72 61 6d 65 77 6f 72 6b 43 6f 6e 66 69    FrameworkConfi
1e130 67 43 61 6c 6c 62 61 63 6b 20 63 61 6c 6c 62 61  gCallback callba
1e140 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ck,..           
1e150 20 73 74 72 69 6e 67 20 69 6e 76 61 72 69 61 6e   string invarian
1e160 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t,..            
1e170 73 74 72 69 6e 67 20 6e 61 6d 65 2c 0d 0a 20 20  string name,..  
1e180 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
1e190 20 64 65 73 63 72 69 70 74 69 6f 6e 2c 0d 0a 20   description,.. 
1e1a0 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
1e1b0 67 20 74 79 70 65 4e 61 6d 65 2c 0d 0a 20 20 20  g typeName,..   
1e1c0 20 20 20 20 20 20 20 20 20 41 73 73 65 6d 62 6c           Assembl
1e1d0 79 4e 61 6d 65 20 61 73 73 65 6d 62 6c 79 4e 61  yName assemblyNa
1e1e0 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me,..           
1e1f0 20 6f 62 6a 65 63 74 20 63 6c 69 65 6e 74 44 61   object clientDa
1e200 74 61 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ta,..           
1e210 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20   bool whatIf,.. 
1e220 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
1e230 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20  verbose,..      
1e240 20 20 20 20 20 20 72 65 66 20 62 6f 6f 6c 20 73        ref bool s
1e250 61 76 65 64 2c 0d 0a 20 20 20 20 20 20 20 20 20  aved,..         
1e260 20 20 20 72 65 66 20 73 74 72 69 6e 67 20 65 72     ref string er
1e270 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ror..           
1e280 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20   )..        {.. 
1e290 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 66             if (f
1e2a0 72 61 6d 65 77 6f 72 6b 4c 69 73 74 20 3d 3d 20  rameworkList == 
1e2b0 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
1e2c0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
1e2d0 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69        error = "i
1e2e0 6e 76 61 6c 69 64 20 66 72 61 6d 65 77 6f 72 6b  nvalid framework
1e2f0 20 6c 69 73 74 22 3b 0d 0a 20 20 20 20 20 20 20   list";..       
1e300 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
1e310 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
1e320 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
1e330 20 20 20 20 20 52 65 67 69 73 74 72 79 4b 65 79       RegistryKey
1e340 20 72 6f 6f 74 4b 65 79 20 3d 20 66 72 61 6d 65   rootKey = frame
1e350 77 6f 72 6b 4c 69 73 74 2e 52 6f 6f 74 4b 65 79  workList.RootKey
1e360 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
1e370 20 69 66 20 28 72 6f 6f 74 4b 65 79 20 3d 3d 20   if (rootKey == 
1e380 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
1e390 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
1e3a0 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69        error = "i
1e3b0 6e 76 61 6c 69 64 20 72 6f 6f 74 20 6b 65 79 22  nvalid root key"
1e3c0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
1e3d0 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
1e3e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
1e3f0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
1e400 66 20 28 21 4f 62 6a 65 63 74 2e 52 65 66 65 72  f (!Object.Refer
1e410 65 6e 63 65 45 71 75 61 6c 73 28 72 6f 6f 74 4b  enceEquals(rootK
1e420 65 79 2c 20 52 65 67 69 73 74 72 79 2e 43 75 72  ey, Registry.Cur
1e430 72 65 6e 74 55 73 65 72 29 20 26 26 0d 0a 20 20  rentUser) &&..  
1e440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 21 4f                !O
1e450 62 6a 65 63 74 2e 52 65 66 65 72 65 6e 63 65 45  bject.ReferenceE
1e460 71 75 61 6c 73 28 72 6f 6f 74 4b 65 79 2c 20 52  quals(rootKey, R
1e470 65 67 69 73 74 72 79 2e 4c 6f 63 61 6c 4d 61 63  egistry.LocalMac
1e480 68 69 6e 65 29 29 0d 0a 20 20 20 20 20 20 20 20  hine))..        
1e490 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1e4a0 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22         error = "
1e4b0 72 6f 6f 74 20 6b 65 79 20 6d 75 73 74 20 62 65  root key must be
1e4c0 20 70 65 72 2d 75 73 65 72 20 6f 72 20 70 65 72   per-user or per
1e4d0 2d 6d 61 63 68 69 6e 65 22 3b 0d 0a 20 20 20 20  -machine";..    
1e4e0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
1e4f0 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
1e500 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
1e510 20 20 20 20 20 20 20 20 69 66 20 28 66 72 61 6d          if (fram
1e520 65 77 6f 72 6b 4c 69 73 74 2e 4e 61 6d 65 73 20  eworkList.Names 
1e530 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
1e540 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1e550 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
1e560 20 22 6e 6f 20 66 72 61 6d 65 77 6f 72 6b 20 6e   "no framework n
1e570 61 6d 65 73 20 66 6f 75 6e 64 22 3b 0d 0a 20 20  ames found";..  
1e580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
1e590 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
1e5a0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
1e5b0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 66 72            if (fr
1e5c0 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 56 65 72 73  ameworkList.Vers
1e5d0 69 6f 6e 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  ions == null).. 
1e5e0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
1e5f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
1e600 72 6f 72 20 3d 20 22 6e 6f 20 66 72 61 6d 65 77  ror = "no framew
1e610 6f 72 6b 20 76 65 72 73 69 6f 6e 73 20 66 6f 75  ork versions fou
1e620 6e 64 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  nd";..          
1e630 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
1e640 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se;..           
1e650 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
1e660 20 20 69 66 20 28 66 72 61 6d 65 77 6f 72 6b 4c    if (frameworkL
1e670 69 73 74 2e 50 6c 61 74 66 6f 72 6d 4e 61 6d 65  ist.PlatformName
1e680 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  s == null)..    
1e690 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
1e6a0 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
1e6b0 20 3d 20 22 6e 6f 20 70 6c 61 74 66 6f 72 6d 20   = "no platform 
1e6c0 6e 61 6d 65 73 20 66 6f 75 6e 64 22 3b 0d 0a 20  names found";.. 
1e6d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
1e6e0 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
1e6f0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
1e700 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 66             if (f
1e710 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e 61 6d  rameworkList.Nam
1e720 65 73 2e 43 6f 75 6e 74 20 21 3d 20 66 72 61 6d  es.Count != fram
1e730 65 77 6f 72 6b 4c 69 73 74 2e 50 6c 61 74 66 6f  eworkList.Platfo
1e740 72 6d 4e 61 6d 65 73 2e 43 6f 75 6e 74 29 0d 0a  rmNames.Count)..
1e750 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
1e760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
1e770 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f  rror = String.Fo
1e780 72 6d 61 74 28 22 66 72 61 6d 65 77 6f 72 6b 20  rmat("framework 
1e790 6e 61 6d 65 20 63 6f 75 6e 74 20 7b 30 7d 20 64  name count {0} d
1e7a0 6f 65 73 20 6e 6f 74 20 22 20 2b 0d 0a 20 20 20  oes not " +..   
1e7b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e7c0 20 22 6d 61 74 63 68 20 70 6c 61 74 66 6f 72 6d   "match platform
1e7d0 20 6e 61 6d 65 20 63 6f 75 6e 74 20 7b 31 7d 22   name count {1}"
1e7e0 2c 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e  , frameworkList.
1e7f0 4e 61 6d 65 73 2e 43 6f 75 6e 74 2c 0d 0a 20 20  Names.Count,..  
1e800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e810 20 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e    frameworkList.
1e820 50 6c 61 74 66 6f 72 6d 4e 61 6d 65 73 2e 43 6f  PlatformNames.Co
1e830 75 6e 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  unt);....       
1e840 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
1e850 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
1e860 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
1e870 20 20 20 20 20 66 6f 72 20 28 69 6e 74 20 69 6e       for (int in
1e880 64 65 78 20 3d 20 30 3b 20 69 6e 64 65 78 20 3c  dex = 0; index <
1e890 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e   frameworkList.N
1e8a0 61 6d 65 73 2e 43 6f 75 6e 74 3b 20 69 6e 64 65  ames.Count; inde
1e8b0 78 2b 2b 29 0d 0a 20 20 20 20 20 20 20 20 20 20  x++)..          
1e8c0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
1e8d0 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
1e8e0 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45           // NOTE
1e8f0 3a 20 47 72 61 62 20 74 68 65 20 6e 61 6d 65 20  : Grab the name 
1e900 6f 66 20 74 68 65 20 66 72 61 6d 65 77 6f 72 6b  of the framework
1e910 20 28 65 2e 67 2e 20 22 2e 4e 45 54 46 72 61 6d   (e.g. ".NETFram
1e920 65 77 6f 72 6b 22 29 0d 0a 20 20 20 20 20 20 20  ework")..       
1e930 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
1e940 20 20 61 6e 64 20 74 68 65 20 6e 61 6d 65 20 6f    and the name o
1e950 66 20 74 68 65 20 70 6c 61 74 66 6f 72 6d 20 28  f the platform (
1e960 65 2e 67 2e 20 22 57 69 6e 64 6f 77 73 43 45 22  e.g. "WindowsCE"
1e970 29 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  )...            
1e980 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
1e990 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 66          string f
1e9a0 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 20 3d 20 66  rameworkName = f
1e9b0 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e 61 6d  rameworkList.Nam
1e9c0 65 73 5b 69 6e 64 65 78 5d 3b 0d 0a 20 20 20 20  es[index];..    
1e9d0 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
1e9e0 6e 67 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 20  ng platformName 
1e9f0 3d 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e  = frameworkList.
1ea00 50 6c 61 74 66 6f 72 6d 4e 61 6d 65 73 5b 69 6e  PlatformNames[in
1ea10 64 65 78 5d 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  dex];....       
1ea20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
1ea30 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
1ea40 4e 4f 54 45 3a 20 53 6b 69 70 20 61 6c 6c 20 6e  NOTE: Skip all n
1ea50 6f 6e 2d 64 65 73 6b 74 6f 70 20 66 72 61 6d 65  on-desktop frame
1ea60 77 6f 72 6b 73 20 28 69 2e 65 2e 20 69 66 20 74  works (i.e. if t
1ea70 68 65 20 70 6c 61 74 66 6f 72 6d 0d 0a 20 20 20  he platform..   
1ea80 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
1ea90 20 20 20 20 20 20 6e 61 6d 65 20 69 73 20 6e 6f        name is no
1eaa0 74 20 6e 75 6c 6c 29 2e 0d 0a 20 20 20 20 20 20  t null)...      
1eab0 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
1eac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
1ead0 20 28 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 20 21   (platformName !
1eae0 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
1eaf0 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
1eb00 74 69 6e 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  tinue;....      
1eb10 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
1eb20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
1eb30 20 4e 4f 54 45 3a 20 47 72 61 62 20 74 68 65 20   NOTE: Grab the 
1eb40 73 75 70 70 6f 72 74 65 64 20 76 65 72 73 69 6f  supported versio
1eb50 6e 73 20 6f 66 20 74 68 69 73 20 70 61 72 74 69  ns of this parti
1eb60 63 75 6c 61 72 0d 0a 20 20 20 20 20 20 20 20 20  cular..         
1eb70 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
1eb80 66 72 61 6d 65 77 6f 72 6b 2e 0d 0a 20 20 20 20  framework...    
1eb90 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
1eba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ebb0 56 65 72 73 69 6f 6e 4c 69 73 74 20 66 72 61 6d  VersionList fram
1ebc0 65 77 6f 72 6b 56 65 72 73 69 6f 6e 4c 69 73 74  eworkVersionList
1ebd0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
1ebe0 20 20 20 20 20 69 66 20 28 21 66 72 61 6d 65 77       if (!framew
1ebf0 6f 72 6b 4c 69 73 74 2e 56 65 72 73 69 6f 6e 73  orkList.Versions
1ec00 2e 54 72 79 47 65 74 56 61 6c 75 65 28 0d 0a 20  .TryGetValue(.. 
1ec10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ec20 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b         framework
1ec30 4e 61 6d 65 2c 20 6f 75 74 20 66 72 61 6d 65 77  Name, out framew
1ec40 6f 72 6b 56 65 72 73 69 6f 6e 4c 69 73 74 29 20  orkVersionList) 
1ec50 7c 7c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ||..            
1ec60 20 20 20 20 20 20 20 20 28 66 72 61 6d 65 77 6f          (framewo
1ec70 72 6b 56 65 72 73 69 6f 6e 4c 69 73 74 20 3d 3d  rkVersionList ==
1ec80 20 6e 75 6c 6c 29 29 0d 0a 20 20 20 20 20 20 20   null))..       
1ec90 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
1eca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ecb0 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20  continue;..     
1ecc0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
1ecd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ece0 66 6f 72 65 61 63 68 20 28 56 65 72 73 69 6f 6e  foreach (Version
1ecf0 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f   frameworkVersio
1ed00 6e 20 69 6e 20 66 72 61 6d 65 77 6f 72 6b 56 65  n in frameworkVe
1ed10 72 73 69 6f 6e 4c 69 73 74 29 0d 0a 20 20 20 20  rsionList)..    
1ed20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
1ed30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ed40 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75     TraceOps.Debu
1ed50 67 41 6e 64 54 72 61 63 65 28 54 72 61 63 65 50  gAndTrace(TraceP
1ed60 72 69 6f 72 69 74 79 2e 4c 6f 77 65 72 2c 0d 0a  riority.Lower,..
1ed70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ed80 20 20 20 20 20 20 20 20 64 65 62 75 67 43 61 6c          debugCal
1ed90 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c  lback, traceCall
1eda0 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72  back, String.For
1edb0 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
1edc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 66                "f
1edd0 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 20 3d 20 7b  rameworkName = {
1ede0 30 7d 2c 20 66 72 61 6d 65 77 6f 72 6b 56 65 72  0}, frameworkVer
1edf0 73 69 6f 6e 20 3d 20 7b 31 7d 2c 20 22 20 2b 0d  sion = {1}, " +.
1ee00 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1ee10 20 20 20 20 20 20 20 20 20 22 70 6c 61 74 66 6f           "platfo
1ee20 72 6d 4e 61 6d 65 20 3d 20 7b 32 7d 22 2c 20 46  rmName = {2}", F
1ee30 6f 72 44 69 73 70 6c 61 79 28 66 72 61 6d 65 77  orDisplay(framew
1ee40 6f 72 6b 4e 61 6d 65 29 2c 0d 0a 20 20 20 20 20  orkName),..     
1ee50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ee60 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 66 72     ForDisplay(fr
1ee70 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 29 2c  ameworkVersion),
1ee80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1ee90 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73            ForDis
1eea0 70 6c 61 79 28 70 6c 61 74 66 6f 72 6d 4e 61 6d  play(platformNam
1eeb0 65 29 29 2c 20 74 72 61 63 65 43 61 74 65 67 6f  e)), traceCatego
1eec0 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
1eed0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
1eee0 21 48 61 76 65 46 72 61 6d 65 77 6f 72 6b 28 0d  !HaveFramework(.
1eef0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1ef00 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f               roo
1ef10 74 4b 65 79 2c 20 66 72 61 6d 65 77 6f 72 6b 4e  tKey, frameworkN
1ef20 61 6d 65 2c 20 66 72 61 6d 65 77 6f 72 6b 56 65  ame, frameworkVe
1ef30 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20  rsion,..        
1ef40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ef50 20 20 20 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65      platformName
1ef60 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73  , whatIf, verbos
1ef70 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e))..           
1ef80 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
1ef90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1efa0 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62      TraceOps.Deb
1efb0 75 67 41 6e 64 54 72 61 63 65 28 54 72 61 63 65  ugAndTrace(Trace
1efc0 50 72 69 6f 72 69 74 79 2e 4c 6f 77 2c 0d 0a 20  Priority.Low,.. 
1efd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1efe0 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67             debug
1eff0 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43  Callback, traceC
1f000 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20  allback,..      
1f010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f020 20 20 20 20 20 20 22 2e 4e 45 54 20 46 72 61 6d        ".NET Fram
1f030 65 77 6f 72 6b 20 6e 6f 74 20 66 6f 75 6e 64 2c  ework not found,
1f040 20 73 6b 69 70 70 69 6e 67 2e 2e 2e 22 2c 0d 0a   skipping...",..
1f050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f060 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
1f070 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
1f080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f090 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b         continue;
1f0a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1f0b0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
1f0c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
1f0d0 66 20 28 63 61 6c 6c 62 61 63 6b 20 3d 3d 20 6e  f (callback == n
1f0e0 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
1f0f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
1f100 6e 74 69 6e 75 65 3b 0d 0a 0d 0a 20 20 20 20 20  ntinue;....     
1f110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
1f120 74 72 69 6e 67 20 64 69 72 65 63 74 6f 72 79 20  tring directory 
1f130 3d 20 47 65 74 46 72 61 6d 65 77 6f 72 6b 44 69  = GetFrameworkDi
1f140 72 65 63 74 6f 72 79 28 0d 0a 20 20 20 20 20 20  rectory(..      
1f150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f160 20 20 72 6f 6f 74 4b 65 79 2c 20 66 72 61 6d 65    rootKey, frame
1f170 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 20 77 68 61  workVersion, wha
1f180 74 49 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a  tIf, verbose);..
1f190 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1f1a0 20 20 20 20 20 20 69 66 20 28 53 74 72 69 6e 67        if (String
1f1b0 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 64  .IsNullOrEmpty(d
1f1c0 69 72 65 63 74 6f 72 79 29 29 0d 0a 20 20 20 20  irectory))..    
1f1d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f1e0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
1f1f0 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
1f200 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61 63  Ops.DebugAndTrac
1f210 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e  e(TracePriority.
1f220 4c 6f 77 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  Low,..          
1f230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f240 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c    debugCallback,
1f250 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20   traceCallback, 
1f260 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
1f270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f280 20 20 20 20 20 20 20 20 20 20 20 20 22 2e 4e 45              ".NE
1f290 54 20 46 72 61 6d 65 77 6f 72 6b 20 7b 30 7d 20  T Framework {0} 
1f2a0 64 69 72 65 63 74 6f 72 79 20 69 73 20 69 6e 76  directory is inv
1f2b0 61 6c 69 64 2c 20 22 20 2b 0d 0a 20 20 20 20 20  alid, " +..     
1f2c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f2d0 20 20 20 20 20 20 20 22 73 6b 69 70 70 69 6e 67         "skipping
1f2e0 2e 2e 2e 22 2c 20 46 6f 72 44 69 73 70 6c 61 79  ...", ForDisplay
1f2f0 28 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f  (frameworkVersio
1f300 6e 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  n)),..          
1f310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f320 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
1f330 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
1f340 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
1f350 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20  tinue;..        
1f360 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
1f370 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1f380 20 20 20 20 20 64 69 72 65 63 74 6f 72 79 20 3d       directory =
1f390 20 50 61 74 68 2e 43 6f 6d 62 69 6e 65 28 64 69   Path.Combine(di
1f3a0 72 65 63 74 6f 72 79 2c 20 22 43 6f 6e 66 69 67  rectory, "Config
1f3b0 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ");....         
1f3c0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21             if (!
1f3d0 44 69 72 65 63 74 6f 72 79 2e 45 78 69 73 74 73  Directory.Exists
1f3e0 28 64 69 72 65 63 74 6f 72 79 29 29 0d 0a 20 20  (directory))..  
1f3f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f400 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
1f410 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
1f420 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72  ceOps.DebugAndTr
1f430 61 63 65 28 54 72 61 63 65 50 72 69 6f 72 69 74  ace(TracePriorit
1f440 79 2e 4c 6f 77 2c 0d 0a 20 20 20 20 20 20 20 20  y.Low,..        
1f450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f460 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63      debugCallbac
1f470 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b  k, traceCallback
1f480 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  , String.Format(
1f490 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1f4a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2e                ".
1f4b0 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b 20 7b 30  NET Framework {0
1f4c0 7d 20 64 69 72 65 63 74 6f 72 79 20 7b 31 7d 20  } directory {1} 
1f4d0 64 6f 65 73 20 6e 6f 74 20 65 78 69 73 74 2c 20  does not exist, 
1f4e0 22 20 2b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  " +..           
1f4f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f500 20 22 73 6b 69 70 70 69 6e 67 2e 2e 2e 22 2c 20   "skipping...", 
1f510 46 6f 72 44 69 73 70 6c 61 79 28 66 72 61 6d 65  ForDisplay(frame
1f520 77 6f 72 6b 56 65 72 73 69 6f 6e 29 2c 0d 0a 20  workVersion),.. 
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 46 6f 72 44 69             ForDi
1f550 73 70 6c 61 79 28 64 69 72 65 63 74 6f 72 79 29  splay(directory)
1f560 29 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72 79  ), traceCategory
1f570 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
1f580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
1f590 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20  ntinue;..       
1f5a0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
1f5b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1f5c0 20 20 20 20 20 20 73 74 72 69 6e 67 20 66 69 6c        string fil
1f5d0 65 4e 61 6d 65 20 3d 20 50 61 74 68 2e 43 6f 6d  eName = Path.Com
1f5e0 62 69 6e 65 28 64 69 72 65 63 74 6f 72 79 2c 20  bine(directory, 
1f5f0 22 6d 61 63 68 69 6e 65 2e 63 6f 6e 66 69 67 22  "machine.config"
1f600 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
1f610 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21 46            if (!F
1f620 69 6c 65 2e 45 78 69 73 74 73 28 66 69 6c 65 4e  ile.Exists(fileN
1f630 61 6d 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ame))..         
1f640 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
1f650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f660 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44        TraceOps.D
1f670 65 62 75 67 41 6e 64 54 72 61 63 65 28 54 72 61  ebugAndTrace(Tra
1f680 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 2c 0d  cePriority.Low,.
1f690 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1f6a0 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62               deb
1f6b0 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63  ugCallback, trac
1f6c0 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e  eCallback, Strin
1f6d0 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
1f6e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f6f0 20 20 20 20 20 20 20 22 2e 4e 45 54 20 46 72 61         ".NET Fra
1f700 6d 65 77 6f 72 6b 20 7b 30 7d 20 66 69 6c 65 20  mework {0} file 
1f710 7b 31 7d 20 64 6f 65 73 20 6e 6f 74 20 65 78 69  {1} does not exi
1f720 73 74 2c 20 22 20 2b 0d 0a 20 20 20 20 20 20 20  st, " +..       
1f730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f740 20 20 20 20 20 22 73 6b 69 70 70 69 6e 67 2e 2e       "skipping..
1f750 2e 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 66  .", ForDisplay(f
1f760 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 29  rameworkVersion)
1f770 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
1f780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46                 F
1f790 6f 72 44 69 73 70 6c 61 79 28 66 69 6c 65 4e 61  orDisplay(fileNa
1f7a0 6d 65 29 29 2c 20 74 72 61 63 65 43 61 74 65 67  me)), traceCateg
1f7b0 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
1f7c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f7d0 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20   continue;..    
1f7e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f7f0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
1f800 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 6c 6f           bool lo
1f810 63 61 6c 53 61 76 65 64 20 3d 20 66 61 6c 73 65  calSaved = false
1f820 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
1f830 20 20 20 20 20 20 20 20 20 69 66 20 28 21 63 61           if (!ca
1f840 6c 6c 62 61 63 6b 28 0d 0a 20 20 20 20 20 20 20  llback(..       
1f850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f860 20 20 20 20 20 66 69 6c 65 4e 61 6d 65 2c 20 69       fileName, i
1f870 6e 76 61 72 69 61 6e 74 2c 20 6e 61 6d 65 2c 20  nvariant, name, 
1f880 64 65 73 63 72 69 70 74 69 6f 6e 2c 20 74 79 70  description, typ
1f890 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20  eName,..        
1f8a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f8b0 20 20 20 20 61 73 73 65 6d 62 6c 79 4e 61 6d 65      assemblyName
1f8c0 2c 20 63 6c 69 65 6e 74 44 61 74 61 2c 20 77 68  , clientData, wh
1f8d0 61 74 49 66 2c 20 76 65 72 62 6f 73 65 2c 0d 0a  atIf, verbose,..
1f8e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f8f0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20              ref 
1f900 6c 6f 63 61 6c 53 61 76 65 64 2c 20 72 65 66 20  localSaved, ref 
1f910 65 72 72 6f 72 29 29 0d 0a 20 20 20 20 20 20 20  error))..       
1f920 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
1f930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f940 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
1f950 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
1f960 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
1f970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f980 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20    else..        
1f990 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
1f9a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f9b0 20 20 20 20 20 20 20 69 66 20 28 6c 6f 63 61 6c         if (local
1f9c0 53 61 76 65 64 20 26 26 20 21 73 61 76 65 64 29  Saved && !saved)
1f9d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1f9e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 61                sa
1f9f0 76 65 64 20 3d 20 74 72 75 65 3b 0d 0a 0d 0a 20  ved = true;.... 
1fa00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fa10 20 20 20 20 20 20 20 69 66 20 28 76 65 72 62 6f         if (verbo
1fa20 73 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se)..           
1fa30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fa40 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41   TraceOps.DebugA
1fa50 6e 64 54 72 61 63 65 28 54 72 61 63 65 50 72 69  ndTrace(TracePri
1fa60 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 0d 0a 20  ority.Lowest,.. 
1fa70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fa80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
1fa90 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72  ebugCallback, tr
1faa0 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72  aceCallback, Str
1fab0 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
1fac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fad0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 6c 6f               "lo
1fae0 63 61 6c 53 61 76 65 64 20 3d 20 7b 30 7d 2c 20  calSaved = {0}, 
1faf0 73 61 76 65 64 20 3d 20 7b 31 7d 22 2c 0d 0a 20  saved = {1}",.. 
1fb00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fb10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46                 F
1fb20 6f 72 44 69 73 70 6c 61 79 28 6c 6f 63 61 6c 53  orDisplay(localS
1fb30 61 76 65 64 29 2c 20 46 6f 72 44 69 73 70 6c 61  aved), ForDispla
1fb40 79 28 73 61 76 65 64 29 29 2c 0d 0a 20 20 20 20  y(saved)),..    
1fb50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fb60 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
1fb70 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 20 20 20  eCategory);..   
1fb80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fb90 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
1fba0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
1fbb0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
1fbc0 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b      return true;
1fbd0 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
1fbe0 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
1fbf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fc00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fc10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fc20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
1fc30 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
1fc40 65 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 46 6f  e static bool Fo
1fc50 72 45 61 63 68 46 72 61 6d 65 77 6f 72 6b 52 65  rEachFrameworkRe
1fc60 67 69 73 74 72 79 28 0d 0a 20 20 20 20 20 20 20  gistry(..       
1fc70 20 20 20 20 20 46 72 61 6d 65 77 6f 72 6b 4c 69       FrameworkLi
1fc80 73 74 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74  st frameworkList
1fc90 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 46  ,..            F
1fca0 72 61 6d 65 77 6f 72 6b 52 65 67 69 73 74 72 79  rameworkRegistry
1fcb0 43 61 6c 6c 62 61 63 6b 20 63 61 6c 6c 62 61 63  Callback callbac
1fcc0 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  k,..            
1fcd0 6f 62 6a 65 63 74 20 63 6c 69 65 6e 74 44 61 74  object clientDat
1fce0 61 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  a,..            
1fcf0 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20  bool whatIf,..  
1fd00 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76            bool v
1fd10 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20  erbose,..       
1fd20 20 20 20 20 20 72 65 66 20 73 74 72 69 6e 67 20       ref string 
1fd30 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20  error..         
1fd40 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d     )..        {.
1fd50 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
1fd60 28 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 20 3d  (frameworkList =
1fd70 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
1fd80 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1fd90 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
1fda0 22 69 6e 76 61 6c 69 64 20 66 72 61 6d 65 77 6f  "invalid framewo
1fdb0 72 6b 20 6c 69 73 74 22 3b 0d 0a 20 20 20 20 20  rk list";..     
1fdc0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
1fdd0 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
1fde0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
1fdf0 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79 4b         RegistryK
1fe00 65 79 20 72 6f 6f 74 4b 65 79 20 3d 20 66 72 61  ey rootKey = fra
1fe10 6d 65 77 6f 72 6b 4c 69 73 74 2e 52 6f 6f 74 4b  meworkList.RootK
1fe20 65 79 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ey;....         
1fe30 20 20 20 69 66 20 28 72 6f 6f 74 4b 65 79 20 3d     if (rootKey =
1fe40 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
1fe50 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1fe60 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
1fe70 22 69 6e 76 61 6c 69 64 20 72 6f 6f 74 20 6b 65  "invalid root ke
1fe80 79 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  y";..           
1fe90 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
1fea0 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
1feb0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
1fec0 20 69 66 20 28 21 4f 62 6a 65 63 74 2e 52 65 66   if (!Object.Ref
1fed0 65 72 65 6e 63 65 45 71 75 61 6c 73 28 72 6f 6f  erenceEquals(roo
1fee0 74 4b 65 79 2c 20 52 65 67 69 73 74 72 79 2e 43  tKey, Registry.C
1fef0 75 72 72 65 6e 74 55 73 65 72 29 20 26 26 0d 0a  urrentUser) &&..
1ff00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ff10 21 4f 62 6a 65 63 74 2e 52 65 66 65 72 65 6e 63  !Object.Referenc
1ff20 65 45 71 75 61 6c 73 28 72 6f 6f 74 4b 65 79 2c  eEquals(rootKey,
1ff30 20 52 65 67 69 73 74 72 79 2e 4c 6f 63 61 6c 4d   Registry.LocalM
1ff40 61 63 68 69 6e 65 29 29 0d 0a 20 20 20 20 20 20  achine))..      
1ff50 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1ff60 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
1ff70 20 22 72 6f 6f 74 20 6b 65 79 20 6d 75 73 74 20   "root key must 
1ff80 62 65 20 70 65 72 2d 75 73 65 72 20 6f 72 20 70  be per-user or p
1ff90 65 72 2d 6d 61 63 68 69 6e 65 22 3b 0d 0a 20 20  er-machine";..  
1ffa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
1ffb0 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
1ffc0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
1ffd0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 66 72            if (fr
1ffe0 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e 61 6d 65  ameworkList.Name
1fff0 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  s == null)..    
20000 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
20010 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
20020 20 3d 20 22 6e 6f 20 66 72 61 6d 65 77 6f 72 6b   = "no framework
20030 20 6e 61 6d 65 73 20 66 6f 75 6e 64 22 3b 0d 0a   names found";..
20040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20050 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20  return false;.. 
20060 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
20070 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
20080 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 56 65  frameworkList.Ve
20090 72 73 69 6f 6e 73 20 3d 3d 20 6e 75 6c 6c 29 0d  rsions == null).
200a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
200b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
200c0 65 72 72 6f 72 20 3d 20 22 6e 6f 20 66 72 61 6d  error = "no fram
200d0 65 77 6f 72 6b 20 76 65 72 73 69 6f 6e 73 20 66  ework versions f
200e0 6f 75 6e 64 22 3b 0d 0a 20 20 20 20 20 20 20 20  ound";..        
200f0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
20100 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
20110 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
20120 20 20 20 20 69 66 20 28 66 72 61 6d 65 77 6f 72      if (framewor
20130 6b 4c 69 73 74 2e 50 6c 61 74 66 6f 72 6d 4e 61  kList.PlatformNa
20140 6d 65 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  mes == null)..  
20150 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
20160 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
20170 6f 72 20 3d 20 22 6e 6f 20 70 6c 61 74 66 6f 72  or = "no platfor
20180 6d 20 6e 61 6d 65 73 20 66 6f 75 6e 64 22 3b 0d  m names found";.
20190 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
201a0 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
201b0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
201c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
201d0 28 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e  (frameworkList.N
201e0 61 6d 65 73 2e 43 6f 75 6e 74 20 21 3d 20 66 72  ames.Count != fr
201f0 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 50 6c 61 74  ameworkList.Plat
20200 66 6f 72 6d 4e 61 6d 65 73 2e 43 6f 75 6e 74 29  formNames.Count)
20210 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
20220 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
20230 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e   error = String.
20240 46 6f 72 6d 61 74 28 22 66 72 61 6d 65 77 6f 72  Format("framewor
20250 6b 20 6e 61 6d 65 20 63 6f 75 6e 74 20 7b 30 7d  k name count {0}
20260 20 64 6f 65 73 20 6e 6f 74 20 22 20 2b 0d 0a 20   does not " +.. 
20270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20280 20 20 20 22 6d 61 74 63 68 20 70 6c 61 74 66 6f     "match platfo
20290 72 6d 20 6e 61 6d 65 20 63 6f 75 6e 74 20 7b 31  rm name count {1
202a0 7d 22 2c 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73  }", frameworkLis
202b0 74 2e 4e 61 6d 65 73 2e 43 6f 75 6e 74 2c 0d 0a  t.Names.Count,..
202c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
202d0 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73      frameworkLis
202e0 74 2e 50 6c 61 74 66 6f 72 6d 4e 61 6d 65 73 2e  t.PlatformNames.
202f0 43 6f 75 6e 74 29 3b 0d 0a 0d 0a 20 20 20 20 20  Count);....     
20300 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
20310 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
20320 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
20330 20 20 20 20 20 20 20 66 6f 72 20 28 69 6e 74 20         for (int 
20340 69 6e 64 65 78 20 3d 20 30 3b 20 69 6e 64 65 78  index = 0; index
20350 20 3c 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74   < frameworkList
20360 2e 4e 61 6d 65 73 2e 43 6f 75 6e 74 3b 20 69 6e  .Names.Count; in
20370 64 65 78 2b 2b 29 0d 0a 20 20 20 20 20 20 20 20  dex++)..        
20380 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
20390 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
203a0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f             // NO
203b0 54 45 3a 20 47 72 61 62 20 74 68 65 20 6e 61 6d  TE: Grab the nam
203c0 65 20 6f 66 20 74 68 65 20 66 72 61 6d 65 77 6f  e of the framewo
203d0 72 6b 20 28 65 2e 67 2e 20 22 2e 4e 45 54 46 72  rk (e.g. ".NETFr
203e0 61 6d 65 77 6f 72 6b 22 29 0d 0a 20 20 20 20 20  amework")..     
203f0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
20400 20 20 20 20 61 6e 64 20 74 68 65 20 6e 61 6d 65      and the name
20410 20 6f 66 20 74 68 65 20 70 6c 61 74 66 6f 72 6d   of the platform
20420 20 28 65 2e 67 2e 20 22 57 69 6e 64 6f 77 73 43   (e.g. "WindowsC
20430 45 22 29 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  E")...          
20440 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
20450 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
20460 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 20 3d   frameworkName =
20470 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e   frameworkList.N
20480 61 6d 65 73 5b 69 6e 64 65 78 5d 3b 0d 0a 20 20  ames[index];..  
20490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
204a0 72 69 6e 67 20 70 6c 61 74 66 6f 72 6d 4e 61 6d  ring platformNam
204b0 65 20 3d 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73  e = frameworkLis
204c0 74 2e 50 6c 61 74 66 6f 72 6d 4e 61 6d 65 73 5b  t.PlatformNames[
204d0 69 6e 64 65 78 5d 3b 0d 0a 0d 0a 20 20 20 20 20  index];....     
204e0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
204f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
20500 2f 20 4e 4f 54 45 3a 20 47 72 61 62 20 74 68 65  / NOTE: Grab the
20510 20 73 75 70 70 6f 72 74 65 64 20 76 65 72 73 69   supported versi
20520 6f 6e 73 20 6f 66 20 74 68 69 73 20 70 61 72 74  ons of this part
20530 69 63 75 6c 61 72 0d 0a 20 20 20 20 20 20 20 20  icular..        
20540 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
20550 20 66 72 61 6d 65 77 6f 72 6b 2e 0d 0a 20 20 20   framework...   
20560 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
20570 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
20580 20 56 65 72 73 69 6f 6e 4c 69 73 74 20 66 72 61   VersionList fra
20590 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 4c 69 73  meworkVersionLis
205a0 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  t;....          
205b0 20 20 20 20 20 20 69 66 20 28 21 66 72 61 6d 65        if (!frame
205c0 77 6f 72 6b 4c 69 73 74 2e 56 65 72 73 69 6f 6e  workList.Version
205d0 73 2e 54 72 79 47 65 74 56 61 6c 75 65 28 0d 0a  s.TryGetValue(..
205e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
205f0 20 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72          framewor
20600 6b 4e 61 6d 65 2c 20 6f 75 74 20 66 72 61 6d 65  kName, out frame
20610 77 6f 72 6b 56 65 72 73 69 6f 6e 4c 69 73 74 29  workVersionList)
20620 20 7c 7c 0d 0a 20 20 20 20 20 20 20 20 20 20 20   ||..           
20630 20 20 20 20 20 20 20 20 20 28 66 72 61 6d 65 77           (framew
20640 6f 72 6b 56 65 72 73 69 6f 6e 4c 69 73 74 20 3d  orkVersionList =
20650 3d 20 6e 75 6c 6c 29 29 0d 0a 20 20 20 20 20 20  = null))..      
20660 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
20670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20680 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20   continue;..    
20690 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
206a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
206b0 20 66 6f 72 65 61 63 68 20 28 56 65 72 73 69 6f   foreach (Versio
206c0 6e 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69  n frameworkVersi
206d0 6f 6e 20 69 6e 20 66 72 61 6d 65 77 6f 72 6b 56  on in frameworkV
206e0 65 72 73 69 6f 6e 4c 69 73 74 29 0d 0a 20 20 20  ersionList)..   
206f0 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
20700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20710 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62      TraceOps.Deb
20720 75 67 41 6e 64 54 72 61 63 65 28 54 72 61 63 65  ugAndTrace(Trace
20730 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 72 2c 0d  Priority.Lower,.
20740 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
20750 20 20 20 20 20 20 20 20 20 64 65 62 75 67 43 61           debugCa
20760 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c  llback, traceCal
20770 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f  lback, String.Fo
20780 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
20790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
207a0 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 20 3d 20  frameworkName = 
207b0 7b 30 7d 2c 20 66 72 61 6d 65 77 6f 72 6b 56 65  {0}, frameworkVe
207c0 72 73 69 6f 6e 20 3d 20 7b 31 7d 2c 20 22 20 2b  rsion = {1}, " +
207d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
207e0 20 20 20 20 20 20 20 20 20 20 22 70 6c 61 74 66            "platf
207f0 6f 72 6d 4e 61 6d 65 20 3d 20 7b 32 7d 22 2c 20  ormName = {2}", 
20800 46 6f 72 44 69 73 70 6c 61 79 28 66 72 61 6d 65  ForDisplay(frame
20810 77 6f 72 6b 4e 61 6d 65 29 2c 0d 0a 20 20 20 20  workName),..    
20820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20830 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 66      ForDisplay(f
20840 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 29  rameworkVersion)
20850 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
20860 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69             ForDi
20870 73 70 6c 61 79 28 70 6c 61 74 66 6f 72 6d 4e 61  splay(platformNa
20880 6d 65 29 29 2c 20 74 72 61 63 65 43 61 74 65 67  me)), traceCateg
20890 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
208a0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
208b0 28 21 48 61 76 65 46 72 61 6d 65 77 6f 72 6b 28  (!HaveFramework(
208c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
208d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f                ro
208e0 6f 74 4b 65 79 2c 20 66 72 61 6d 65 77 6f 72 6b  otKey, framework
208f0 4e 61 6d 65 2c 20 66 72 61 6d 65 77 6f 72 6b 56  Name, frameworkV
20900 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20  ersion,..       
20910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20920 20 20 20 20 20 70 6c 61 74 66 6f 72 6d 4e 61 6d       platformNam
20930 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f  e, whatIf, verbo
20940 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  se))..          
20950 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
20960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20970 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65       TraceOps.De
20980 62 75 67 41 6e 64 54 72 61 63 65 28 54 72 61 63  bugAndTrace(Trac
20990 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 2c 0d 0a  ePriority.Low,..
209a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
209b0 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75              debu
209c0 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65  gCallback, trace
209d0 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20  Callback,..     
209e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
209f0 20 20 20 20 20 20 20 22 2e 4e 45 54 20 46 72 61         ".NET Fra
20a00 6d 65 77 6f 72 6b 20 6e 6f 74 20 66 6f 75 6e 64  mework not found
20a10 2c 20 73 6b 69 70 70 69 6e 67 2e 2e 2e 22 2c 0d  , skipping...",.
20a20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
20a30 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
20a40 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
20a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20a60 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65          continue
20a70 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
20a80 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
20a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20aa0 69 66 20 28 63 61 6c 6c 62 61 63 6b 20 3d 3d 20  if (callback == 
20ab0 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
20ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
20ad0 6f 6e 74 69 6e 75 65 3b 0d 0a 0d 0a 20 20 20 20  ontinue;....    
20ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20af0 69 66 20 28 21 63 61 6c 6c 62 61 63 6b 28 0d 0a  if (!callback(..
20b00 20 20 20 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 72 6f 6f 74              root
20b20 4b 65 79 2c 20 66 72 61 6d 65 77 6f 72 6b 4e 61  Key, frameworkNa
20b30 6d 65 2c 20 66 72 61 6d 65 77 6f 72 6b 56 65 72  me, frameworkVer
20b40 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20  sion,..         
20b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20b60 20 20 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c     platformName,
20b70 20 63 6c 69 65 6e 74 44 61 74 61 2c 20 77 68 61   clientData, wha
20b80 74 49 66 2c 20 76 65 72 62 6f 73 65 2c 0d 0a 20  tIf, verbose,.. 
20b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20ba0 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20 65             ref e
20bb0 72 72 6f 72 29 29 0d 0a 20 20 20 20 20 20 20 20  rror))..        
20bc0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
20bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20be0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
20bf0 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lse;..          
20c00 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
20c10 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
20c20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
20c30 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
20c40 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20  urn true;..     
20c50 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65     }..        #e
20c60 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
20c70 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
20c80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20c90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20ca0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20cb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
20cc0 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50         #region P
20cd0 65 72 2d 56 69 73 75 61 6c 20 53 74 75 64 69 6f  er-Visual Studio
20ce0 20 56 65 72 73 69 6f 6e 20 48 61 6e 64 6c 69 6e   Version Handlin
20cf0 67 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  g..        priva
20d00 74 65 20 73 74 61 74 69 63 20 76 6f 69 64 20 49  te static void I
20d10 6e 69 74 69 61 6c 69 7a 65 56 73 4c 69 73 74 28  nitializeVsList(
20d20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 43 6f  ..            Co
20d30 6e 66 69 67 75 72 61 74 69 6f 6e 20 63 6f 6e 66  nfiguration conf
20d40 69 67 75 72 61 74 69 6f 6e 2c 0d 0a 20 20 20 20  iguration,..    
20d50 20 20 20 20 20 20 20 20 72 65 66 20 56 73 4c 69          ref VsLi
20d60 73 74 20 76 73 4c 69 73 74 0d 0a 20 20 20 20 20  st vsList..     
20d70 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
20d80 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
20d90 20 69 66 20 28 76 73 4c 69 73 74 20 3d 3d 20 6e   if (vsList == n
20da0 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
20db0 20 20 20 20 20 20 76 73 4c 69 73 74 20 3d 20 6e        vsList = n
20dc0 65 77 20 56 73 4c 69 73 74 28 29 3b 0d 0a 0d 0a  ew VsList();....
20dd0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
20de0 76 73 4c 69 73 74 2e 52 6f 6f 74 4b 65 79 20 3d  vsList.RootKey =
20df0 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
20e00 20 20 20 20 20 20 20 20 20 76 73 4c 69 73 74 2e           vsList.
20e10 52 6f 6f 74 4b 65 79 20 3d 20 52 65 67 69 73 74  RootKey = Regist
20e20 72 79 2e 4c 6f 63 61 6c 4d 61 63 68 69 6e 65 3b  ry.LocalMachine;
20e30 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
20e40 69 66 20 28 76 73 4c 69 73 74 2e 56 65 72 73 69  if (vsList.Versi
20e50 6f 6e 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ons == null)..  
20e60 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
20e70 20 20 20 20 20 20 20 20 20 20 20 20 20 76 73 4c               vsL
20e80 69 73 74 2e 56 65 72 73 69 6f 6e 73 20 3d 20 6e  ist.Versions = n
20e90 65 77 20 56 65 72 73 69 6f 6e 4c 69 73 74 28 29  ew VersionList()
20ea0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
20eb0 20 20 20 20 20 2f 2f 20 76 73 4c 69 73 74 2e 56       // vsList.V
20ec0 65 72 73 69 6f 6e 73 2e 41 64 64 28 6e 65 77 20  ersions.Add(new 
20ed0 56 65 72 73 69 6f 6e 28 38 2c 20 30 29 29 3b 20  Version(8, 0)); 
20ee0 2f 2f 20 56 69 73 75 61 6c 20 53 74 75 64 69 6f  // Visual Studio
20ef0 20 32 30 30 35 0d 0a 0d 0a 20 20 20 20 20 20 20   2005....       
20f00 20 20 20 20 20 20 20 20 20 69 66 20 28 28 63 6f           if ((co
20f10 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20 6e  nfiguration == n
20f20 75 6c 6c 29 20 7c 7c 20 21 63 6f 6e 66 69 67 75  ull) || !configu
20f30 72 61 74 69 6f 6e 2e 4e 6f 56 73 32 30 30 38 29  ration.NoVs2008)
20f40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
20f50 20 20 20 20 20 20 76 73 4c 69 73 74 2e 56 65 72        vsList.Ver
20f60 73 69 6f 6e 73 2e 41 64 64 28 6e 65 77 20 56 65  sions.Add(new Ve
20f70 72 73 69 6f 6e 28 39 2c 20 30 29 29 3b 20 2f 2f  rsion(9, 0)); //
20f80 20 56 69 73 75 61 6c 20 53 74 75 64 69 6f 20 32   Visual Studio 2
20f90 30 30 38 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  008....         
20fa0 20 20 20 20 20 20 20 69 66 20 28 28 63 6f 6e 66         if ((conf
20fb0 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c  iguration == nul
20fc0 6c 29 20 7c 7c 20 21 63 6f 6e 66 69 67 75 72 61  l) || !configura
20fd0 74 69 6f 6e 2e 4e 6f 56 73 32 30 31 30 29 0d 0a  tion.NoVs2010)..
20fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20ff0 20 20 20 20 76 73 4c 69 73 74 2e 56 65 72 73 69      vsList.Versi
21000 6f 6e 73 2e 41 64 64 28 6e 65 77 20 56 65 72 73  ons.Add(new Vers
21010 69 6f 6e 28 31 30 2c 20 30 29 29 3b 2f 2f 20 56  ion(10, 0));// V
21020 69 73 75 61 6c 20 53 74 75 64 69 6f 20 32 30 31  isual Studio 201
21030 30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  0..            }
21040 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
21050 69 66 20 28 76 73 4c 69 73 74 2e 46 72 61 6d 65  if (vsList.Frame
21060 77 6f 72 6b 56 65 72 73 69 6f 6e 73 20 3d 3d 20  workVersions == 
21070 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
21080 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
21090 20 20 20 20 20 20 76 73 4c 69 73 74 2e 46 72 61        vsList.Fra
210a0 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 73 20 3d  meworkVersions =
210b0 20 6e 65 77 20 56 65 72 73 69 6f 6e 4c 69 73 74   new VersionList
210c0 4d 61 70 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  Map();....      
210d0 20 20 20 20 20 20 20 20 20 20 2f 2f 20 76 73 4c            // vsL
210e0 69 73 74 2e 46 72 61 6d 65 77 6f 72 6b 56 65 72  ist.FrameworkVer
210f0 73 69 6f 6e 73 2e 41 64 64 28 6e 65 77 20 56 65  sions.Add(new Ve
21100 72 73 69 6f 6e 28 38 2c 20 30 29 2c 0d 0a 20 20  rsion(8, 0),..  
21110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
21120 20 20 20 20 20 6e 65 77 20 56 65 72 73 69 6f 6e       new Version
21130 4c 69 73 74 28 6e 65 77 20 56 65 72 73 69 6f 6e  List(new Version
21140 5b 5d 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  [] {..          
21150 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 20        //        
21160 20 6e 65 77 20 56 65 72 73 69 6f 6e 28 32 2c 20   new Version(2, 
21170 30 2c 20 35 30 37 32 37 29 20 7d 29 29 3b 0d 0a  0, 50727) }));..
21180 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
21190 20 20 69 66 20 28 28 63 6f 6e 66 69 67 75 72 61    if ((configura
211a0 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c  tion == null) ||
211b0 20 21 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e   !configuration.
211c0 4e 6f 56 73 32 30 30 38 29 0d 0a 20 20 20 20 20  NoVs2008)..     
211d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76                 v
211e0 73 4c 69 73 74 2e 46 72 61 6d 65 77 6f 72 6b 56  sList.FrameworkV
211f0 65 72 73 69 6f 6e 73 2e 41 64 64 28 6e 65 77 20  ersions.Add(new 
21200 56 65 72 73 69 6f 6e 28 39 2c 20 30 29 2c 0d 0a  Version(9, 0),..
21210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21220 20 20 20 20 20 20 20 20 6e 65 77 20 56 65 72 73          new Vers
21230 69 6f 6e 4c 69 73 74 28 6e 65 77 20 56 65 72 73  ionList(new Vers
21240 69 6f 6e 5b 5d 20 7b 0d 0a 20 20 20 20 20 20 20  ion[] {..       
21250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21260 20 20 20 20 20 6e 65 77 20 56 65 72 73 69 6f 6e       new Version
21270 28 32 2c 20 30 2c 20 35 30 37 32 37 29 20 7d 29  (2, 0, 50727) })
21280 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
21290 20 20 20 20 20 20 69 66 20 28 28 63 6f 6e 66 69        if ((confi
212a0 67 75 72 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c  guration == null
212b0 29 20 7c 7c 20 21 63 6f 6e 66 69 67 75 72 61 74  ) || !configurat
212c0 69 6f 6e 2e 4e 6f 56 73 32 30 31 30 29 0d 0a 20  ion.NoVs2010).. 
212d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
212e0 20 20 20 76 73 4c 69 73 74 2e 46 72 61 6d 65 77     vsList.Framew
212f0 6f 72 6b 56 65 72 73 69 6f 6e 73 2e 41 64 64 28  orkVersions.Add(
21300 6e 65 77 20 56 65 72 73 69 6f 6e 28 31 30 2c 20  new Version(10, 
21310 30 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  0),..           
21320 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 65 77               new
21330 20 56 65 72 73 69 6f 6e 4c 69 73 74 28 6e 65 77   VersionList(new
21340 20 56 65 72 73 69 6f 6e 5b 5d 20 7b 0d 0a 20 20   Version[] {..  
21350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21360 20 20 20 20 20 20 20 20 20 20 6e 65 77 20 56 65            new Ve
21370 72 73 69 6f 6e 28 32 2c 20 30 2c 20 35 30 37 32  rsion(2, 0, 5072
21380 37 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  7),..           
21390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
213a0 20 20 20 20 20 6e 65 77 20 56 65 72 73 69 6f 6e       new Version
213b0 28 34 2c 20 30 2c 20 33 30 33 31 39 29 20 7d 29  (4, 0, 30319) })
213c0 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
213d0 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  }..        }....
213e0 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
213f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21400 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21410 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21420 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
21430 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  ...        priva
21440 74 65 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 48  te static bool H
21450 61 76 65 56 73 56 65 72 73 69 6f 6e 28 0d 0a 20  aveVsVersion(.. 
21460 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73             Regis
21470 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d  tryKey rootKey,.
21480 0a 20 20 20 20 20 20 20 20 20 20 20 20 56 65 72  .            Ver
21490 73 69 6f 6e 20 76 73 56 65 72 73 69 6f 6e 2c 0d  sion vsVersion,.
214a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
214b0 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20  l whatIf,..     
214c0 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62         bool verb
214d0 6f 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ose..           
214e0 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20   )..        {.. 
214f0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76             if (v
21500 73 56 65 72 73 69 6f 6e 20 3d 3d 20 6e 75 6c 6c  sVersion == null
21510 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
21520 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
21530 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
21540 73 74 72 69 6e 67 20 66 6f 72 6d 61 74 20 3d 20  string format = 
21550 22 53 6f 66 74 77 61 72 65 5c 5c 4d 69 63 72 6f  "Software\\Micro
21560 73 6f 66 74 5c 5c 56 69 73 75 61 6c 53 74 75 64  soft\\VisualStud
21570 69 6f 5c 5c 7b 30 7d 22 3b 0d 0a 20 20 20 20 20  io\\{0}";..     
21580 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6b 65         string ke
21590 79 4e 61 6d 65 20 3d 20 53 74 72 69 6e 67 2e 46  yName = String.F
215a0 6f 72 6d 61 74 28 66 6f 72 6d 61 74 2c 20 76 73  ormat(format, vs
215b0 56 65 72 73 69 6f 6e 29 3b 0d 0a 0d 0a 20 20 20  Version);....   
215c0 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28           using (
215d0 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20  MockRegistryKey 
215e0 6b 65 79 20 3d 20 52 65 67 69 73 74 72 79 48 65  key = RegistryHe
215f0 6c 70 65 72 2e 4f 70 65 6e 53 75 62 4b 65 79 28  lper.OpenSubKey(
21600 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
21610 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 6b        rootKey, k
21620 65 79 4e 61 6d 65 2c 20 66 61 6c 73 65 2c 20 77  eyName, false, w
21630 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 29  hatIf, verbose))
21640 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
21650 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
21660 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c   if (key == null
21670 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
21680 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
21690 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  lse;....        
216a0 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 76          object v
216b0 61 6c 75 65 20 3d 20 52 65 67 69 73 74 72 79 48  alue = RegistryH
216c0 65 6c 70 65 72 2e 47 65 74 56 61 6c 75 65 28 0d  elper.GetValue(.
216d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
216e0 20 20 20 20 20 6b 65 79 2c 20 22 49 6e 73 74 61       key, "Insta
216f0 6c 6c 44 69 72 22 2c 20 6e 75 6c 6c 2c 20 77 68  llDir", null, wh
21700 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d  atIf, verbose);.
21710 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
21720 20 20 20 69 66 20 28 21 28 76 61 6c 75 65 20 69     if (!(value i
21730 73 20 73 74 72 69 6e 67 29 29 0d 0a 20 20 20 20  s string))..    
21740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21750 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d  return false;...
21760 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
21770 20 73 74 72 69 6e 67 20 64 69 72 65 63 74 6f 72   string director
21780 79 20 3d 20 28 73 74 72 69 6e 67 29 76 61 6c 75  y = (string)valu
21790 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
217a0 20 20 20 20 20 20 69 66 20 28 53 74 72 69 6e 67        if (String
217b0 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 64  .IsNullOrEmpty(d
217c0 69 72 65 63 74 6f 72 79 29 29 0d 0a 20 20 20 20  irectory))..    
217d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
217e0 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d  return false;...
217f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
21800 20 69 66 20 28 21 44 69 72 65 63 74 6f 72 79 2e   if (!Directory.
21810 45 78 69 73 74 73 28 64 69 72 65 63 74 6f 72 79  Exists(directory
21820 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
21830 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
21840 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  alse;....       
21850 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
21860 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  true;..         
21870 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d     }..        }.
21880 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
21890 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
218a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
218b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
218c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
218d0 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72  //....        pr
218e0 69 76 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f  ivate static boo
218f0 6c 20 46 6f 72 45 61 63 68 56 73 56 65 72 73 69  l ForEachVsVersi
21900 6f 6e 52 65 67 69 73 74 72 79 28 0d 0a 20 20 20  onRegistry(..   
21910 20 20 20 20 20 20 20 20 20 56 73 4c 69 73 74 20           VsList 
21920 76 73 4c 69 73 74 2c 0d 0a 20 20 20 20 20 20 20  vsList,..       
21930 20 20 20 20 20 56 69 73 75 61 6c 53 74 75 64 69       VisualStudi
21940 6f 52 65 67 69 73 74 72 79 43 61 6c 6c 62 61 63  oRegistryCallbac
21950 6b 20 63 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20  k callback,..   
21960 20 20 20 20 20 20 20 20 20 50 61 63 6b 61 67 65           Package
21970 20 70 61 63 6b 61 67 65 2c 0d 0a 20 20 20 20 20   package,..     
21980 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 63 6c         object cl
21990 69 65 6e 74 44 61 74 61 2c 0d 0a 20 20 20 20 20  ientData,..     
219a0 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74         bool what
219b0 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  If,..           
219c0 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a   bool verbose,..
219d0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20              ref 
219e0 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20  string error..  
219f0 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
21a00 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
21a10 20 20 20 20 69 66 20 28 76 73 4c 69 73 74 20 3d      if (vsList =
21a20 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
21a30 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
21a40 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
21a50 22 69 6e 76 61 6c 69 64 20 56 53 20 6c 69 73 74  "invalid VS list
21a60 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ";..            
21a70 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
21a80 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
21a90 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
21aa0 52 65 67 69 73 74 72 79 4b 65 79 20 72 6f 6f 74  RegistryKey root
21ab0 4b 65 79 20 3d 20 76 73 4c 69 73 74 2e 52 6f 6f  Key = vsList.Roo
21ac0 74 4b 65 79 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  tKey;....       
21ad0 20 20 20 20 20 69 66 20 28 72 6f 6f 74 4b 65 79       if (rootKey
21ae0 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
21af0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
21b00 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
21b10 3d 20 22 69 6e 76 61 6c 69 64 20 72 6f 6f 74 20  = "invalid root 
21b20 6b 65 79 22 3b 0d 0a 20 20 20 20 20 20 20 20 20  key";..         
21b30 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
21b40 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lse;..          
21b50 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
21b60 20 20 20 69 66 20 28 21 4f 62 6a 65 63 74 2e 52     if (!Object.R
21b70 65 66 65 72 65 6e 63 65 45 71 75 61 6c 73 28 72  eferenceEquals(r
21b80 6f 6f 74 4b 65 79 2c 20 52 65 67 69 73 74 72 79  ootKey, Registry
21b90 2e 43 75 72 72 65 6e 74 55 73 65 72 29 20 26 26  .CurrentUser) &&
21ba0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
21bb0 20 20 21 4f 62 6a 65 63 74 2e 52 65 66 65 72 65    !Object.Refere
21bc0 6e 63 65 45 71 75 61 6c 73 28 72 6f 6f 74 4b 65  nceEquals(rootKe
21bd0 79 2c 20 52 65 67 69 73 74 72 79 2e 4c 6f 63 61  y, Registry.Loca
21be0 6c 4d 61 63 68 69 6e 65 29 29 0d 0a 20 20 20 20  lMachine))..    
21bf0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
21c00 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
21c10 20 3d 20 22 72 6f 6f 74 20 6b 65 79 20 6d 75 73   = "root key mus
21c20 74 20 62 65 20 70 65 72 2d 75 73 65 72 20 6f 72  t be per-user or
21c30 20 70 65 72 2d 6d 61 63 68 69 6e 65 22 3b 0d 0a   per-machine";..
21c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21c50 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20  return false;.. 
21c60 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
21c70 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
21c80 76 73 4c 69 73 74 2e 56 65 72 73 69 6f 6e 73 20  vsList.Versions 
21c90 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
21ca0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
21cb0 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
21cc0 20 22 6e 6f 20 56 53 20 76 65 72 73 69 6f 6e 73   "no VS versions
21cd0 20 66 6f 75 6e 64 22 3b 0d 0a 20 20 20 20 20 20   found";..      
21ce0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
21cf0 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
21d00 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
21d10 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 28 56        foreach (V
21d20 65 72 73 69 6f 6e 20 76 73 56 65 72 73 69 6f 6e  ersion vsVersion
21d30 20 69 6e 20 76 73 4c 69 73 74 2e 56 65 72 73 69   in vsList.Versi
21d40 6f 6e 73 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ons)..          
21d50 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
21d60 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65       TraceOps.De
21d70 62 75 67 41 6e 64 54 72 61 63 65 28 54 72 61 63  bugAndTrace(Trac
21d80 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 72 2c  ePriority.Lower,
21d90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
21da0 20 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62        debugCallb
21db0 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61  ack, traceCallba
21dc0 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ck, String.Forma
21dd0 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
21de0 20 20 20 20 20 20 20 20 22 76 73 56 65 72 73 69          "vsVersi
21df0 6f 6e 20 3d 20 7b 30 7d 22 2c 20 46 6f 72 44 69  on = {0}", ForDi
21e00 73 70 6c 61 79 28 76 73 56 65 72 73 69 6f 6e 29  splay(vsVersion)
21e10 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
21e20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74          traceCat
21e30 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
21e40 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21             if (!
21e50 48 61 76 65 56 73 56 65 72 73 69 6f 6e 28 72 6f  HaveVsVersion(ro
21e60 6f 74 4b 65 79 2c 20 76 73 56 65 72 73 69 6f 6e  otKey, vsVersion
21e70 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73  , whatIf, verbos
21e80 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e))..           
21e90 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
21ea0 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
21eb0 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61  eOps.DebugAndTra
21ec0 63 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79  ce(TracePriority
21ed0 2e 4c 6f 77 2c 0d 0a 20 20 20 20 20 20 20 20 20  .Low,..         
21ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
21ef0 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72  ebugCallback, tr
21f00 61 63 65 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20  aceCallback,..  
21f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21f20 20 20 20 20 20 20 22 56 69 73 75 61 6c 20 53 74        "Visual St
21f30 75 64 69 6f 20 76 65 72 73 69 6f 6e 20 6e 6f 74  udio version not
21f40 20 66 6f 75 6e 64 2c 20 73 6b 69 70 70 69 6e 67   found, skipping
21f50 2e 2e 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  ...",..         
21f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
21f70 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
21f80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
21f90 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d        continue;.
21fa0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
21fb0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
21fc0 20 20 20 20 20 20 69 66 20 28 63 61 6c 6c 62 61        if (callba
21fd0 63 6b 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ck == null)..   
21fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21ff0 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 0d 0a 20 20   continue;....  
22000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
22010 20 28 21 63 61 6c 6c 62 61 63 6b 28 0d 0a 20 20   (!callback(..  
22020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22030 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 76        rootKey, v
22040 73 56 65 72 73 69 6f 6e 2c 20 70 61 63 6b 61 67  sVersion, packag
22050 65 2c 20 63 6c 69 65 6e 74 44 61 74 61 2c 20 77  e, clientData, w
22060 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20  hatIf,..        
22070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22080 76 65 72 62 6f 73 65 2c 20 72 65 66 20 65 72 72  verbose, ref err
22090 6f 72 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  or))..          
220a0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
220b0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
220c0 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  urn false;..    
220d0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
220e0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
220f0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
22100 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20  rn true;..      
22110 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e    }..        #en
22120 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
22130 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
22140 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22150 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22160 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22170 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
22180 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 43 6f        #region Co
22190 6e 66 69 67 75 72 61 74 69 6f 6e 20 46 69 6c 65  nfiguration File
221a0 20 48 61 6e 64 6c 69 6e 67 0d 0a 20 20 20 20 20   Handling..     
221b0 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
221c0 63 20 62 6f 6f 6c 20 41 64 64 44 62 50 72 6f 76  c bool AddDbProv
221d0 69 64 65 72 46 61 63 74 6f 72 79 28 0d 0a 20 20  iderFactory(..  
221e0 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
221f0 20 66 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20 20   fileName,..    
22200 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 69          string i
22210 6e 76 61 72 69 61 6e 74 2c 0d 0a 20 20 20 20 20  nvariant,..     
22220 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6e 61         string na
22230 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me,..           
22240 20 73 74 72 69 6e 67 20 64 65 73 63 72 69 70 74   string descript
22250 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ion,..          
22260 20 20 73 74 72 69 6e 67 20 74 79 70 65 4e 61 6d    string typeNam
22270 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
22280 41 73 73 65 6d 62 6c 79 4e 61 6d 65 20 61 73 73  AssemblyName ass
22290 65 6d 62 6c 79 4e 61 6d 65 2c 0d 0a 20 20 20 20  emblyName,..    
222a0 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61          bool wha
222b0 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf,..          
222c0 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d    bool verbose,.
222d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66  .            ref
222e0 20 62 6f 6f 6c 20 73 61 76 65 64 2c 0d 0a 20 20   bool saved,..  
222f0 20 20 20 20 20 20 20 20 20 20 72 65 66 20 73 74            ref st
22300 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20 20  ring error..    
22310 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
22320 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
22330 20 20 62 6f 6f 6c 20 64 69 72 74 79 20 3d 20 66    bool dirty = f
22340 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
22350 20 20 20 58 6d 6c 44 6f 63 75 6d 65 6e 74 20 64     XmlDocument d
22360 6f 63 75 6d 65 6e 74 20 3d 20 6e 65 77 20 58 6d  ocument = new Xm
22370 6c 44 6f 63 75 6d 65 6e 74 28 29 3b 0d 0a 0d 0a  lDocument();....
22380 20 20 20 20 20 20 20 20 20 20 20 20 64 6f 63 75              docu
22390 6d 65 6e 74 2e 50 72 65 73 65 72 76 65 57 68 69  ment.PreserveWhi
223a0 74 65 73 70 61 63 65 20 3d 20 74 72 75 65 3b 0d  tespace = true;.
223b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 64 6f 63  .            doc
223c0 75 6d 65 6e 74 2e 4c 6f 61 64 28 66 69 6c 65 4e  ument.Load(fileN
223d0 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ame);....       
223e0 20 20 20 20 20 58 6d 6c 45 6c 65 6d 65 6e 74 20       XmlElement 
223f0 65 6c 65 6d 65 6e 74 20 3d 20 64 6f 63 75 6d 65  element = docume
22400 6e 74 2e 53 65 6c 65 63 74 53 69 6e 67 6c 65 4e  nt.SelectSingleN
22410 6f 64 65 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ode(String.Forma
22420 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
22430 20 20 20 20 58 50 61 74 68 46 6f 72 41 64 64 45      XPathForAddE
22440 6c 65 6d 65 6e 74 2c 20 69 6e 76 61 72 69 61 6e  lement, invarian
22450 74 29 29 20 61 73 20 58 6d 6c 45 6c 65 6d 65 6e  t)) as XmlElemen
22460 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  t;....          
22470 20 20 69 66 20 28 65 6c 65 6d 65 6e 74 20 3d 3d    if (element ==
22480 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
22490 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
224a0 20 20 20 20 20 20 20 73 74 72 69 6e 67 5b 5d 20         string[] 
224b0 65 6c 65 6d 65 6e 74 4e 61 6d 65 73 20 3d 20 7b  elementNames = {
224c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
224d0 20 20 20 20 20 20 20 20 20 20 22 73 79 73 74 65            "syste
224e0 6d 2e 64 61 74 61 22 2c 20 22 44 62 50 72 6f 76  m.data", "DbProv
224f0 69 64 65 72 46 61 63 74 6f 72 69 65 73 22 0d 0a  iderFactories"..
22500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22510 20 20 20 20 7d 3b 0d 0a 0d 0a 20 20 20 20 20 20      };....      
22520 20 20 20 20 20 20 20 20 20 20 58 6d 6c 45 6c 65            XmlEle
22530 6d 65 6e 74 20 70 72 65 76 69 6f 75 73 45 6c 65  ment previousEle
22540 6d 65 6e 74 20 3d 0d 0a 20 20 20 20 20 20 20 20  ment =..        
22550 20 20 20 20 20 20 20 20 20 20 20 20 64 6f 63 75              docu
22560 6d 65 6e 74 2e 44 6f 63 75 6d 65 6e 74 45 6c 65  ment.DocumentEle
22570 6d 65 6e 74 3b 20 2f 2a 20 63 6f 6e 66 69 67 75  ment; /* configu
22580 72 61 74 69 6f 6e 20 2a 2f 0d 0a 0d 0a 20 20 20  ration */....   
22590 20 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72               for
225a0 65 61 63 68 20 28 73 74 72 69 6e 67 20 65 6c 65  each (string ele
225b0 6d 65 6e 74 4e 61 6d 65 20 69 6e 20 65 6c 65 6d  mentName in elem
225c0 65 6e 74 4e 61 6d 65 73 29 0d 0a 20 20 20 20 20  entNames)..     
225d0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
225e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
225f0 20 20 65 6c 65 6d 65 6e 74 20 3d 20 70 72 65 76    element = prev
22600 69 6f 75 73 45 6c 65 6d 65 6e 74 2e 53 65 6c 65  iousElement.Sele
22610 63 74 53 69 6e 67 6c 65 4e 6f 64 65 28 0d 0a 20  ctSingleNode(.. 
22620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22630 20 20 20 20 20 20 20 65 6c 65 6d 65 6e 74 4e 61         elementNa
22640 6d 65 29 20 61 73 20 58 6d 6c 45 6c 65 6d 65 6e  me) as XmlElemen
22650 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  t;....          
22660 20 20 20 20 20 20 20 20 20 20 69 66 20 28 65 6c            if (el
22670 65 6d 65 6e 74 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  ement == null)..
22680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22690 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
226a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
226b0 6c 65 6d 65 6e 74 20 3d 20 64 6f 63 75 6d 65 6e  lement = documen
226c0 74 2e 43 72 65 61 74 65 45 6c 65 6d 65 6e 74 28  t.CreateElement(
226d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
226e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c                el
226f0 65 6d 65 6e 74 4e 61 6d 65 2c 20 53 74 72 69 6e  ementName, Strin
22700 67 2e 45 6d 70 74 79 29 3b 0d 0a 0d 0a 20 20 20  g.Empty);....   
22710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22720 20 20 20 20 20 70 72 65 76 69 6f 75 73 45 6c 65       previousEle
22730 6d 65 6e 74 2e 41 70 70 65 6e 64 43 68 69 6c 64  ment.AppendChild
22740 28 65 6c 65 6d 65 6e 74 29 3b 0d 0a 20 20 20 20  (element);..    
22750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22760 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
22770 20 20 20 20 20 20 20 20 20 70 72 65 76 69 6f 75           previou
22780 73 45 6c 65 6d 65 6e 74 20 3d 20 65 6c 65 6d 65  sElement = eleme
22790 6e 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  nt;..           
227a0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
227b0 20 20 20 20 20 20 20 20 20 20 65 6c 65 6d 65 6e            elemen
227c0 74 20 3d 20 64 6f 63 75 6d 65 6e 74 2e 43 72 65  t = document.Cre
227d0 61 74 65 45 6c 65 6d 65 6e 74 28 0d 0a 20 20 20  ateElement(..   
227e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
227f0 20 22 61 64 64 22 2c 20 53 74 72 69 6e 67 2e 45   "add", String.E
22800 6d 70 74 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  mpty);....      
22810 20 20 20 20 20 20 20 20 20 20 70 72 65 76 69 6f            previo
22820 75 73 45 6c 65 6d 65 6e 74 2e 41 70 70 65 6e 64  usElement.Append
22830 43 68 69 6c 64 28 65 6c 65 6d 65 6e 74 29 3b 0d  Child(element);.
22840 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
22850 20 20 20 64 69 72 74 79 20 3d 20 74 72 75 65 3b     dirty = true;
22860 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
22870 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
22880 66 20 28 21 53 74 72 69 6e 67 2e 45 71 75 61 6c  f (!String.Equal
22890 73 28 65 6c 65 6d 65 6e 74 2e 47 65 74 41 74 74  s(element.GetAtt
228a0 72 69 62 75 74 65 28 22 6e 61 6d 65 22 29 2c 0d  ribute("name"),.
228b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
228c0 20 20 20 20 20 6e 61 6d 65 2c 20 53 74 72 69 6e       name, Strin
228d0 67 43 6f 6d 70 61 72 69 73 6f 6e 2e 49 6e 76 61  gComparison.Inva
228e0 72 69 61 6e 74 43 75 6c 74 75 72 65 29 29 0d 0a  riantCulture))..
228f0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
22900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
22910 6c 65 6d 65 6e 74 2e 53 65 74 41 74 74 72 69 62  lement.SetAttrib
22920 75 74 65 28 22 6e 61 6d 65 22 2c 20 6e 61 6d 65  ute("name", name
22930 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
22940 20 20 20 20 64 69 72 74 79 20 3d 20 74 72 75 65      dirty = true
22950 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
22960 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
22970 69 66 20 28 21 53 74 72 69 6e 67 2e 45 71 75 61  if (!String.Equa
22980 6c 73 28 65 6c 65 6d 65 6e 74 2e 47 65 74 41 74  ls(element.GetAt
22990 74 72 69 62 75 74 65 28 22 69 6e 76 61 72 69 61  tribute("invaria
229a0 6e 74 22 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  nt"),..         
229b0 20 20 20 20 20 20 20 20 20 20 20 69 6e 76 61 72             invar
229c0 69 61 6e 74 2c 20 53 74 72 69 6e 67 43 6f 6d 70  iant, StringComp
229d0 61 72 69 73 6f 6e 2e 49 6e 76 61 72 69 61 6e 74  arison.Invariant
229e0 43 75 6c 74 75 72 65 29 29 0d 0a 20 20 20 20 20  Culture))..     
229f0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
22a00 20 20 20 20 20 20 20 20 20 20 65 6c 65 6d 65 6e            elemen
22a10 74 2e 53 65 74 41 74 74 72 69 62 75 74 65 28 22  t.SetAttribute("
22a20 69 6e 76 61 72 69 61 6e 74 22 2c 20 69 6e 76 61  invariant", inva
22a30 72 69 61 6e 74 29 3b 0d 0a 20 20 20 20 20 20 20  riant);..       
22a40 20 20 20 20 20 20 20 20 20 64 69 72 74 79 20 3d           dirty =
22a50 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20   true;..        
22a60 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
22a70 20 20 20 20 20 69 66 20 28 21 53 74 72 69 6e 67       if (!String
22a80 2e 45 71 75 61 6c 73 28 65 6c 65 6d 65 6e 74 2e  .Equals(element.
22a90 47 65 74 41 74 74 72 69 62 75 74 65 28 22 64 65  GetAttribute("de
22aa0 73 63 72 69 70 74 69 6f 6e 22 29 2c 0d 0a 20 20  scription"),..  
22ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22ac0 20 20 64 65 73 63 72 69 70 74 69 6f 6e 2c 20 53    description, S
22ad0 74 72 69 6e 67 43 6f 6d 70 61 72 69 73 6f 6e 2e  tringComparison.
22ae0 49 6e 76 61 72 69 61 6e 74 43 75 6c 74 75 72 65  InvariantCulture
22af0 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
22b00 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
22b10 20 20 20 65 6c 65 6d 65 6e 74 2e 53 65 74 41 74     element.SetAt
22b20 74 72 69 62 75 74 65 28 22 64 65 73 63 72 69 70  tribute("descrip
22b30 74 69 6f 6e 22 2c 20 64 65 73 63 72 69 70 74 69  tion", descripti
22b40 6f 6e 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  on);..          
22b50 20 20 20 20 20 20 64 69 72 74 79 20 3d 20 74 72        dirty = tr
22b60 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
22b70 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
22b80 20 20 73 74 72 69 6e 67 20 66 75 6c 6c 54 79 70    string fullTyp
22b90 65 4e 61 6d 65 20 3d 20 53 74 72 69 6e 67 2e 46  eName = String.F
22ba0 6f 72 6d 61 74 28 22 7b 30 7d 2c 20 7b 31 7d 22  ormat("{0}, {1}"
22bb0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
22bc0 20 20 20 74 79 70 65 4e 61 6d 65 2c 20 61 73 73     typeName, ass
22bd0 65 6d 62 6c 79 4e 61 6d 65 29 3b 0d 0a 0d 0a 20  emblyName);.... 
22be0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21             if (!
22bf0 53 74 72 69 6e 67 2e 45 71 75 61 6c 73 28 65 6c  String.Equals(el
22c00 65 6d 65 6e 74 2e 47 65 74 41 74 74 72 69 62 75  ement.GetAttribu
22c10 74 65 28 22 74 79 70 65 22 29 2c 0d 0a 20 20 20  te("type"),..   
22c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22c30 20 66 75 6c 6c 54 79 70 65 4e 61 6d 65 2c 20 53   fullTypeName, S
22c40 74 72 69 6e 67 43 6f 6d 70 61 72 69 73 6f 6e 2e  tringComparison.
22c50 49 6e 76 61 72 69 61 6e 74 43 75 6c 74 75 72 65  InvariantCulture
22c60 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
22c70 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
22c80 20 20 20 65 6c 65 6d 65 6e 74 2e 53 65 74 41 74     element.SetAt
22c90 74 72 69 62 75 74 65 28 22 74 79 70 65 22 2c 20  tribute("type", 
22ca0 66 75 6c 6c 54 79 70 65 4e 61 6d 65 29 3b 0d 0a  fullTypeName);..
22cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22cc0 64 69 72 74 79 20 3d 20 74 72 75 65 3b 0d 0a 20  dirty = true;.. 
22cd0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
22ce0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
22cf0 64 69 72 74 79 20 7c 7c 20 77 68 61 74 49 66 29  dirty || whatIf)
22d00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
22d10 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
22d20 20 69 66 20 28 76 65 72 62 6f 73 65 29 0d 0a 20   if (verbose).. 
22d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22d40 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75     TraceOps.Debu
22d50 67 41 6e 64 54 72 61 63 65 28 54 72 61 63 65 50  gAndTrace(TraceP
22d60 72 69 6f 72 69 74 79 2e 48 69 67 68 65 73 74 2c  riority.Highest,
22d70 0d 0a 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 64 65 62 75 67 43            debugC
22d90 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61  allback, traceCa
22da0 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46  llback, String.F
22db0 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
22dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22dd0 22 65 6c 65 6d 65 6e 74 20 3d 20 7b 30 7d 22 2c  "element = {0}",
22de0 20 46 6f 72 44 69 73 70 6c 61 79 28 65 6c 65 6d   ForDisplay(elem
22df0 65 6e 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  ent)),..        
22e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22e10 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
22e20 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
22e30 20 20 20 69 66 20 28 21 77 68 61 74 49 66 29 0d     if (!whatIf).
22e40 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
22e50 20 20 20 20 20 64 6f 63 75 6d 65 6e 74 2e 53 61       document.Sa
22e60 76 65 28 66 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d  ve(fileName);...
22e70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
22e80 20 73 61 76 65 64 20 3d 20 74 72 75 65 3b 0d 0a   saved = true;..
22e90 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
22ea0 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
22eb0 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20  urn true;..     
22ec0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
22ed0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22ee0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22ef0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22f00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22f10 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
22f20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
22f30 63 20 62 6f 6f 6c 20 52 65 6d 6f 76 65 44 62 50  c bool RemoveDbP
22f40 72 6f 76 69 64 65 72 46 61 63 74 6f 72 79 28 0d  roviderFactory(.
22f50 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72  .            str
22f60 69 6e 67 20 66 69 6c 65 4e 61 6d 65 2c 0d 0a 20  ing fileName,.. 
22f70 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
22f80 67 20 69 6e 76 61 72 69 61 6e 74 2c 0d 0a 20 20  g invariant,..  
22f90 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77            bool w
22fa0 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20  hatIf,..        
22fb0 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65      bool verbose
22fc0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ,..            r
22fd0 65 66 20 62 6f 6f 6c 20 73 61 76 65 64 2c 0d 0a  ef bool saved,..
22fe0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20              ref 
22ff0 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20  string error..  
23000 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
23010 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
23020 20 20 20 20 62 6f 6f 6c 20 64 69 72 74 79 20 3d      bool dirty =
23030 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
23040 20 20 20 20 20 58 6d 6c 44 6f 63 75 6d 65 6e 74       XmlDocument
23050 20 64 6f 63 75 6d 65 6e 74 20 3d 20 6e 65 77 20   document = new 
23060 58 6d 6c 44 6f 63 75 6d 65 6e 74 28 29 3b 0d 0a  XmlDocument();..
23070 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 64 6f  ..            do
23080 63 75 6d 65 6e 74 2e 50 72 65 73 65 72 76 65 57  cument.PreserveW
23090 68 69 74 65 73 70 61 63 65 20 3d 20 74 72 75 65  hitespace = true
230a0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 64  ;..            d
230b0 6f 63 75 6d 65 6e 74 2e 4c 6f 61 64 28 66 69 6c  ocument.Load(fil
230c0 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  eName);....     
230d0 20 20 20 20 20 20 20 58 6d 6c 45 6c 65 6d 65 6e         XmlElemen
230e0 74 20 65 6c 65 6d 65 6e 74 20 3d 20 64 6f 63 75  t element = docu
230f0 6d 65 6e 74 2e 53 65 6c 65 63 74 53 69 6e 67 6c  ment.SelectSingl
23100 65 4e 6f 64 65 28 53 74 72 69 6e 67 2e 46 6f 72  eNode(String.For
23110 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
23120 20 20 20 20 20 20 58 50 61 74 68 46 6f 72 41 64        XPathForAd
23130 64 45 6c 65 6d 65 6e 74 2c 20 69 6e 76 61 72 69  dElement, invari
23140 61 6e 74 29 29 20 61 73 20 58 6d 6c 45 6c 65 6d  ant)) as XmlElem
23150 65 6e 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ent;....        
23160 20 20 20 20 69 66 20 28 65 6c 65 6d 65 6e 74 20      if (element 
23170 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  != null)..      
23180 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
23190 20 20 20 20 20 20 20 20 20 65 6c 65 6d 65 6e 74           element
231a0 2e 50 61 72 65 6e 74 4e 6f 64 65 2e 52 65 6d 6f  .ParentNode.Remo
231b0 76 65 43 68 69 6c 64 28 65 6c 65 6d 65 6e 74 29  veChild(element)
231c0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
231d0 20 20 20 64 69 72 74 79 20 3d 20 74 72 75 65 3b     dirty = true;
231e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
231f0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 65  ...            e
23200 6c 65 6d 65 6e 74 20 3d 20 64 6f 63 75 6d 65 6e  lement = documen
23210 74 2e 53 65 6c 65 63 74 53 69 6e 67 6c 65 4e 6f  t.SelectSingleNo
23220 64 65 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  de(String.Format
23230 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
23240 20 20 20 58 50 61 74 68 46 6f 72 52 65 6d 6f 76     XPathForRemov
23250 65 45 6c 65 6d 65 6e 74 2c 20 69 6e 76 61 72 69  eElement, invari
23260 61 6e 74 29 29 20 61 73 20 58 6d 6c 45 6c 65 6d  ant)) as XmlElem
23270 65 6e 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ent;....        
23280 20 20 20 20 69 66 20 28 65 6c 65 6d 65 6e 74 20      if (element 
23290 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  != null)..      
232a0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
232b0 20 20 20 20 20 20 20 20 20 65 6c 65 6d 65 6e 74           element
232c0 2e 50 61 72 65 6e 74 4e 6f 64 65 2e 52 65 6d 6f  .ParentNode.Remo
232d0 76 65 43 68 69 6c 64 28 65 6c 65 6d 65 6e 74 29  veChild(element)
232e0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
232f0 20 20 20 64 69 72 74 79 20 3d 20 74 72 75 65 3b     dirty = true;
23300 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
23310 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
23320 66 20 28 64 69 72 74 79 20 7c 7c 20 77 68 61 74  f (dirty || what
23330 49 66 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  If)..           
23340 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
23350 20 20 20 20 69 66 20 28 76 65 72 62 6f 73 65 29      if (verbose)
23360 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
23370 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44        TraceOps.D
23380 65 62 75 67 41 6e 64 54 72 61 63 65 28 54 72 61  ebugAndTrace(Tra
23390 63 65 50 72 69 6f 72 69 74 79 2e 48 69 67 68 65  cePriority.Highe
233a0 73 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  st,..           
233b0 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62               deb
233c0 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63  ugCallback, trac
233d0 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e  eCallback, Strin
233e0 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
233f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23400 20 20 20 22 65 6c 65 6d 65 6e 74 20 3d 20 7b 30     "element = {0
23410 7d 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 65  }", ForDisplay(e
23420 6c 65 6d 65 6e 74 29 29 2c 0d 0a 20 20 20 20 20  lement)),..     
23430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23440 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
23450 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
23460 20 20 20 20 20 20 69 66 20 28 21 77 68 61 74 49        if (!whatI
23470 66 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f)..            
23480 20 20 20 20 20 20 20 20 64 6f 63 75 6d 65 6e 74          document
23490 2e 53 61 76 65 28 66 69 6c 65 4e 61 6d 65 29 3b  .Save(fileName);
234a0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
234b0 20 20 20 20 73 61 76 65 64 20 3d 20 74 72 75 65      saved = true
234c0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
234d0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
234e0 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20  return true;..  
234f0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
23500 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
23510 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23520 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23530 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23540 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
23550 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
23560 61 74 69 63 20 62 6f 6f 6c 20 50 72 6f 63 65 73  atic bool Proces
23570 73 44 62 50 72 6f 76 69 64 65 72 46 61 63 74 6f  sDbProviderFacto
23580 72 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ry(..           
23590 20 73 74 72 69 6e 67 20 66 69 6c 65 4e 61 6d 65   string fileName
235a0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  ,..            s
235b0 74 72 69 6e 67 20 69 6e 76 61 72 69 61 6e 74 2c  tring invariant,
235c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
235d0 72 69 6e 67 20 6e 61 6d 65 2c 0d 0a 20 20 20 20  ring name,..    
235e0 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 64          string d
235f0 65 73 63 72 69 70 74 69 6f 6e 2c 0d 0a 20 20 20  escription,..   
23600 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
23610 74 79 70 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20  typeName,..     
23620 20 20 20 20 20 20 20 41 73 73 65 6d 62 6c 79 4e         AssemblyN
23630 61 6d 65 20 61 73 73 65 6d 62 6c 79 4e 61 6d 65  ame assemblyName
23640 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6f  ,..            o
23650 62 6a 65 63 74 20 63 6c 69 65 6e 74 44 61 74 61  bject clientData
23660 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
23670 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20  ool whatIf,..   
23680 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65           bool ve
23690 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 20  rbose,..        
236a0 20 20 20 20 72 65 66 20 62 6f 6f 6c 20 73 61 76      ref bool sav
236b0 65 64 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ed,..           
236c0 20 72 65 66 20 73 74 72 69 6e 67 20 65 72 72 6f   ref string erro
236d0 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29  r..            )
236e0 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
236f0 20 20 20 20 20 20 20 20 20 41 6e 79 50 61 69 72           AnyPair
23700 3c 73 74 72 69 6e 67 2c 20 62 6f 6f 6c 3e 20 70  <string, bool> p
23710 61 69 72 20 3d 20 63 6c 69 65 6e 74 44 61 74 61  air = clientData
23720 20 61 73 20 41 6e 79 50 61 69 72 3c 73 74 72 69   as AnyPair<stri
23730 6e 67 2c 20 62 6f 6f 6c 3e 3b 0d 0a 0d 0a 20 20  ng, bool>;....  
23740 20 20 20 20 20 20 20 20 20 20 69 66 20 28 70 61            if (pa
23750 69 72 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ir == null)..   
23760 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
23770 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
23780 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 66 72 61  r = "invalid fra
23790 6d 65 77 6f 72 6b 20 63 6f 6e 66 69 67 20 63 61  mework config ca
237a0 6c 6c 62 61 63 6b 20 64 61 74 61 22 3b 0d 0a 20  llback data";.. 
237b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
237c0 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
237d0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
237e0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 70             if (p
237f0 61 69 72 2e 59 29 0d 0a 20 20 20 20 20 20 20 20  air.Y)..        
23800 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
23810 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 52 65         return Re
23820 6d 6f 76 65 44 62 50 72 6f 76 69 64 65 72 46 61  moveDbProviderFa
23830 63 74 6f 72 79 28 0d 0a 20 20 20 20 20 20 20 20  ctory(..        
23840 20 20 20 20 20 20 20 20 20 20 20 20 66 69 6c 65              file
23850 4e 61 6d 65 2c 20 69 6e 76 61 72 69 61 6e 74 2c  Name, invariant,
23860 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65   whatIf, verbose
23870 2c 20 72 65 66 20 73 61 76 65 64 2c 0d 0a 20 20  , ref saved,..  
23880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23890 20 20 72 65 66 20 65 72 72 6f 72 29 20 26 26 0d    ref error) &&.
238a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
238b0 20 41 64 64 44 62 50 72 6f 76 69 64 65 72 46 61   AddDbProviderFa
238c0 63 74 6f 72 79 28 0d 0a 20 20 20 20 20 20 20 20  ctory(..        
238d0 20 20 20 20 20 20 20 20 20 20 20 20 66 69 6c 65              file
238e0 4e 61 6d 65 2c 20 69 6e 76 61 72 69 61 6e 74 2c  Name, invariant,
238f0 20 6e 61 6d 65 2c 20 64 65 73 63 72 69 70 74 69   name, descripti
23900 6f 6e 2c 20 74 79 70 65 4e 61 6d 65 2c 0d 0a 20  on, typeName,.. 
23910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23920 20 20 20 61 73 73 65 6d 62 6c 79 4e 61 6d 65 2c     assemblyName,
23930 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65   whatIf, verbose
23940 2c 20 72 65 66 20 73 61 76 65 64 2c 20 72 65 66  , ref saved, ref
23950 20 65 72 72 6f 72 29 3b 0d 0a 20 20 20 20 20 20   error);..      
23960 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
23970 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20       else..     
23980 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
23990 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
239a0 20 52 65 6d 6f 76 65 44 62 50 72 6f 76 69 64 65   RemoveDbProvide
239b0 72 46 61 63 74 6f 72 79 28 0d 0a 20 20 20 20 20  rFactory(..     
239c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66                 f
239d0 69 6c 65 4e 61 6d 65 2c 20 69 6e 76 61 72 69 61  ileName, invaria
239e0 6e 74 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62  nt, whatIf, verb
239f0 6f 73 65 2c 20 72 65 66 20 73 61 76 65 64 2c 0d  ose, ref saved,.
23a00 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
23a10 20 20 20 20 20 72 65 66 20 65 72 72 6f 72 29 3b       ref error);
23a20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
23a30 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
23a40 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
23a50 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
23a60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23a70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23a80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23a90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23aa0 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65  /....        #re
23ab0 67 69 6f 6e 20 41 73 73 65 6d 62 6c 79 20 46 6f  gion Assembly Fo
23ac0 6c 64 65 72 73 20 48 61 6e 64 6c 69 6e 67 0d 0a  lders Handling..
23ad0 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
23ae0 73 74 61 74 69 63 20 73 74 72 69 6e 67 20 47 65  static string Ge
23af0 74 41 73 73 65 6d 62 6c 79 46 6f 6c 64 65 72 73  tAssemblyFolders
23b00 4b 65 79 4e 61 6d 65 28 0d 0a 20 20 20 20 20 20  KeyName(..      
23b10 20 20 20 20 20 20 73 74 72 69 6e 67 20 66 72 61        string fra
23b20 6d 65 77 6f 72 6b 4e 61 6d 65 2c 0d 0a 20 20 20  meworkName,..   
23b30 20 20 20 20 20 20 20 20 20 56 65 72 73 69 6f 6e           Version
23b40 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f   frameworkVersio
23b50 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n,..            
23b60 73 74 72 69 6e 67 20 70 6c 61 74 66 6f 72 6d 4e  string platformN
23b70 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ame..           
23b80 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20   )..        {.. 
23b90 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
23ba0 67 20 66 6f 72 6d 61 74 20 3d 20 21 53 74 72 69  g format = !Stri
23bb0 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79  ng.IsNullOrEmpty
23bc0 28 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 29 20 3f  (platformName) ?
23bd0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
23be0 20 20 22 53 6f 66 74 77 61 72 65 5c 5c 4d 69 63    "Software\\Mic
23bf0 72 6f 73 6f 66 74 5c 5c 7b 30 7d 5c 5c 76 7b 31  rosoft\\{0}\\v{1
23c00 7d 5c 5c 7b 32 7d 5c 5c 41 73 73 65 6d 62 6c 79  }\\{2}\\Assembly
23c10 46 6f 6c 64 65 72 73 45 78 22 20 3a 0d 0a 20 20  FoldersEx" :..  
23c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 53                "S
23c30 6f 66 74 77 61 72 65 5c 5c 4d 69 63 72 6f 73 6f  oftware\\Microso
23c40 66 74 5c 5c 7b 30 7d 5c 5c 76 7b 31 7d 5c 5c 41  ft\\{0}\\v{1}\\A
23c50 73 73 65 6d 62 6c 79 46 6f 6c 64 65 72 73 45 78  ssemblyFoldersEx
23c60 22 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  ";....          
23c70 20 20 72 65 74 75 72 6e 20 53 74 72 69 6e 67 2e    return String.
23c80 46 6f 72 6d 61 74 28 66 6f 72 6d 61 74 2c 20 66  Format(format, f
23c90 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 20 66 72  rameworkName, fr
23ca0 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 0d  ameworkVersion,.
23cb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
23cc0 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 29 3b 0d   platformName);.
23cd0 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
23ce0 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
23cf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23d00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23d10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23d20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
23d30 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
23d40 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 41 64 64   static bool Add
23d50 54 6f 41 73 73 65 6d 62 6c 79 46 6f 6c 64 65 72  ToAssemblyFolder
23d60 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s(..            
23d70 52 65 67 69 73 74 72 79 4b 65 79 20 72 6f 6f 74  RegistryKey root
23d80 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  Key,..          
23d90 20 20 73 74 72 69 6e 67 20 66 72 61 6d 65 77 6f    string framewo
23da0 72 6b 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20  rkName,..       
23db0 20 20 20 20 20 56 65 72 73 69 6f 6e 20 66 72 61       Version fra
23dc0 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 0d 0a  meworkVersion,..
23dd0 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
23de0 6e 67 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c  ng platformName,
23df0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
23e00 72 69 6e 67 20 73 75 62 4b 65 79 4e 61 6d 65 2c  ring subKeyName,
23e10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
23e20 72 69 6e 67 20 64 69 72 65 63 74 6f 72 79 2c 0d  ring directory,.
23e30 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
23e40 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20  l whatIf,..     
23e50 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62         bool verb
23e60 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ose,..          
23e70 20 20 72 65 66 20 73 74 72 69 6e 67 20 65 72 72    ref string err
23e80 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  or..            
23e90 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
23ea0 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
23eb0 20 6b 65 79 4e 61 6d 65 20 3d 20 47 65 74 41 73   keyName = GetAs
23ec0 73 65 6d 62 6c 79 46 6f 6c 64 65 72 73 4b 65 79  semblyFoldersKey
23ed0 4e 61 6d 65 28 0d 0a 20 20 20 20 20 20 20 20 20  Name(..         
23ee0 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b         framework
23ef0 4e 61 6d 65 2c 20 66 72 61 6d 65 77 6f 72 6b 56  Name, frameworkV
23f00 65 72 73 69 6f 6e 2c 20 70 6c 61 74 66 6f 72 6d  ersion, platform
23f10 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  Name);....      
23f20 20 20 20 20 20 20 75 73 69 6e 67 20 28 4d 6f 63        using (Moc
23f30 6b 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65 79  kRegistryKey key
23f40 20 3d 20 52 65 67 69 73 74 72 79 48 65 6c 70 65   = RegistryHelpe
23f50 72 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20  r.OpenSubKey(.. 
23f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23f70 20 20 20 72 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e     rootKey, keyN
23f80 61 6d 65 2c 20 74 72 75 65 2c 20 77 68 61 74 49  ame, true, whatI
23f90 66 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20  f, verbose))..  
23fa0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
23fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
23fc0 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  (key == null).. 
23fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
23fe0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
23ff0 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 53 74        error = St
24000 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
24010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24020 20 20 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74        "could not
24030 20 6f 70 65 6e 20 72 65 67 69 73 74 72 79 20 6b   open registry k
24040 65 79 3a 20 7b 30 7d 5c 5c 7b 31 7d 22 2c 0d 0a  ey: {0}\\{1}",..
24050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24060 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c          rootKey,
24070 20 6b 65 79 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20   keyName);....  
24080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24090 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
240a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
240b0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
240c0 20 20 20 20 20 20 75 73 69 6e 67 20 28 4d 6f 63        using (Moc
240d0 6b 52 65 67 69 73 74 72 79 4b 65 79 20 73 75 62  kRegistryKey sub
240e0 4b 65 79 20 3d 20 52 65 67 69 73 74 72 79 48 65  Key = RegistryHe
240f0 6c 70 65 72 2e 43 72 65 61 74 65 53 75 62 4b 65  lper.CreateSubKe
24100 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
24110 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 2c              key,
24120 20 73 75 62 4b 65 79 4e 61 6d 65 2c 20 77 68 61   subKeyName, wha
24130 74 49 66 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a  tIf, verbose))..
24140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24150 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
24160 20 20 20 20 20 20 20 69 66 20 28 73 75 62 4b 65         if (subKe
24170 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  y == null)..    
24180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24190 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
241a0 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
241b0 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74   = String.Format
241c0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
241d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
241e0 63 6f 75 6c 64 20 6e 6f 74 20 63 72 65 61 74 65  could not create
241f0 20 72 65 67 69 73 74 72 79 20 6b 65 79 3a 20 7b   registry key: {
24200 30 7d 5c 5c 7b 31 7d 22 2c 0d 0a 20 20 20 20 20  0}\\{1}",..     
24210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24220 20 20 20 20 20 20 20 6b 65 79 2c 20 73 75 62 4b         key, subK
24230 65 79 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20  eyName);....    
24240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24250 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
24260 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
24270 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
24280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24290 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 53  RegistryHelper.S
242a0 65 74 56 61 6c 75 65 28 0d 0a 20 20 20 20 20 20  etValue(..      
242b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
242c0 20 20 73 75 62 4b 65 79 2c 20 6e 75 6c 6c 2c 20    subKey, null, 
242d0 64 69 72 65 63 74 6f 72 79 2c 20 77 68 61 74 49  directory, whatI
242e0 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a 20 20  f, verbose);..  
242f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
24300 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
24310 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
24320 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20  turn true;..    
24330 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
24340 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
24350 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24360 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24370 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24380 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
24390 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74      private stat
243a0 69 63 20 62 6f 6f 6c 20 52 65 6d 6f 76 65 46 72  ic bool RemoveFr
243b0 6f 6d 41 73 73 65 6d 62 6c 79 46 6f 6c 64 65 72  omAssemblyFolder
243c0 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s(..            
243d0 52 65 67 69 73 74 72 79 4b 65 79 20 72 6f 6f 74  RegistryKey root
243e0 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  Key,..          
243f0 20 20 73 74 72 69 6e 67 20 66 72 61 6d 65 77 6f    string framewo
24400 72 6b 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20  rkName,..       
24410 20 20 20 20 20 56 65 72 73 69 6f 6e 20 66 72 61       Version fra
24420 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 0d 0a  meworkVersion,..
24430 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
24440 6e 67 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c  ng platformName,
24450 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
24460 72 69 6e 67 20 73 75 62 4b 65 79 4e 61 6d 65 2c  ring subKeyName,
24470 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
24480 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20  ol whatIf,..    
24490 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72          bool ver
244a0 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  bose,..         
244b0 20 20 20 72 65 66 20 73 74 72 69 6e 67 20 65 72     ref string er
244c0 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ror..           
244d0 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20   )..        {.. 
244e0 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
244f0 67 20 6b 65 79 4e 61 6d 65 20 3d 20 47 65 74 41  g keyName = GetA
24500 73 73 65 6d 62 6c 79 46 6f 6c 64 65 72 73 4b 65  ssemblyFoldersKe
24510 79 4e 61 6d 65 28 0d 0a 20 20 20 20 20 20 20 20  yName(..        
24520 20 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72          framewor
24530 6b 4e 61 6d 65 2c 20 66 72 61 6d 65 77 6f 72 6b  kName, framework
24540 56 65 72 73 69 6f 6e 2c 20 70 6c 61 74 66 6f 72  Version, platfor
24550 6d 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  mName);....     
24560 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 4d 6f         using (Mo
24570 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65  ckRegistryKey ke
24580 79 20 3d 20 52 65 67 69 73 74 72 79 48 65 6c 70  y = RegistryHelp
24590 65 72 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a  er.OpenSubKey(..
245a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
245b0 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 6b 65 79      rootKey, key
245c0 4e 61 6d 65 2c 20 66 61 6c 73 65 2c 20 77 68 61  Name, false, wha
245d0 74 49 66 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a  tIf, verbose))..
245e0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
245f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
24600 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d  f (key == null).
24610 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
24620 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
24630 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
24640 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
24650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24660 20 20 20 20 20 20 20 20 22 63 6f 75 6c 64 20 6e          "could n
24670 6f 74 20 6f 70 65 6e 20 72 65 67 69 73 74 72 79  ot open registry
24680 20 6b 65 79 3a 20 7b 30 7d 5c 5c 7b 31 7d 22 2c   key: {0}\\{1}",
24690 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
246a0 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65            rootKe
246b0 79 2c 20 6b 65 79 4e 61 6d 65 29 3b 0d 0a 0d 0a  y, keyName);....
246c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
246d0 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
246e0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
246f0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
24700 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79          Registry
24710 48 65 6c 70 65 72 2e 44 65 6c 65 74 65 53 75 62  Helper.DeleteSub
24720 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  Key(..          
24730 20 20 20 20 20 20 20 20 20 20 6b 65 79 2c 20 73            key, s
24740 75 62 4b 65 79 4e 61 6d 65 2c 20 77 68 61 74 49  ubKeyName, whatI
24750 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a 20 20  f, verbose);..  
24760 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
24770 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
24780 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20  n true;..       
24790 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f   }....        //
247a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
247b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
247c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
247d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
247e0 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
247f0 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
24800 62 6f 6f 6c 20 50 72 6f 63 65 73 73 41 73 73 65  bool ProcessAsse
24810 6d 62 6c 79 46 6f 6c 64 65 72 73 28 0d 0a 20 20  mblyFolders(..  
24820 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74            Regist
24830 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a  ryKey rootKey,..
24840 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
24850 6e 67 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65  ng frameworkName
24860 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 56  ,..            V
24870 65 72 73 69 6f 6e 20 66 72 61 6d 65 77 6f 72 6b  ersion framework
24880 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20  Version,..      
24890 20 20 20 20 20 20 73 74 72 69 6e 67 20 70 6c 61        string pla
248a0 74 66 6f 72 6d 4e 61 6d 65 2c 0d 0a 20 20 20 20  tformName,..    
248b0 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 63          object c
248c0 6c 69 65 6e 74 44 61 74 61 2c 0d 0a 20 20 20 20  lientData,..    
248d0 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61          bool wha
248e0 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf,..          
248f0 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d    bool verbose,.
24900 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66  .            ref
24910 20 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20   string error.. 
24920 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
24930 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
24940 20 20 20 20 20 41 6e 79 50 61 69 72 3c 73 74 72       AnyPair<str
24950 69 6e 67 2c 20 62 6f 6f 6c 3e 20 70 61 69 72 20  ing, bool> pair 
24960 3d 20 63 6c 69 65 6e 74 44 61 74 61 20 61 73 20  = clientData as 
24970 41 6e 79 50 61 69 72 3c 73 74 72 69 6e 67 2c 20  AnyPair<string, 
24980 62 6f 6f 6c 3e 3b 0d 0a 0d 0a 20 20 20 20 20 20  bool>;....      
24990 20 20 20 20 20 20 69 66 20 28 70 61 69 72 20 3d        if (pair =
249a0 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
249b0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
249c0 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
249d0 22 69 6e 76 61 6c 69 64 20 66 72 61 6d 65 77 6f  "invalid framewo
249e0 72 6b 20 63 61 6c 6c 62 61 63 6b 20 64 61 74 61  rk callback data
249f0 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ";..            
24a00 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
24a10 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
24a20 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
24a30 69 66 20 28 70 61 69 72 2e 59 29 0d 0a 20 20 20  if (pair.Y)..   
24a40 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
24a50 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
24a60 72 6e 20 52 65 6d 6f 76 65 46 72 6f 6d 41 73 73  rn RemoveFromAss
24a70 65 6d 62 6c 79 46 6f 6c 64 65 72 73 28 0d 0a 20  emblyFolders(.. 
24a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24a90 20 20 20 72 6f 6f 74 4b 65 79 2c 20 66 72 61 6d     rootKey, fram
24aa0 65 77 6f 72 6b 4e 61 6d 65 2c 20 66 72 61 6d 65  eworkName, frame
24ab0 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 20 70 6c 61  workVersion, pla
24ac0 74 66 6f 72 6d 4e 61 6d 65 2c 0d 0a 20 20 20 20  tformName,..    
24ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24ae0 4c 65 67 61 63 79 50 72 6f 6a 65 63 74 4e 61 6d  LegacyProjectNam
24af0 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f  e, whatIf, verbo
24b00 73 65 2c 20 72 65 66 20 65 72 72 6f 72 29 20 26  se, ref error) &
24b10 26 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  &..             
24b20 20 20 20 41 64 64 54 6f 41 73 73 65 6d 62 6c 79     AddToAssembly
24b30 46 6f 6c 64 65 72 73 28 0d 0a 20 20 20 20 20 20  Folders(..      
24b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f                ro
24b50 6f 74 4b 65 79 2c 20 66 72 61 6d 65 77 6f 72 6b  otKey, framework
24b60 4e 61 6d 65 2c 20 66 72 61 6d 65 77 6f 72 6b 56  Name, frameworkV
24b70 65 72 73 69 6f 6e 2c 20 70 6c 61 74 66 6f 72 6d  ersion, platform
24b80 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  Name,..         
24b90 20 20 20 20 20 20 20 20 20 20 20 50 72 6f 6a 65             Proje
24ba0 63 74 4e 61 6d 65 2c 20 70 61 69 72 2e 58 2c 20  ctName, pair.X, 
24bb0 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 2c  whatIf, verbose,
24bc0 20 72 65 66 20 65 72 72 6f 72 29 3b 0d 0a 20 20   ref error);..  
24bd0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
24be0 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20           else.. 
24bf0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
24c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
24c10 74 75 72 6e 20 52 65 6d 6f 76 65 46 72 6f 6d 41  turn RemoveFromA
24c20 73 73 65 6d 62 6c 79 46 6f 6c 64 65 72 73 28 0d  ssemblyFolders(.
24c30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
24c40 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 66 72       rootKey, fr
24c50 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 20 66 72 61  ameworkName, fra
24c60 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 20 70  meworkVersion, p
24c70 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c 0d 0a 20 20  latformName,..  
24c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24c90 20 20 50 72 6f 6a 65 63 74 4e 61 6d 65 2c 20 77    ProjectName, w
24ca0 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 2c 20  hatIf, verbose, 
24cb0 72 65 66 20 65 72 72 6f 72 29 3b 0d 0a 20 20 20  ref error);..   
24cc0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
24cd0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23      }..        #
24ce0 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
24cf0 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
24d00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24d10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24d20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24d30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
24d40 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
24d50 56 69 73 75 61 6c 20 53 74 75 64 69 6f 20 48 61  Visual Studio Ha
24d60 6e 64 6c 69 6e 67 0d 0a 20 20 20 20 20 20 20 20  ndling..        
24d70 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 73  private static s
24d80 74 72 69 6e 67 20 47 65 74 56 73 4b 65 79 4e 61  tring GetVsKeyNa
24d90 6d 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me(..           
24da0 20 56 65 72 73 69 6f 6e 20 76 73 56 65 72 73 69   Version vsVersi
24db0 6f 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  on..            
24dc0 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
24dd0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76 73            if (vs
24de0 56 65 72 73 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29  Version == null)
24df0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
24e00 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a    return null;..
24e10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
24e20 74 75 72 6e 20 53 74 72 69 6e 67 2e 46 6f 72 6d  turn String.Form
24e30 61 74 28 22 53 6f 66 74 77 61 72 65 5c 5c 4d 69  at("Software\\Mi
24e40 63 72 6f 73 6f 66 74 5c 5c 56 69 73 75 61 6c 53  crosoft\\VisualS
24e50 74 75 64 69 6f 5c 5c 7b 30 7d 22 2c 0d 0a 20 20  tudio\\{0}",..  
24e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76 73                vs
24e70 56 65 72 73 69 6f 6e 29 3b 0d 0a 20 20 20 20 20  Version);..     
24e80 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
24e90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24ea0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24eb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24ec0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24ed0 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
24ee0 20 20 20 23 72 65 67 69 6f 6e 20 56 69 73 75 61     #region Visua
24ef0 6c 20 53 74 75 64 69 6f 20 56 65 72 73 69 6f 6e  l Studio Version
24f00 20 48 61 6e 64 6c 69 6e 67 0d 0a 20 20 20 20 20   Handling..     
24f10 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
24f20 63 20 62 6f 6f 6c 20 41 64 64 56 73 56 65 72 73  c bool AddVsVers
24f30 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ion(..          
24f40 20 20 52 65 67 69 73 74 72 79 4b 65 79 20 72 6f    RegistryKey ro
24f50 6f 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20  otKey,..        
24f60 20 20 20 20 56 65 72 73 69 6f 6e 20 76 73 56 65      Version vsVe
24f70 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20  rsion,..        
24f80 20 20 20 20 50 61 63 6b 61 67 65 20 70 61 63 6b      Package pack
24f90 61 67 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  age,..          
24fa0 20 20 6f 62 6a 65 63 74 20 63 6c 69 65 6e 74 44    object clientD
24fb0 61 74 61 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ata,..          
24fc0 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a    bool whatIf,..
24fd0 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
24fe0 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20   verbose,..     
24ff0 20 20 20 20 20 20 20 72 65 66 20 73 74 72 69 6e         ref strin
25000 67 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20  g error..       
25010 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
25020 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  {..            i
25030 66 20 28 76 73 56 65 72 73 69 6f 6e 20 21 3d 20  f (vsVersion != 
25040 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
25050 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
25060 20 20 20 20 20 20 56 73 4c 69 73 74 20 76 73 4c        VsList vsL
25070 69 73 74 20 3d 20 63 6c 69 65 6e 74 44 61 74 61  ist = clientData
25080 20 61 73 20 56 73 4c 69 73 74 3b 0d 0a 0d 0a 20   as VsList;.... 
25090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
250a0 66 20 28 76 73 4c 69 73 74 20 21 3d 20 6e 75 6c  f (vsList != nul
250b0 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
250c0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
250d0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76             if (v
250e0 73 4c 69 73 74 2e 49 6e 73 74 61 6c 6c 65 64 56  sList.InstalledV
250f0 65 72 73 69 6f 6e 73 20 3d 3d 20 6e 75 6c 6c 29  ersions == null)
25100 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
25110 20 20 20 20 20 20 20 20 20 20 76 73 4c 69 73 74            vsList
25120 2e 49 6e 73 74 61 6c 6c 65 64 56 65 72 73 69 6f  .InstalledVersio
25130 6e 73 20 3d 20 6e 65 77 20 56 65 72 73 69 6f 6e  ns = new Version
25140 4c 69 73 74 28 29 3b 0d 0a 0d 0a 20 20 20 20 20  List();....     
25150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
25160 66 20 28 21 76 73 4c 69 73 74 2e 49 6e 73 74 61  f (!vsList.Insta
25170 6c 6c 65 64 56 65 72 73 69 6f 6e 73 2e 43 6f 6e  lledVersions.Con
25180 74 61 69 6e 73 28 76 73 56 65 72 73 69 6f 6e 29  tains(vsVersion)
25190 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
251a0 20 20 20 20 20 20 20 20 20 20 20 76 73 4c 69 73             vsLis
251b0 74 2e 49 6e 73 74 61 6c 6c 65 64 56 65 72 73 69  t.InstalledVersi
251c0 6f 6e 73 2e 41 64 64 28 76 73 56 65 72 73 69 6f  ons.Add(vsVersio
251d0 6e 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n);..           
251e0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
251f0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
25200 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65       return true
25210 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  ;..        }..  
25220 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
25230 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
25240 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25250 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25260 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25270 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25280 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23  ///....        #
25290 72 65 67 69 6f 6e 20 56 69 73 75 61 6c 20 53 74  region Visual St
252a0 75 64 69 6f 20 44 61 74 61 20 53 6f 75 72 63 65  udio Data Source
252b0 20 48 61 6e 64 6c 69 6e 67 0d 0a 20 20 20 20 20   Handling..     
252c0 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
252d0 63 20 62 6f 6f 6c 20 41 64 64 56 73 44 61 74 61  c bool AddVsData
252e0 53 6f 75 72 63 65 28 0d 0a 20 20 20 20 20 20 20  Source(..       
252f0 20 20 20 20 20 52 65 67 69 73 74 72 79 4b 65 79       RegistryKey
25300 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 20 20   rootKey,..     
25310 20 20 20 20 20 20 20 56 65 72 73 69 6f 6e 20 76         Version v
25320 73 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20  sVersion,..     
25330 20 20 20 20 20 20 20 50 61 63 6b 61 67 65 20 70         Package p
25340 61 63 6b 61 67 65 2c 0d 0a 20 20 20 20 20 20 20  ackage,..       
25350 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66       bool whatIf
25360 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
25370 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20  ool verbose,..  
25380 20 20 20 20 20 20 20 20 20 20 72 65 66 20 73 74            ref st
25390 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20 20  ring error..    
253a0 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
253b0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
253c0 20 20 69 66 20 28 76 73 56 65 72 73 69 6f 6e 20    if (vsVersion 
253d0 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
253e0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
253f0 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
25400 20 22 69 6e 76 61 6c 69 64 20 56 53 20 76 65 72   "invalid VS ver
25410 73 69 6f 6e 22 3b 0d 0a 20 20 20 20 20 20 20 20  sion";..        
25420 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
25430 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
25440 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
25450 20 20 20 20 69 66 20 28 70 61 63 6b 61 67 65 20      if (package 
25460 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
25470 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
25480 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
25490 20 22 69 6e 76 61 6c 69 64 20 56 53 20 70 61 63   "invalid VS pac
254a0 6b 61 67 65 22 3b 0d 0a 20 20 20 20 20 20 20 20  kage";..        
254b0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
254c0 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
254d0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
254e0 20 20 20 20 73 74 72 69 6e 67 20 6b 65 79 4e 61      string keyNa
254f0 6d 65 20 3d 20 47 65 74 56 73 4b 65 79 4e 61 6d  me = GetVsKeyNam
25500 65 28 76 73 56 65 72 73 69 6f 6e 29 3b 0d 0a 0d  e(vsVersion);...
25510 0a 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69  .            usi
25520 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79  ng (MockRegistry
25530 4b 65 79 20 6b 65 79 20 3d 20 52 65 67 69 73 74  Key key = Regist
25540 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62  ryHelper.OpenSub
25550 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  Key(..          
25560 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65            rootKe
25570 79 2c 20 6b 65 79 4e 61 6d 65 2c 20 66 61 6c 73  y, keyName, fals
25580 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f  e, whatIf, verbo
25590 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  se))..          
255a0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
255b0 20 20 20 20 20 69 66 20 28 6b 65 79 20 3d 3d 20       if (key == 
255c0 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
255d0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
255e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
255f0 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72  ror = String.For
25600 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
25610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 63                "c
25620 6f 75 6c 64 20 6e 6f 74 20 6f 70 65 6e 20 72 65  ould not open re
25630 67 69 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c  gistry key: {0}\
25640 5c 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20  \{1}",..        
25650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25660 72 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e 61 6d 65  rootKey, keyName
25670 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
25680 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
25690 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
256a0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
256b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 75 73                us
256c0 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72  ing (MockRegistr
256d0 79 4b 65 79 20 73 75 62 4b 65 79 20 3d 20 52 65  yKey subKey = Re
256e0 67 69 73 74 72 79 48 65 6c 70 65 72 2e 4f 70 65  gistryHelper.Ope
256f0 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20  nSubKey(..      
25700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25710 20 20 6b 65 79 2c 20 22 44 61 74 61 53 6f 75 72    key, "DataSour
25720 63 65 73 22 2c 20 74 72 75 65 2c 20 77 68 61 74  ces", true, what
25730 49 66 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a 20  If, verbose)).. 
25740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
25750 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
25760 20 20 20 20 20 20 69 66 20 28 73 75 62 4b 65 79        if (subKey
25770 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
25780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
25790 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
257a0 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
257b0 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  = String.Format(
257c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
257d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 63                "c
257e0 6f 75 6c 64 20 6e 6f 74 20 6f 70 65 6e 20 72 65  ould not open re
257f0 67 69 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c  gistry key: {0}\
25800 5c 44 61 74 61 53 6f 75 72 63 65 73 22 2c 0d 0a  \DataSources",..
25810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25820 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 29              key)
25830 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
25840 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
25850 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  urn false;..    
25860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25870 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
25880 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28           using (
25890 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20  MockRegistryKey 
258a0 64 61 74 61 53 6f 75 72 63 65 4b 65 79 20 3d 0d  dataSourceKey =.
258b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
258c0 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67               Reg
258d0 69 73 74 72 79 48 65 6c 70 65 72 2e 43 72 65 61  istryHelper.Crea
258e0 74 65 53 75 62 4b 65 79 28 73 75 62 4b 65 79 2c  teSubKey(subKey,
258f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
25900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 61                pa
25910 63 6b 61 67 65 2e 44 61 74 61 53 6f 75 72 63 65  ckage.DataSource
25920 49 64 2e 54 6f 53 74 72 69 6e 67 28 56 73 49 64  Id.ToString(VsId
25930 46 6f 72 6d 61 74 29 2c 0d 0a 20 20 20 20 20 20  Format),..      
25940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25950 20 20 20 20 20 20 77 68 61 74 49 66 2c 20 76 65        whatIf, ve
25960 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20  rbose))..       
25970 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
25980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25990 20 20 20 20 20 20 20 20 69 66 20 28 64 61 74 61          if (data
259a0 53 6f 75 72 63 65 4b 65 79 20 3d 3d 20 6e 75 6c  SourceKey == nul
259b0 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
259c0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
259d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
259e0 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
259f0 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74   = String.Format
25a00 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
25a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25a20 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20 63 72     "could not cr
25a30 65 61 74 65 20 72 65 67 69 73 74 72 79 20 6b 65  eate registry ke
25a40 79 3a 20 7b 30 7d 5c 5c 7b 31 7d 22 2c 20 6b 65  y: {0}\\{1}", ke
25a50 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y,..            
25a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25a70 20 20 20 20 70 61 63 6b 61 67 65 2e 44 61 74 61      package.Data
25a80 53 6f 75 72 63 65 49 64 2e 54 6f 53 74 72 69 6e  SourceId.ToStrin
25a90 67 28 56 73 49 64 46 6f 72 6d 61 74 29 29 3b 0d  g(VsIdFormat));.
25aa0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
25ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
25ac0 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
25ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25ae0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
25af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25b00 20 20 20 52 65 67 69 73 74 72 79 48 65 6c 70 65     RegistryHelpe
25b10 72 2e 53 65 74 56 61 6c 75 65 28 0d 0a 20 20 20  r.SetValue(..   
25b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25b30 20 20 20 20 20 20 20 20 20 64 61 74 61 53 6f 75           dataSou
25b40 72 63 65 4b 65 79 2c 20 6e 75 6c 6c 2c 20 53 74  rceKey, null, St
25b50 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
25b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25b70 20 20 20 20 20 20 20 20 20 20 22 7b 30 7d 20 44            "{0} D
25b80 61 74 61 62 61 73 65 20 46 69 6c 65 22 2c 20 50  atabase File", P
25b90 72 6f 6a 65 63 74 4e 61 6d 65 29 2c 20 77 68 61  rojectName), wha
25ba0 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf,..          
25bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25bc0 20 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20    verbose);.... 
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 52 65 67 69 73 74 72 79 48         RegistryH
25bf0 65 6c 70 65 72 2e 43 72 65 61 74 65 53 75 62 4b  elper.CreateSubK
25c00 65 79 28 64 61 74 61 53 6f 75 72 63 65 4b 65 79  ey(dataSourceKey
25c10 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
25c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53                 S
25c30 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22 53 75  tring.Format("Su
25c40 70 70 6f 72 74 69 6e 67 50 72 6f 76 69 64 65 72  pportingProvider
25c50 73 5c 5c 7b 30 7d 22 2c 0d 0a 20 20 20 20 20 20  s\\{0}",..      
25c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25c70 20 20 20 20 20 20 70 61 63 6b 61 67 65 2e 44 61        package.Da
25c80 74 61 50 72 6f 76 69 64 65 72 49 64 2e 54 6f 53  taProviderId.ToS
25c90 74 72 69 6e 67 28 56 73 49 64 46 6f 72 6d 61 74  tring(VsIdFormat
25ca0 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
25cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25cc0 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65   whatIf, verbose
25cd0 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
25ce0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
25cf0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
25d00 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
25d10 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
25d20 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20  n true;..       
25d30 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f   }....        //
25d40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25d50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25d60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25d70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25d80 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
25d90 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
25da0 62 6f 6f 6c 20 52 65 6d 6f 76 65 56 73 44 61 74  bool RemoveVsDat
25db0 61 53 6f 75 72 63 65 28 0d 0a 20 20 20 20 20 20  aSource(..      
25dc0 20 20 20 20 20 20 52 65 67 69 73 74 72 79 4b 65        RegistryKe
25dd0 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 20  y rootKey,..    
25de0 20 20 20 20 20 20 20 20 56 65 72 73 69 6f 6e 20          Version 
25df0 76 73 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20  vsVersion,..    
25e00 20 20 20 20 20 20 20 20 50 61 63 6b 61 67 65 20          Package 
25e10 70 61 63 6b 61 67 65 2c 0d 0a 20 20 20 20 20 20  package,..      
25e20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49        bool whatI
25e30 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f,..            
25e40 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a 20  bool verbose,.. 
25e50 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20 73             ref s
25e60 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20  tring error..   
25e70 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
25e80 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
25e90 20 20 20 69 66 20 28 76 73 56 65 72 73 69 6f 6e     if (vsVersion
25ea0 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
25eb0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
25ec0 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
25ed0 3d 20 22 69 6e 76 61 6c 69 64 20 56 53 20 76 65  = "invalid VS ve
25ee0 72 73 69 6f 6e 22 3b 0d 0a 20 20 20 20 20 20 20  rsion";..       
25ef0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
25f00 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
25f10 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
25f20 20 20 20 20 20 69 66 20 28 70 61 63 6b 61 67 65       if (package
25f30 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
25f40 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
25f50 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
25f60 3d 20 22 69 6e 76 61 6c 69 64 20 56 53 20 70 61  = "invalid VS pa
25f70 63 6b 61 67 65 22 3b 0d 0a 20 20 20 20 20 20 20  ckage";..       
25f80 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
25f90 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
25fa0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
25fb0 20 20 20 20 20 73 74 72 69 6e 67 20 6b 65 79 4e       string keyN
25fc0 61 6d 65 20 3d 20 47 65 74 56 73 4b 65 79 4e 61  ame = GetVsKeyNa
25fd0 6d 65 28 76 73 56 65 72 73 69 6f 6e 29 3b 0d 0a  me(vsVersion);..
25fe0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 75 73  ..            us
25ff0 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72  ing (MockRegistr
26000 79 4b 65 79 20 6b 65 79 20 3d 20 52 65 67 69 73  yKey key = Regis
26010 74 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75  tryHelper.OpenSu
26020 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20  bKey(..         
26030 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b             rootK
26040 65 79 2c 20 6b 65 79 4e 61 6d 65 2c 20 66 61 6c  ey, keyName, fal
26050 73 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62  se, whatIf, verb
26060 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ose))..         
26070 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
26080 20 20 20 20 20 20 69 66 20 28 6b 65 79 20 3d 3d        if (key ==
26090 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
260a0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
260b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
260c0 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f  rror = String.Fo
260d0 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
260e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
260f0 63 6f 75 6c 64 20 6e 6f 74 20 6f 70 65 6e 20 72  could not open r
26100 65 67 69 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d  egistry key: {0}
26110 5c 5c 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20  \\{1}",..       
26120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26130 20 72 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e 61 6d   rootKey, keyNam
26140 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
26150 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
26160 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
26170 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
26180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 75                 u
26190 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74  sing (MockRegist
261a0 72 79 4b 65 79 20 73 75 62 4b 65 79 20 3d 20 52  ryKey subKey = R
261b0 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 4f 70  egistryHelper.Op
261c0 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20  enSubKey(..     
261d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
261e0 20 20 20 6b 65 79 2c 20 22 44 61 74 61 53 6f 75     key, "DataSou
261f0 72 63 65 73 22 2c 20 74 72 75 65 2c 20 77 68 61  rces", true, wha
26200 74 49 66 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a  tIf, verbose))..
26210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26220 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
26230 20 20 20 20 20 20 20 69 66 20 28 73 75 62 4b 65         if (subKe
26240 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  y == null)..    
26250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26260 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
26270 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
26280 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74   = String.Format
26290 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
262a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
262b0 63 6f 75 6c 64 20 6e 6f 74 20 6f 70 65 6e 20 72  could not open r
262c0 65 67 69 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d  egistry key: {0}
262d0 5c 5c 44 61 74 61 53 6f 75 72 63 65 73 22 2c 0d  \\DataSources",.
262e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
262f0 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79               key
26300 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
26310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
26320 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
26330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26340 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
26350 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74            Regist
26360 72 79 48 65 6c 70 65 72 2e 44 65 6c 65 74 65 53  ryHelper.DeleteS
26370 75 62 4b 65 79 54 72 65 65 28 0d 0a 20 20 20 20  ubKeyTree(..    
26380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26390 20 20 20 20 73 75 62 4b 65 79 2c 20 70 61 63 6b      subKey, pack
263a0 61 67 65 2e 44 61 74 61 53 6f 75 72 63 65 49 64  age.DataSourceId
263b0 2e 54 6f 53 74 72 69 6e 67 28 56 73 49 64 46 6f  .ToString(VsIdFo
263c0 72 6d 61 74 29 2c 0d 0a 20 20 20 20 20 20 20 20  rmat),..        
263d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
263e0 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29  whatIf, verbose)
263f0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
26400 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
26410 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
26420 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d     return true;.
26430 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
26440 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
26450 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26460 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26470 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
26480 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
26490 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
264a0 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 50 72 6f   static bool Pro
264b0 63 65 73 73 56 73 44 61 74 61 53 6f 75 72 63 65  cessVsDataSource
264c0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 52  (..            R
264d0 65 67 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b  egistryKey rootK
264e0 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey,..           
264f0 20 56 65 72 73 69 6f 6e 20 76 73 56 65 72 73 69   Version vsVersi
26500 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on,..           
26510 20 50 61 63 6b 61 67 65 20 70 61 63 6b 61 67 65   Package package
26520 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6f  ,..            o
26530 62 6a 65 63 74 20 63 6c 69 65 6e 74 44 61 74 61  bject clientData
26540 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
26550 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20  ool whatIf,..   
26560 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65           bool ve
26570 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 20  rbose,..        
26580 20 20 20 20 72 65 66 20 73 74 72 69 6e 67 20 65      ref string e
26590 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20  rror..          
265a0 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a    )..        {..
265b0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
265c0 70 61 63 6b 61 67 65 20 3d 3d 20 6e 75 6c 6c 29  package == null)
265d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
265e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
265f0 20 65 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69   error = "invali
26600 64 20 56 53 20 70 61 63 6b 61 67 65 22 3b 0d 0a  d VS package";..
26610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26620 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20  return false;.. 
26630 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
26640 20 20 20 20 20 20 20 20 20 20 20 20 41 6e 79 50              AnyP
26650 61 69 72 3c 73 74 72 69 6e 67 2c 20 62 6f 6f 6c  air<string, bool
26660 3e 20 70 61 69 72 20 3d 20 63 6c 69 65 6e 74 44  > pair = clientD
26670 61 74 61 20 61 73 20 41 6e 79 50 61 69 72 3c 73  ata as AnyPair<s
26680 74 72 69 6e 67 2c 20 62 6f 6f 6c 3e 3b 0d 0a 0d  tring, bool>;...
26690 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
266a0 28 70 61 69 72 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  (pair == null)..
266b0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
266c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
266d0 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64 20  rror = "invalid 
266e0 56 53 20 63 61 6c 6c 62 61 63 6b 20 64 61 74 61  VS callback data
266f0 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ";..            
26700 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
26710 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
26720 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
26730 69 66 20 28 70 61 69 72 2e 59 29 0d 0a 20 20 20  if (pair.Y)..   
26740 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
26750 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
26760 72 6e 20 41 64 64 56 73 44 61 74 61 53 6f 75 72  rn AddVsDataSour
26770 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ce(..           
26780 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79           rootKey
26790 2c 20 76 73 56 65 72 73 69 6f 6e 2c 20 70 61 63  , vsVersion, pac
267a0 6b 61 67 65 2c 20 77 68 61 74 49 66 2c 20 76 65  kage, whatIf, ve
267b0 72 62 6f 73 65 2c 20 72 65 66 20 65 72 72 6f 72  rbose, ref error
267c0 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
267d0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 65  }..            e
267e0 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  lse..           
267f0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
26800 20 20 20 20 72 65 74 75 72 6e 20 52 65 6d 6f 76      return Remov
26810 65 56 73 44 61 74 61 53 6f 75 72 63 65 28 0d 0a  eVsDataSource(..
26820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26830 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 76 73 56      rootKey, vsV
26840 65 72 73 69 6f 6e 2c 20 70 61 63 6b 61 67 65 2c  ersion, package,
26850 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65   whatIf, verbose
26860 2c 20 72 65 66 20 65 72 72 6f 72 29 3b 0d 0a 20  , ref error);.. 
26870 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
26880 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
26890 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
268a0 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
268b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
268c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
268d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
268e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
268f0 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f  ..        #regio
26900 6e 20 56 69 73 75 61 6c 20 53 74 75 64 69 6f 20  n Visual Studio 
26910 44 61 74 61 20 50 72 6f 76 69 64 65 72 20 48 61  Data Provider Ha
26920 6e 64 6c 69 6e 67 0d 0a 20 20 20 20 20 20 20 20  ndling..        
26930 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 62  private static b
26940 6f 6f 6c 20 41 64 64 56 73 44 61 74 61 50 72 6f  ool AddVsDataPro
26950 76 69 64 65 72 28 0d 0a 20 20 20 20 20 20 20 20  vider(..        
26960 20 20 20 20 52 65 67 69 73 74 72 79 4b 65 79 20      RegistryKey 
26970 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20  rootKey,..      
26980 20 20 20 20 20 20 56 65 72 73 69 6f 6e 20 76 73        Version vs
26990 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20  Version,..      
269a0 20 20 20 20 20 20 50 61 63 6b 61 67 65 20 70 61        Package pa
269b0 63 6b 61 67 65 2c 0d 0a 20 20 20 20 20 20 20 20  ckage,..        
269c0 20 20 20 20 73 74 72 69 6e 67 20 66 69 6c 65 4e      string fileN
269d0 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ame,..          
269e0 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a    bool whatIf,..
269f0 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
26a00 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20   verbose,..     
26a10 20 20 20 20 20 20 20 72 65 66 20 73 74 72 69 6e         ref strin
26a20 67 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20  g error..       
26a30 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
26a40 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  {..            i
26a50 66 20 28 76 73 56 65 72 73 69 6f 6e 20 3d 3d 20  f (vsVersion == 
26a60 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
26a70 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
26a80 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69        error = "i
26a90 6e 76 61 6c 69 64 20 56 53 20 76 65 72 73 69 6f  nvalid VS versio
26aa0 6e 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n";..           
26ab0 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
26ac0 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
26ad0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
26ae0 20 69 66 20 28 70 61 63 6b 61 67 65 20 3d 3d 20   if (package == 
26af0 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
26b00 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
26b10 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69        error = "i
26b20 6e 76 61 6c 69 64 20 56 53 20 70 61 63 6b 61 67  nvalid VS packag
26b30 65 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e";..           
26b40 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
26b50 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
26b60 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
26b70 20 73 74 72 69 6e 67 20 6b 65 79 4e 61 6d 65 20   string keyName 
26b80 3d 20 47 65 74 56 73 4b 65 79 4e 61 6d 65 28 76  = GetVsKeyName(v
26b90 73 56 65 72 73 69 6f 6e 29 3b 0d 0a 0d 0a 20 20  sVersion);....  
26ba0 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20            using 
26bb0 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79  (MockRegistryKey
26bc0 20 6b 65 79 20 3d 20 52 65 67 69 73 74 72 79 48   key = RegistryH
26bd0 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62 4b 65 79  elper.OpenSubKey
26be0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
26bf0 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20         rootKey, 
26c00 6b 65 79 4e 61 6d 65 2c 20 66 61 6c 73 65 2c 20  keyName, false, 
26c10 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29  whatIf, verbose)
26c20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
26c30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
26c40 20 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c    if (key == nul
26c50 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
26c60 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
26c70 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
26c80 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74   = String.Format
26c90 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
26ca0 20 20 20 20 20 20 20 20 20 20 20 22 63 6f 75 6c             "coul
26cb0 64 20 6e 6f 74 20 6f 70 65 6e 20 72 65 67 69 73  d not open regis
26cc0 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 7b 31  try key: {0}\\{1
26cd0 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }",..           
26ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f               roo
26cf0 74 4b 65 79 2c 20 6b 65 79 4e 61 6d 65 29 3b 0d  tKey, keyName);.
26d00 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
26d10 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
26d20 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lse;..          
26d30 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
26d40 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67             using
26d50 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65   (MockRegistryKe
26d60 79 20 73 75 62 4b 65 79 20 3d 20 52 65 67 69 73  y subKey = Regis
26d70 74 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75  tryHelper.OpenSu
26d80 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20  bKey(..         
26d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b                 k
26da0 65 79 2c 20 22 44 61 74 61 50 72 6f 76 69 64 65  ey, "DataProvide
26db0 72 73 22 2c 20 74 72 75 65 2c 20 77 68 61 74 49  rs", true, whatI
26dc0 66 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20  f, verbose))..  
26dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
26de0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
26df0 20 20 20 20 20 69 66 20 28 73 75 62 4b 65 79 20       if (subKey 
26e00 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
26e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
26e20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
26e30 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
26e40 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
26e50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
26e60 20 20 20 20 20 20 20 20 20 20 20 20 20 22 63 6f               "co
26e70 75 6c 64 20 6e 6f 74 20 6f 70 65 6e 20 72 65 67  uld not open reg
26e80 69 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c  istry key: {0}\\
26e90 44 61 74 61 50 72 6f 76 69 64 65 72 73 22 2c 0d  DataProviders",.
26ea0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
26eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79               key
26ec0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
26ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
26ee0 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
26ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26f00 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
26f10 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20            using 
26f20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79  (MockRegistryKey
26f30 20 64 61 74 61 50 72 6f 76 69 64 65 72 4b 65 79   dataProviderKey
26f40 20 3d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   =..            
26f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26f60 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 43  RegistryHelper.C
26f70 72 65 61 74 65 53 75 62 4b 65 79 28 73 75 62 4b  reateSubKey(subK
26f80 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey,..           
26f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26fa0 20 70 61 63 6b 61 67 65 2e 44 61 74 61 50 72 6f   package.DataPro
26fb0 76 69 64 65 72 49 64 2e 54 6f 53 74 72 69 6e 67  viderId.ToString
26fc0 28 56 73 49 64 46 6f 72 6d 61 74 29 2c 0d 0a 20  (VsIdFormat),.. 
26fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26fe0 20 20 20 20 20 20 20 20 20 20 20 77 68 61 74 49             whatI
26ff0 66 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20  f, verbose))..  
27000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27010 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
27020 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
27030 28 64 61 74 61 50 72 6f 76 69 64 65 72 4b 65 79  (dataProviderKey
27040 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
27050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27060 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
27070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27080 20 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67    error = String
27090 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
270a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
270b0 20 20 20 20 20 20 20 20 20 20 22 63 6f 75 6c 64            "could
270c0 20 6e 6f 74 20 63 72 65 61 74 65 20 72 65 67 69   not create regi
270d0 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 7b  stry key: {0}\\{
270e0 31 7d 22 2c 20 6b 65 79 2c 0d 0a 20 20 20 20 20  1}", key,..     
270f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27100 20 20 20 20 20 20 20 20 20 20 20 70 61 63 6b 61             packa
27110 67 65 2e 44 61 74 61 50 72 6f 76 69 64 65 72 49  ge.DataProviderI
27120 64 2e 54 6f 53 74 72 69 6e 67 28 56 73 49 64 46  d.ToString(VsIdF
27130 6f 72 6d 61 74 29 29 3b 0d 0a 0d 0a 20 20 20 20  ormat));....    
27140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27150 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
27160 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
27170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
27180 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
27190 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69              Regi
271a0 73 74 72 79 48 65 6c 70 65 72 2e 53 65 74 56 61  stryHelper.SetVa
271b0 6c 75 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  lue(..          
271c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
271d0 20 20 64 61 74 61 50 72 6f 76 69 64 65 72 4b 65    dataProviderKe
271e0 79 2c 20 6e 75 6c 6c 2c 20 44 65 73 63 72 69 70  y, null, Descrip
271f0 74 69 6f 6e 2c 20 77 68 61 74 49 66 2c 0d 0a 20  tion, whatIf,.. 
27200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27210 20 20 20 20 20 20 20 20 20 20 20 76 65 72 62 6f             verbo
27220 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  se);....        
27230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27240 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 53  RegistryHelper.S
27250 65 74 56 61 6c 75 65 28 0d 0a 20 20 20 20 20 20  etValue(..      
27260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27270 20 20 20 20 20 20 64 61 74 61 50 72 6f 76 69 64        dataProvid
27280 65 72 4b 65 79 2c 20 22 49 6e 76 61 72 69 61 6e  erKey, "Invarian
27290 74 4e 61 6d 65 22 2c 20 49 6e 76 61 72 69 61 6e  tName", Invarian
272a0 74 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20  tName,..        
272b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
272c0 20 20 20 20 77 68 61 74 49 66 2c 20 76 65 72 62      whatIf, verb
272d0 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ose);....       
272e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
272f0 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e   RegistryHelper.
27300 53 65 74 56 61 6c 75 65 28 0d 0a 20 20 20 20 20  SetValue(..     
27310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27320 20 20 20 20 20 20 20 64 61 74 61 50 72 6f 76 69         dataProvi
27330 64 65 72 4b 65 79 2c 20 22 54 65 63 68 6e 6f 6c  derKey, "Technol
27340 6f 67 79 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  ogy",..         
27350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27360 20 20 20 70 61 63 6b 61 67 65 2e 41 64 6f 4e 65     package.AdoNe
27370 74 54 65 63 68 6e 6f 6c 6f 67 79 49 64 2e 54 6f  tTechnologyId.To
27380 53 74 72 69 6e 67 28 56 73 49 64 46 6f 72 6d 61  String(VsIdForma
27390 74 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  t),..           
273a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
273b0 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65   whatIf, verbose
273c0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
273d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65                Re
273e0 67 69 73 74 72 79 48 65 6c 70 65 72 2e 53 65 74  gistryHelper.Set
273f0 56 61 6c 75 65 28 0d 0a 20 20 20 20 20 20 20 20  Value(..        
27400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27410 20 20 20 20 64 61 74 61 50 72 6f 76 69 64 65 72      dataProvider
27420 4b 65 79 2c 20 22 43 6f 64 65 42 61 73 65 22 2c  Key, "CodeBase",
27430 20 66 69 6c 65 4e 61 6d 65 2c 20 77 68 61 74 49   fileName, whatI
27440 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f,..            
27450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27460 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20  verbose);....   
27470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27480 20 20 20 20 20 52 65 67 69 73 74 72 79 48 65 6c       RegistryHel
27490 70 65 72 2e 53 65 74 56 61 6c 75 65 28 0d 0a 20  per.SetValue(.. 
274a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
274b0 20 20 20 20 20 20 20 20 20 20 20 64 61 74 61 50             dataP
274c0 72 6f 76 69 64 65 72 4b 65 79 2c 20 22 46 61 63  roviderKey, "Fac
274d0 74 6f 72 79 53 65 72 76 69 63 65 22 2c 0d 0a 20  toryService",.. 
274e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
274f0 20 20 20 20 20 20 20 20 20 20 20 70 61 63 6b 61             packa
27500 67 65 2e 53 65 72 76 69 63 65 49 64 2e 54 6f 53  ge.ServiceId.ToS
27510 74 72 69 6e 67 28 56 73 49 64 46 6f 72 6d 61 74  tring(VsIdFormat
27520 29 2c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20  ), whatIf,..    
27530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27540 20 20 20 20 20 20 20 20 76 65 72 62 6f 73 65 29          verbose)
27550 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
27560 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67               Reg
27570 69 73 74 72 79 48 65 6c 70 65 72 2e 43 72 65 61  istryHelper.Crea
27580 74 65 53 75 62 4b 65 79 28 64 61 74 61 50 72 6f  teSubKey(dataPro
27590 76 69 64 65 72 4b 65 79 2c 0d 0a 20 20 20 20 20  viderKey,..     
275a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
275b0 20 20 20 20 20 20 20 22 53 75 70 70 6f 72 74 65         "Supporte
275c0 64 4f 62 6a 65 63 74 73 5c 5c 44 61 74 61 43 6f  dObjects\\DataCo
275d0 6e 6e 65 63 74 69 6f 6e 55 49 43 6f 6e 74 72 6f  nnectionUIContro
275e0 6c 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  l",..           
275f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27600 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65   whatIf, verbose
27610 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
27620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65                Re
27630 67 69 73 74 72 79 48 65 6c 70 65 72 2e 43 72 65  gistryHelper.Cre
27640 61 74 65 53 75 62 4b 65 79 28 64 61 74 61 50 72  ateSubKey(dataPr
27650 6f 76 69 64 65 72 4b 65 79 2c 0d 0a 20 20 20 20  oviderKey,..    
27660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27670 20 20 20 20 20 20 20 20 22 53 75 70 70 6f 72 74          "Support
27680 65 64 4f 62 6a 65 63 74 73 5c 5c 44 61 74 61 43  edObjects\\DataC
27690 6f 6e 6e 65 63 74 69 6f 6e 50 72 6f 70 65 72 74  onnectionPropert
276a0 69 65 73 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  ies",..         
276b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
276c0 20 20 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f     whatIf, verbo
276d0 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  se);....        
276e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
276f0 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 43  RegistryHelper.C
27700 72 65 61 74 65 53 75 62 4b 65 79 28 64 61 74 61  reateSubKey(data
27710 50 72 6f 76 69 64 65 72 4b 65 79 2c 0d 0a 20 20  ProviderKey,..  
27720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27730 20 20 20 20 20 20 20 20 20 20 22 53 75 70 70 6f            "Suppo
27740 72 74 65 64 4f 62 6a 65 63 74 73 5c 5c 44 61 74  rtedObjects\\Dat
27750 61 43 6f 6e 6e 65 63 74 69 6f 6e 53 75 70 70 6f  aConnectionSuppo
27760 72 74 22 2c 20 77 68 61 74 49 66 2c 0d 0a 20 20  rt", whatIf,..  
27770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27780 20 20 20 20 20 20 20 20 20 20 76 65 72 62 6f 73            verbos
27790 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
277a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52                 R
277b0 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 43 72  egistryHelper.Cr
277c0 65 61 74 65 53 75 62 4b 65 79 28 64 61 74 61 50  eateSubKey(dataP
277d0 72 6f 76 69 64 65 72 4b 65 79 2c 0d 0a 20 20 20  roviderKey,..   
277e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
277f0 20 20 20 20 20 20 20 20 20 22 53 75 70 70 6f 72           "Suppor
27800 74 65 64 4f 62 6a 65 63 74 73 5c 5c 44 61 74 61  tedObjects\\Data
27810 4f 62 6a 65 63 74 53 75 70 70 6f 72 74 22 2c 20  ObjectSupport", 
27820 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20  whatIf,..       
27830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27840 20 20 20 20 20 76 65 72 62 6f 73 65 29 3b 0d 0a       verbose);..
27850 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
27860 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74            Regist
27870 72 79 48 65 6c 70 65 72 2e 43 72 65 61 74 65 53  ryHelper.CreateS
27880 75 62 4b 65 79 28 64 61 74 61 50 72 6f 76 69 64  ubKey(dataProvid
27890 65 72 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20  erKey,..        
278a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
278b0 20 20 20 20 22 53 75 70 70 6f 72 74 65 64 4f 62      "SupportedOb
278c0 6a 65 63 74 73 5c 5c 44 61 74 61 56 69 65 77 53  jects\\DataViewS
278d0 75 70 70 6f 72 74 22 2c 20 77 68 61 74 49 66 2c  upport", whatIf,
278e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
278f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76 65                ve
27900 72 62 6f 73 65 29 3b 0d 0a 20 20 20 20 20 20 20  rbose);..       
27910 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
27920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27930 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
27940 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
27950 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20  return true;..  
27960 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
27970 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
27980 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27990 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
279a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
279b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
279c0 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
279d0 61 74 69 63 20 62 6f 6f 6c 20 52 65 6d 6f 76 65  atic bool Remove
279e0 56 73 44 61 74 61 50 72 6f 76 69 64 65 72 28 0d  VsDataProvider(.
279f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67  .            Reg
27a00 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79  istryKey rootKey
27a10 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 56  ,..            V
27a20 65 72 73 69 6f 6e 20 76 73 56 65 72 73 69 6f 6e  ersion vsVersion
27a30 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 50  ,..            P
27a40 61 63 6b 61 67 65 20 70 61 63 6b 61 67 65 2c 0d  ackage package,.
27a50 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
27a60 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20  l whatIf,..     
27a70 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62         bool verb
27a80 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ose,..          
27a90 20 20 72 65 66 20 73 74 72 69 6e 67 20 65 72 72    ref string err
27aa0 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  or..            
27ab0 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
27ac0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76 73            if (vs
27ad0 56 65 72 73 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29  Version == null)
27ae0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
27af0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
27b00 20 65 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69   error = "invali
27b10 64 20 56 53 20 76 65 72 73 69 6f 6e 22 3b 0d 0a  d VS version";..
27b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27b30 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20  return false;.. 
27b40 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
27b50 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
27b60 6e 67 20 6b 65 79 4e 61 6d 65 20 3d 20 47 65 74  ng keyName = Get
27b70 56 73 4b 65 79 4e 61 6d 65 28 76 73 56 65 72 73  VsKeyName(vsVers
27b80 69 6f 6e 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ion);....       
27b90 20 20 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b       using (Mock
27ba0 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65 79 20  RegistryKey key 
27bb0 3d 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72  = RegistryHelper
27bc0 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20  .OpenSubKey(..  
27bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27be0 20 20 72 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e 61    rootKey, keyNa
27bf0 6d 65 2c 20 66 61 6c 73 65 2c 20 77 68 61 74 49  me, false, whatI
27c00 66 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20  f, verbose))..  
27c10 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
27c20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
27c30 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  (key == null).. 
27c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
27c50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
27c60 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 53 74        error = St
27c70 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
27c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27c90 20 20 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74        "could not
27ca0 20 6f 70 65 6e 20 72 65 67 69 73 74 72 79 20 6b   open registry k
27cb0 65 79 3a 20 7b 30 7d 5c 5c 7b 31 7d 22 2c 0d 0a  ey: {0}\\{1}",..
27cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27cd0 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c          rootKey,
27ce0 20 6b 65 79 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20   keyName);....  
27cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27d00 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
27d10 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
27d20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
27d30 20 20 20 20 20 20 75 73 69 6e 67 20 28 4d 6f 63        using (Moc
27d40 6b 52 65 67 69 73 74 72 79 4b 65 79 20 73 75 62  kRegistryKey sub
27d50 4b 65 79 20 3d 20 52 65 67 69 73 74 72 79 48 65  Key = RegistryHe
27d60 6c 70 65 72 2e 4f 70 65 6e 53 75 62 4b 65 79 28  lper.OpenSubKey(
27d70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
27d80 20 20 20 20 20 20 20 20 20 20 6b 65 79 2c 20 22            key, "
27d90 44 61 74 61 50 72 6f 76 69 64 65 72 73 22 2c 20  DataProviders", 
27da0 74 72 75 65 2c 20 77 68 61 74 49 66 2c 20 76 65  true, whatIf, ve
27db0 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20  rbose))..       
27dc0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
27dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27de0 69 66 20 28 73 75 62 4b 65 79 20 3d 3d 20 6e 75  if (subKey == nu
27df0 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
27e00 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
27e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27e20 20 20 20 20 65 72 72 6f 72 20 3d 20 53 74 72 69      error = Stri
27e30 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
27e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27e50 20 20 20 20 20 20 20 20 22 63 6f 75 6c 64 20 6e          "could n
27e60 6f 74 20 6f 70 65 6e 20 72 65 67 69 73 74 72 79  ot open registry
27e70 20 6b 65 79 3a 20 7b 30 7d 5c 5c 44 61 74 61 50   key: {0}\\DataP
27e80 72 6f 76 69 64 65 72 73 22 2c 0d 0a 20 20 20 20  roviders",..    
27e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27ea0 20 20 20 20 20 20 20 20 6b 65 79 29 3b 0d 0a 0d          key);...
27eb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
27ec0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
27ed0 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
27ee0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
27ef0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
27f00 20 20 20 20 20 52 65 67 69 73 74 72 79 48 65 6c       RegistryHel
27f10 70 65 72 2e 44 65 6c 65 74 65 53 75 62 4b 65 79  per.DeleteSubKey
27f20 54 72 65 65 28 0d 0a 20 20 20 20 20 20 20 20 20  Tree(..         
27f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
27f40 75 62 4b 65 79 2c 20 70 61 63 6b 61 67 65 2e 44  ubKey, package.D
27f50 61 74 61 50 72 6f 76 69 64 65 72 49 64 2e 54 6f  ataProviderId.To
27f60 53 74 72 69 6e 67 28 56 73 49 64 46 6f 72 6d 61  String(VsIdForma
27f70 74 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  t),..           
27f80 20 20 20 20 20 20 20 20 20 20 20 20 20 77 68 61               wha
27f90 74 49 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a  tIf, verbose);..
27fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27fb0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
27fc0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
27fd0 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20  return true;..  
27fe0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
27ff0 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
28000 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28010 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28020 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28030 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
28040 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
28050 61 74 69 63 20 62 6f 6f 6c 20 50 72 6f 63 65 73  atic bool Proces
28060 73 56 73 44 61 74 61 50 72 6f 76 69 64 65 72 28  sVsDataProvider(
28070 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 52 65  ..            Re
28080 67 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65  gistryKey rootKe
28090 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y,..            
280a0 56 65 72 73 69 6f 6e 20 76 73 56 65 72 73 69 6f  Version vsVersio
280b0 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n,..            
280c0 50 61 63 6b 61 67 65 20 70 61 63 6b 61 67 65 2c  Package package,
280d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6f 62  ..            ob
280e0 6a 65 63 74 20 63 6c 69 65 6e 74 44 61 74 61 2c  ject clientData,
280f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
28100 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20  ol whatIf,..    
28110 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72          bool ver
28120 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  bose,..         
28130 20 20 20 72 65 66 20 73 74 72 69 6e 67 20 65 72     ref string er
28140 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ror..           
28150 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20   )..        {.. 
28160 20 20 20 20 20 20 20 20 20 20 20 41 6e 79 50 61             AnyPa
28170 69 72 3c 73 74 72 69 6e 67 2c 20 62 6f 6f 6c 3e  ir<string, bool>
28180 20 70 61 69 72 20 3d 20 63 6c 69 65 6e 74 44 61   pair = clientDa
28190 74 61 20 61 73 20 41 6e 79 50 61 69 72 3c 73 74  ta as AnyPair<st
281a0 72 69 6e 67 2c 20 62 6f 6f 6c 3e 3b 0d 0a 0d 0a  ring, bool>;....
281b0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
281c0 70 61 69 72 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  pair == null).. 
281d0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
281e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
281f0 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 56  ror = "invalid V
28200 53 20 63 61 6c 6c 62 61 63 6b 20 64 61 74 61 22  S callback data"
28210 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
28220 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
28230 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
28240 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
28250 66 20 28 70 61 69 72 2e 59 29 0d 0a 20 20 20 20  f (pair.Y)..    
28260 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
28270 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
28280 6e 20 41 64 64 56 73 44 61 74 61 50 72 6f 76 69  n AddVsDataProvi
28290 64 65 72 28 0d 0a 20 20 20 20 20 20 20 20 20 20  der(..          
282a0 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65            rootKe
282b0 79 2c 20 76 73 56 65 72 73 69 6f 6e 2c 20 70 61  y, vsVersion, pa
282c0 63 6b 61 67 65 2c 20 70 61 69 72 2e 58 2c 0d 0a  ckage, pair.X,..
282d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
282e0 20 20 20 20 77 68 61 74 49 66 2c 20 76 65 72 62      whatIf, verb
282f0 6f 73 65 2c 20 72 65 66 20 65 72 72 6f 72 29 3b  ose, ref error);
28300 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
28310 0a 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73  .            els
28320 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  e..            {
28330 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
28340 20 20 72 65 74 75 72 6e 20 52 65 6d 6f 76 65 56    return RemoveV
28350 73 44 61 74 61 50 72 6f 76 69 64 65 72 28 0d 0a  sDataProvider(..
28360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28370 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 76 73 56      rootKey, vsV
28380 65 72 73 69 6f 6e 2c 20 70 61 63 6b 61 67 65 2c  ersion, package,
28390 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20   whatIf,..      
283a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76 65                ve
283b0 72 62 6f 73 65 2c 20 72 65 66 20 65 72 72 6f 72  rbose, ref error
283c0 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
283d0 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  }..        }..  
283e0 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
283f0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
28400 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28410 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28420 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28430 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28440 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23  ///....        #
28450 72 65 67 69 6f 6e 20 56 69 73 75 61 6c 20 53 74  region Visual St
28460 75 64 69 6f 20 50 61 63 6b 61 67 65 20 48 61 6e  udio Package Han
28470 64 6c 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 70  dling..        p
28480 72 69 76 61 74 65 20 73 74 61 74 69 63 20 76 6f  rivate static vo
28490 69 64 20 49 6e 69 74 69 61 6c 69 7a 65 56 73 50  id InitializeVsP
284a0 61 63 6b 61 67 65 28 0d 0a 20 20 20 20 20 20 20  ackage(..       
284b0 20 20 20 20 20 72 65 66 20 50 61 63 6b 61 67 65       ref Package
284c0 20 70 61 63 6b 61 67 65 0d 0a 20 20 20 20 20 20   package..      
284d0 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
284e0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
284f0 69 66 20 28 70 61 63 6b 61 67 65 20 3d 3d 20 6e  if (package == n
28500 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
28510 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
28520 20 20 20 20 20 70 61 63 6b 61 67 65 20 3d 20 6e       package = n
28530 65 77 20 50 61 63 6b 61 67 65 28 29 3b 0d 0a 0d  ew Package();...
28540 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
28550 20 70 61 63 6b 61 67 65 2e 41 64 6f 4e 65 74 54   package.AdoNetT
28560 65 63 68 6e 6f 6c 6f 67 79 49 64 20 3d 20 6e 65  echnologyId = ne
28570 77 20 47 75 69 64 28 0d 0a 20 20 20 20 20 20 20  w Guid(..       
28580 20 20 20 20 20 20 20 20 20 20 20 20 20 22 37 37               "77
28590 41 42 39 41 39 44 2d 37 38 42 39 2d 34 42 41 37  AB9A9D-78B9-4BA7
285a0 2d 39 31 41 43 2d 38 37 33 46 35 33 33 38 46 31  -91AC-873F5338F1
285b0 44 32 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  D2");....       
285c0 20 20 20 20 20 20 20 20 20 70 61 63 6b 61 67 65           package
285d0 2e 50 61 63 6b 61 67 65 49 64 20 3d 20 6e 65 77  .PackageId = new
285e0 20 47 75 69 64 28 0d 0a 20 20 20 20 20 20 20 20   Guid(..        
285f0 20 20 20 20 20 20 20 20 20 20 20 20 22 44 43 42              "DCB
28600 45 36 43 38 44 2d 30 45 35 37 2d 34 30 39 39 2d  E6C8D-0E57-4099-
28610 41 31 38 33 2d 39 38 46 46 37 34 43 36 34 44 39  A183-98FF74C64D9
28620 43 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  C");....        
28630 20 20 20 20 20 20 20 20 70 61 63 6b 61 67 65 2e          package.
28640 53 65 72 76 69 63 65 49 64 20 3d 20 6e 65 77 20  ServiceId = new 
28650 47 75 69 64 28 0d 0a 20 20 20 20 20 20 20 20 20  Guid(..         
28660 20 20 20 20 20 20 20 20 20 20 20 22 44 43 42 45             "DCBE
28670 36 43 38 44 2d 30 45 35 37 2d 34 30 39 39 2d 41  6C8D-0E57-4099-A
28680 31 38 33 2d 39 38 46 46 37 34 43 36 34 44 39 44  183-98FF74C64D9D
28690 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ");....         
286a0 20 20 20 20 20 20 20 70 61 63 6b 61 67 65 2e 44         package.D
286b0 61 74 61 53 6f 75 72 63 65 49 64 20 3d 20 6e 65  ataSourceId = ne
286c0 77 20 47 75 69 64 28 0d 0a 20 20 20 20 20 20 20  w Guid(..       
286d0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 30 45               "0E
286e0 42 41 41 42 36 45 2d 43 41 38 30 2d 34 42 34 41  BAAB6E-CA80-4B4A
286f0 2d 38 44 44 46 2d 43 42 45 36 42 46 30 35 38 43  -8DDF-CBE6BF058C
28700 37 31 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  71");....       
28710 20 20 20 20 20 20 20 20 20 70 61 63 6b 61 67 65           package
28720 2e 44 61 74 61 50 72 6f 76 69 64 65 72 49 64 20  .DataProviderId 
28730 3d 20 6e 65 77 20 47 75 69 64 28 0d 0a 20 20 20  = new Guid(..   
28740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28750 20 22 30 45 42 41 41 42 36 45 2d 43 41 38 30 2d   "0EBAAB6E-CA80-
28760 34 42 34 41 2d 38 44 44 46 2d 43 42 45 36 42 46  4B4A-8DDF-CBE6BF
28770 30 35 38 43 37 30 22 29 3b 0d 0a 20 20 20 20 20  058C70");..     
28780 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
28790 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f    }....        /
287a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
287b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
287c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
287d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
287e0 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
287f0 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
28800 20 62 6f 6f 6c 20 41 64 64 56 73 50 61 63 6b 61   bool AddVsPacka
28810 67 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ge(..           
28820 20 52 65 67 69 73 74 72 79 4b 65 79 20 72 6f 6f   RegistryKey roo
28830 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20  tKey,..         
28840 20 20 20 56 65 72 73 69 6f 6e 20 76 73 56 65 72     Version vsVer
28850 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20  sion,..         
28860 20 20 20 50 61 63 6b 61 67 65 20 70 61 63 6b 61     Package packa
28870 67 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ge,..           
28880 20 73 74 72 69 6e 67 20 66 69 6c 65 4e 61 6d 65   string fileName
28890 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
288a0 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20  ool whatIf,..   
288b0 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65           bool ve
288c0 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 20  rbose,..        
288d0 20 20 20 20 72 65 66 20 73 74 72 69 6e 67 20 65      ref string e
288e0 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20  rror..          
288f0 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a    )..        {..
28900 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
28910 76 73 56 65 72 73 69 6f 6e 20 3d 3d 20 6e 75 6c  vsVersion == nul
28920 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
28930 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
28940 20 20 20 65 72 72 6f 72 20 3d 20 22 69 6e 76 61     error = "inva
28950 6c 69 64 20 56 53 20 76 65 72 73 69 6f 6e 22 3b  lid VS version";
28960 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
28970 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
28980 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
28990 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
289a0 20 28 70 61 63 6b 61 67 65 20 3d 3d 20 6e 75 6c   (package == nul
289b0 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
289c0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
289d0 20 20 20 65 72 72 6f 72 20 3d 20 22 69 6e 76 61     error = "inva
289e0 6c 69 64 20 56 53 20 70 61 63 6b 61 67 65 22 3b  lid VS package";
289f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
28a00 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
28a10 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
28a20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
28a30 72 69 6e 67 20 6b 65 79 4e 61 6d 65 20 3d 20 47  ring keyName = G
28a40 65 74 56 73 4b 65 79 4e 61 6d 65 28 76 73 56 65  etVsKeyName(vsVe
28a50 72 73 69 6f 6e 29 3b 0d 0a 0d 0a 20 20 20 20 20  rsion);....     
28a60 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 4d 6f         using (Mo
28a70 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65  ckRegistryKey ke
28a80 79 20 3d 20 52 65 67 69 73 74 72 79 48 65 6c 70  y = RegistryHelp
28a90 65 72 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a  er.OpenSubKey(..
28aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28ab0 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 6b 65 79      rootKey, key
28ac0 4e 61 6d 65 2c 20 66 61 6c 73 65 2c 20 77 68 61  Name, false, wha
28ad0 74 49 66 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a  tIf, verbose))..
28ae0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
28af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
28b00 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d  f (key == null).
28b10 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
28b20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
28b30 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
28b40 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
28b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28b60 20 20 20 20 20 20 20 20 22 63 6f 75 6c 64 20 6e          "could n
28b70 6f 74 20 6f 70 65 6e 20 72 65 67 69 73 74 72 79  ot open registry
28b80 20 6b 65 79 3a 20 7b 30 7d 5c 5c 7b 31 7d 22 2c   key: {0}\\{1}",
28b90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
28ba0 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65            rootKe
28bb0 79 2c 20 6b 65 79 4e 61 6d 65 29 3b 0d 0a 0d 0a  y, keyName);....
28bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28bd0 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
28be0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
28bf0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
28c00 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 4d          using (M
28c10 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 73  ockRegistryKey s
28c20 75 62 4b 65 79 20 3d 20 52 65 67 69 73 74 72 79  ubKey = Registry
28c30 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62 4b 65  Helper.OpenSubKe
28c40 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
28c50 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 2c              key,
28c60 20 22 50 61 63 6b 61 67 65 73 22 2c 20 74 72 75   "Packages", tru
28c70 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f  e, whatIf, verbo
28c80 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  se))..          
28c90 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
28ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
28cb0 28 73 75 62 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29  (subKey == null)
28cc0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
28cd0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
28ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28cf0 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e   error = String.
28d00 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
28d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28d20 20 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20       "could not 
28d30 6f 70 65 6e 20 72 65 67 69 73 74 72 79 20 6b 65  open registry ke
28d40 79 3a 20 7b 30 7d 5c 5c 50 61 63 6b 61 67 65 73  y: {0}\\Packages
28d50 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
28d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28d70 6b 65 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  key);....       
28d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28d90 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
28da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28db0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
28dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69               usi
28dd0 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79  ng (MockRegistry
28de0 4b 65 79 20 70 61 63 6b 61 67 65 4b 65 79 20 3d  Key packageKey =
28df0 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e   RegistryHelper.
28e00 43 72 65 61 74 65 53 75 62 4b 65 79 28 0d 0a 20  CreateSubKey(.. 
28e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28e20 20 20 20 20 20 20 20 20 20 20 20 73 75 62 4b 65             subKe
28e30 79 2c 20 70 61 63 6b 61 67 65 2e 50 61 63 6b 61  y, package.Packa
28e40 67 65 49 64 2e 54 6f 53 74 72 69 6e 67 28 56 73  geId.ToString(Vs
28e50 49 64 46 6f 72 6d 61 74 29 2c 20 77 68 61 74 49  IdFormat), whatI
28e60 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f,..            
28e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28e80 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20  verbose))..     
28e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
28ea0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
28eb0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 70 61            if (pa
28ec0 63 6b 61 67 65 4b 65 79 20 3d 3d 20 6e 75 6c 6c  ckageKey == null
28ed0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
28ee0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
28ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28f00 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
28f10 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  = String.Format(
28f20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
28f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28f40 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20 63 72 65    "could not cre
28f50 61 74 65 20 72 65 67 69 73 74 72 79 20 6b 65 79  ate registry key
28f60 3a 20 7b 30 7d 5c 5c 7b 31 7d 22 2c 0d 0a 20 20  : {0}\\{1}",..  
28f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65                ke
28f90 79 2c 20 70 61 63 6b 61 67 65 2e 50 61 63 6b 61  y, package.Packa
28fa0 67 65 49 64 2e 54 6f 53 74 72 69 6e 67 28 56 73  geId.ToString(Vs
28fb0 49 64 46 6f 72 6d 61 74 29 29 3b 0d 0a 0d 0a 20  IdFormat));.... 
28fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28fd0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
28fe0 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
28ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29000 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
29010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52                 R
29020 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 53 65  egistryHelper.Se
29030 74 56 61 6c 75 65 28 70 61 63 6b 61 67 65 4b 65  tValue(packageKe
29040 79 2c 20 6e 75 6c 6c 2c 20 53 74 72 69 6e 67 2e  y, null, String.
29050 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
29060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29070 20 20 20 20 20 22 7b 30 7d 20 44 65 73 69 67 6e       "{0} Design
29080 65 72 20 50 61 63 6b 61 67 65 22 2c 20 50 72 6f  er Package", Pro
29090 6a 65 63 74 4e 61 6d 65 29 2c 20 77 68 61 74 49  jectName), whatI
290a0 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f,..            
290b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
290c0 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20  verbose);....   
290d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
290e0 20 20 20 20 20 52 65 67 69 73 74 72 79 48 65 6c       RegistryHel
290f0 70 65 72 2e 53 65 74 56 61 6c 75 65 28 70 61 63  per.SetValue(pac
29100 6b 61 67 65 4b 65 79 2c 20 22 43 6c 61 73 73 22  kageKey, "Class"
29110 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
29120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
29130 53 51 4c 69 74 65 2e 44 65 73 69 67 6e 65 72 2e  SQLite.Designer.
29140 53 51 4c 69 74 65 50 61 63 6b 61 67 65 22 2c 20  SQLitePackage", 
29150 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29  whatIf, verbose)
29160 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
29170 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67               Reg
29180 69 73 74 72 79 48 65 6c 70 65 72 2e 53 65 74 56  istryHelper.SetV
29190 61 6c 75 65 28 70 61 63 6b 61 67 65 4b 65 79 2c  alue(packageKey,
291a0 20 22 43 6f 64 65 42 61 73 65 22 2c 0d 0a 20 20   "CodeBase",..  
291b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
291c0 20 20 20 20 20 20 20 20 20 20 66 69 6c 65 4e 61            fileNa
291d0 6d 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62  me, whatIf, verb
291e0 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ose);....       
291f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29200 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e   RegistryHelper.
29210 53 65 74 56 61 6c 75 65 28 70 61 63 6b 61 67 65  SetValue(package
29220 4b 65 79 2c 20 22 49 44 22 2c 20 34 30 30 2c 20  Key, "ID", 400, 
29230 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20  whatIf,..       
29240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29250 20 20 20 20 20 76 65 72 62 6f 73 65 29 3b 0d 0a       verbose);..
29260 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
29270 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74            Regist
29280 72 79 48 65 6c 70 65 72 2e 53 65 74 56 61 6c 75  ryHelper.SetValu
29290 65 28 70 61 63 6b 61 67 65 4b 65 79 2c 20 22 49  e(packageKey, "I
292a0 6e 70 72 6f 63 53 65 72 76 65 72 33 32 22 2c 0d  nprocServer32",.
292b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
292c0 20 20 20 20 20 20 20 20 20 20 20 20 20 50 61 74               Pat
292d0 68 2e 43 6f 6d 62 69 6e 65 28 45 6e 76 69 72 6f  h.Combine(Enviro
292e0 6e 6d 65 6e 74 2e 53 79 73 74 65 6d 44 69 72 65  nment.SystemDire
292f0 63 74 6f 72 79 2c 0d 0a 20 20 20 20 20 20 20 20  ctory,..        
29300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29310 20 20 20 20 20 20 20 20 22 6d 73 63 6f 72 65 65          "mscoree
29320 2e 64 6c 6c 22 29 2c 20 77 68 61 74 49 66 2c 20  .dll"), whatIf, 
29330 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20  verbose);....   
29340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29350 20 20 20 20 20 52 65 67 69 73 74 72 79 48 65 6c       RegistryHel
29360 70 65 72 2e 53 65 74 56 61 6c 75 65 28 70 61 63  per.SetValue(pac
29370 6b 61 67 65 4b 65 79 2c 20 22 43 6f 6d 70 61 6e  kageKey, "Compan
29380 79 4e 61 6d 65 22 2c 0d 0a 20 20 20 20 20 20 20  yName",..       
29390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
293a0 20 20 20 20 20 22 68 74 74 70 3a 2f 2f 73 79 73       "http://sys
293b0 74 65 6d 2e 64 61 74 61 2e 73 71 6c 69 74 65 2e  tem.data.sqlite.
293c0 6f 72 67 2f 22 2c 20 77 68 61 74 49 66 2c 20 76  org/", whatIf, v
293d0 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20  erbose);....    
293e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
293f0 20 20 20 20 52 65 67 69 73 74 72 79 48 65 6c 70      RegistryHelp
29400 65 72 2e 53 65 74 56 61 6c 75 65 28 70 61 63 6b  er.SetValue(pack
29410 61 67 65 4b 65 79 2c 20 22 4d 69 6e 45 64 69 74  ageKey, "MinEdit
29420 69 6f 6e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  ion",..         
29430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29440 20 20 20 22 73 74 61 6e 64 61 72 64 22 2c 20 77     "standard", w
29450 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 3b  hatIf, verbose);
29460 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
29470 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69              Regi
29480 73 74 72 79 48 65 6c 70 65 72 2e 53 65 74 56 61  stryHelper.SetVa
29490 6c 75 65 28 70 61 63 6b 61 67 65 4b 65 79 2c 20  lue(packageKey, 
294a0 22 50 72 6f 64 75 63 74 4e 61 6d 65 22 2c 0d 0a  "ProductName",..
294b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
294c0 20 20 20 20 20 20 20 20 20 20 20 20 53 74 72 69              Stri
294d0 6e 67 2e 46 6f 72 6d 61 74 28 22 7b 30 7d 20 44  ng.Format("{0} D
294e0 65 73 69 67 6e 65 72 20 50 61 63 6b 61 67 65 22  esigner Package"
294f0 2c 20 50 72 6f 6a 65 63 74 4e 61 6d 65 29 2c 0d  , ProjectName),.
29500 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
29510 20 20 20 20 20 20 20 20 20 20 20 20 20 77 68 61               wha
29520 74 49 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a  tIf, verbose);..
29530 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
29540 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74            Regist
29550 72 79 48 65 6c 70 65 72 2e 53 65 74 56 61 6c 75  ryHelper.SetValu
29560 65 28 70 61 63 6b 61 67 65 4b 65 79 2c 20 22 50  e(packageKey, "P
29570 72 6f 64 75 63 74 56 65 72 73 69 6f 6e 22 2c 0d  roductVersion",.
29580 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
29590 20 20 20 20 20 20 20 20 20 20 20 20 20 22 31 2e               "1.
295a0 30 22 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62  0", whatIf, verb
295b0 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ose);....       
295c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
295d0 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69   using (MockRegi
295e0 73 74 72 79 4b 65 79 20 74 6f 6f 6c 62 6f 78 4b  stryKey toolboxK
295f0 65 79 20 3d 20 52 65 67 69 73 74 72 79 48 65 6c  ey = RegistryHel
29600 70 65 72 2e 43 72 65 61 74 65 53 75 62 4b 65 79  per.CreateSubKey
29610 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
29620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29630 20 20 20 70 61 63 6b 61 67 65 4b 65 79 2c 20 22     packageKey, "
29640 54 6f 6f 6c 62 6f 78 22 2c 20 77 68 61 74 49 66  Toolbox", whatIf
29650 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20  , verbose))..   
29660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29670 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
29680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29690 20 20 20 20 69 66 20 28 74 6f 6f 6c 62 6f 78 4b      if (toolboxK
296a0 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ey == null)..   
296b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
296c0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
296d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
296e0 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
296f0 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  r = String.Forma
29700 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
29710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29720 20 20 20 20 20 20 20 20 22 63 6f 75 6c 64 20 6e          "could n
29730 6f 74 20 63 72 65 61 74 65 20 72 65 67 69 73 74  ot create regist
29740 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 54 6f 6f  ry key: {0}\\Too
29750 6c 62 6f 78 22 2c 0d 0a 20 20 20 20 20 20 20 20  lbox",..        
29760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29770 20 20 20 20 20 20 20 20 20 20 20 20 70 61 63 6b              pack
29780 61 67 65 4b 65 79 29 3b 0d 0a 0d 0a 20 20 20 20  ageKey);....    
29790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
297a0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
297b0 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
297c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
297d0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
297e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
297f0 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79          Registry
29800 48 65 6c 70 65 72 2e 53 65 74 56 61 6c 75 65 28  Helper.SetValue(
29810 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
29820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29830 20 20 74 6f 6f 6c 62 6f 78 4b 65 79 2c 20 22 44    toolboxKey, "D
29840 65 66 61 75 6c 74 20 49 74 65 6d 73 22 2c 20 33  efault Items", 3
29850 2c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20  , whatIf,..     
29860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29870 20 20 20 20 20 20 20 20 20 20 20 76 65 72 62 6f             verbo
29880 73 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  se);..          
29890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
298a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
298b0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
298c0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
298d0 20 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69               usi
298e0 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79  ng (MockRegistry
298f0 4b 65 79 20 73 75 62 4b 65 79 20 3d 20 52 65 67  Key subKey = Reg
29900 69 73 74 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e  istryHelper.Open
29910 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20  SubKey(..       
29920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29930 20 6b 65 79 2c 20 22 4d 65 6e 75 73 22 2c 20 74   key, "Menus", t
29940 72 75 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72  rue, whatIf, ver
29950 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20  bose))..        
29960 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
29970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
29980 66 20 28 73 75 62 4b 65 79 20 3d 3d 20 6e 75 6c  f (subKey == nul
29990 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
299a0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
299b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
299c0 20 20 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e     error = Strin
299d0 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
299e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
299f0 20 20 20 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f         "could no
29a00 74 20 6f 70 65 6e 20 72 65 67 69 73 74 72 79 20  t open registry 
29a10 6b 65 79 3a 20 7b 30 7d 5c 5c 4d 65 6e 75 73 22  key: {0}\\Menus"
29a20 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
29a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b                 k
29a40 65 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ey);....        
29a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29a60 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20  return false;.. 
29a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29a80 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
29a90 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69              Regi
29aa0 73 74 72 79 48 65 6c 70 65 72 2e 53 65 74 56 61  stryHelper.SetVa
29ab0 6c 75 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  lue(..          
29ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 75                su
29ad0 62 4b 65 79 2c 20 70 61 63 6b 61 67 65 2e 50 61  bKey, package.Pa
29ae0 63 6b 61 67 65 49 64 2e 54 6f 53 74 72 69 6e 67  ckageId.ToString
29af0 28 56 73 49 64 46 6f 72 6d 61 74 29 2c 0d 0a 20  (VsIdFormat),.. 
29b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29b10 20 20 20 20 20 20 20 22 2c 20 31 30 30 30 2c 20         ", 1000, 
29b20 33 22 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62  3", whatIf, verb
29b30 6f 73 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ose);..         
29b40 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
29b50 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e              usin
29b60 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b  g (MockRegistryK
29b70 65 79 20 73 75 62 4b 65 79 20 3d 20 52 65 67 69  ey subKey = Regi
29b80 73 74 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53  stryHelper.OpenS
29b90 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20  ubKey(..        
29ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29bb0 6b 65 79 2c 20 22 53 65 72 76 69 63 65 73 22 2c  key, "Services",
29bc0 20 74 72 75 65 2c 20 77 68 61 74 49 66 2c 20 76   true, whatIf, v
29bd0 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20  erbose))..      
29be0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
29bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29c00 20 69 66 20 28 73 75 62 4b 65 79 20 3d 3d 20 6e   if (subKey == n
29c10 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
29c20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
29c30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29c40 20 20 20 20 20 65 72 72 6f 72 20 3d 20 53 74 72       error = Str
29c50 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
29c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29c70 20 20 20 20 20 20 20 20 20 22 63 6f 75 6c 64 20           "could 
29c80 6e 6f 74 20 6f 70 65 6e 20 72 65 67 69 73 74 72  not open registr
29c90 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 53 65 72 76  y key: {0}\\Serv
29ca0 69 63 65 73 22 2c 0d 0a 20 20 20 20 20 20 20 20  ices",..        
29cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29cc0 20 20 20 20 6b 65 79 29 3b 0d 0a 0d 0a 20 20 20      key);....   
29cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29ce0 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
29cf0 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
29d00 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
29d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29d20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69   using (MockRegi
29d30 73 74 72 79 4b 65 79 20 73 65 72 76 69 63 65 4b  stryKey serviceK
29d40 65 79 20 3d 20 52 65 67 69 73 74 72 79 48 65 6c  ey = RegistryHel
29d50 70 65 72 2e 43 72 65 61 74 65 53 75 62 4b 65 79  per.CreateSubKey
29d60 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
29d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
29d80 75 62 4b 65 79 2c 20 70 61 63 6b 61 67 65 2e 53  ubKey, package.S
29d90 65 72 76 69 63 65 49 64 2e 54 6f 53 74 72 69 6e  erviceId.ToStrin
29da0 67 28 56 73 49 64 46 6f 72 6d 61 74 29 2c 20 77  g(VsIdFormat), w
29db0 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20  hatIf,..        
29dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29dd0 20 20 20 20 76 65 72 62 6f 73 65 29 29 0d 0a 20      verbose)).. 
29de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29df0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
29e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
29e10 20 28 73 65 72 76 69 63 65 4b 65 79 20 3d 3d 20   (serviceKey == 
29e20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
29e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
29e40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
29e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
29e60 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72  ror = String.For
29e70 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
29e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29e90 20 20 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74        "could not
29ea0 20 63 72 65 61 74 65 20 72 65 67 69 73 74 72 79   create registry
29eb0 20 6b 65 79 3a 20 7b 30 7d 5c 5c 7b 31 7d 22 2c   key: {0}\\{1}",
29ec0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
29ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29ee0 20 20 6b 65 79 2c 20 70 61 63 6b 61 67 65 2e 53    key, package.S
29ef0 65 72 76 69 63 65 49 64 2e 54 6f 53 74 72 69 6e  erviceId.ToStrin
29f00 67 28 56 73 49 64 46 6f 72 6d 61 74 29 29 3b 0d  g(VsIdFormat));.
29f10 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
29f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
29f30 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
29f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29f50 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
29f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29f70 20 20 20 52 65 67 69 73 74 72 79 48 65 6c 70 65     RegistryHelpe
29f80 72 2e 53 65 74 56 61 6c 75 65 28 73 65 72 76 69  r.SetValue(servi
29f90 63 65 4b 65 79 2c 20 6e 75 6c 6c 2c 0d 0a 20 20  ceKey, null,..  
29fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29fb0 20 20 20 20 20 20 20 20 20 20 70 61 63 6b 61 67            packag
29fc0 65 2e 50 61 63 6b 61 67 65 49 64 2e 54 6f 53 74  e.PackageId.ToSt
29fd0 72 69 6e 67 28 56 73 49 64 46 6f 72 6d 61 74 29  ring(VsIdFormat)
29fe0 2c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20  , whatIf,..     
29ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a000 20 20 20 20 20 20 20 76 65 72 62 6f 73 65 29 3b         verbose);
2a010 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2a020 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69              Regi
2a030 73 74 72 79 48 65 6c 70 65 72 2e 53 65 74 56 61  stryHelper.SetVa
2a040 6c 75 65 28 73 65 72 76 69 63 65 4b 65 79 2c 20  lue(serviceKey, 
2a050 22 4e 61 6d 65 22 2c 0d 0a 20 20 20 20 20 20 20  "Name",..       
2a060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a070 20 20 20 20 20 53 74 72 69 6e 67 2e 46 6f 72 6d       String.Form
2a080 61 74 28 22 7b 30 7d 20 44 65 73 69 67 6e 65 72  at("{0} Designer
2a090 20 53 65 72 76 69 63 65 22 2c 20 50 72 6f 6a 65   Service", Proje
2a0a0 63 74 4e 61 6d 65 29 2c 0d 0a 20 20 20 20 20 20  ctName),..      
2a0b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a0c0 20 20 20 20 20 20 77 68 61 74 49 66 2c 20 76 65        whatIf, ve
2a0d0 72 62 6f 73 65 29 3b 0d 0a 20 20 20 20 20 20 20  rbose);..       
2a0e0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
2a0f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a100 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
2a110 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2a120 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20  return true;..  
2a130 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
2a140 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
2a150 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a160 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a170 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a180 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
2a190 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
2a1a0 61 74 69 63 20 62 6f 6f 6c 20 52 65 6d 6f 76 65  atic bool Remove
2a1b0 56 73 50 61 63 6b 61 67 65 28 0d 0a 20 20 20 20  VsPackage(..    
2a1c0 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79          Registry
2a1d0 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20  Key rootKey,..  
2a1e0 20 20 20 20 20 20 20 20 20 20 56 65 72 73 69 6f            Versio
2a1f0 6e 20 76 73 56 65 72 73 69 6f 6e 2c 0d 0a 20 20  n vsVersion,..  
2a200 20 20 20 20 20 20 20 20 20 20 50 61 63 6b 61 67            Packag
2a210 65 20 70 61 63 6b 61 67 65 2c 0d 0a 20 20 20 20  e package,..    
2a220 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61          bool wha
2a230 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf,..          
2a240 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d    bool verbose,.
2a250 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66  .            ref
2a260 20 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20   string error.. 
2a270 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
2a280 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
2a290 20 20 20 20 20 69 66 20 28 76 73 56 65 72 73 69       if (vsVersi
2a2a0 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  on == null)..   
2a2b0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
2a2c0 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
2a2d0 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 56 53 20  r = "invalid VS 
2a2e0 76 65 72 73 69 6f 6e 22 3b 0d 0a 20 20 20 20 20  version";..     
2a2f0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
2a300 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
2a310 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
2a320 20 20 20 20 20 20 20 69 66 20 28 70 61 63 6b 61         if (packa
2a330 67 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ge == null)..   
2a340 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
2a350 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
2a360 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 56 53 20  r = "invalid VS 
2a370 70 61 63 6b 61 67 65 22 3b 0d 0a 20 20 20 20 20  package";..     
2a380 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
2a390 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
2a3a0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
2a3b0 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6b 65         string ke
2a3c0 79 4e 61 6d 65 20 3d 20 47 65 74 56 73 4b 65 79  yName = GetVsKey
2a3d0 4e 61 6d 65 28 76 73 56 65 72 73 69 6f 6e 29 3b  Name(vsVersion);
2a3e0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2a3f0 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73  using (MockRegis
2a400 74 72 79 4b 65 79 20 6b 65 79 20 3d 20 52 65 67  tryKey key = Reg
2a410 69 73 74 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e  istryHelper.Open
2a420 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20  SubKey(..       
2a430 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f               roo
2a440 74 4b 65 79 2c 20 6b 65 79 4e 61 6d 65 2c 20 66  tKey, keyName, f
2a450 61 6c 73 65 2c 20 77 68 61 74 49 66 2c 20 76 65  alse, whatIf, ve
2a460 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20  rbose))..       
2a470 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2a480 20 20 20 20 20 20 20 20 69 66 20 28 6b 65 79 20          if (key 
2a490 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
2a4a0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
2a4b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a4c0 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e   error = String.
2a4d0 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
2a4e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a4f0 20 22 63 6f 75 6c 64 20 6e 6f 74 20 6f 70 65 6e   "could not open
2a500 20 72 65 67 69 73 74 72 79 20 6b 65 79 3a 20 7b   registry key: {
2a510 30 7d 5c 5c 7b 31 7d 22 2c 0d 0a 20 20 20 20 20  0}\\{1}",..     
2a520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a530 20 20 20 72 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e     rootKey, keyN
2a540 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ame);....       
2a550 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
2a560 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  urn false;..    
2a570 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
2a580 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2a590 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69   using (MockRegi
2a5a0 73 74 72 79 4b 65 79 20 73 75 62 4b 65 79 20 3d  stryKey subKey =
2a5b0 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e   RegistryHelper.
2a5c0 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20  OpenSubKey(..   
2a5d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a5e0 20 20 20 20 20 6b 65 79 2c 20 22 50 61 63 6b 61       key, "Packa
2a5f0 67 65 73 22 2c 20 74 72 75 65 2c 20 77 68 61 74  ges", true, what
2a600 49 66 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a 20  If, verbose)).. 
2a610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
2a620 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2a630 20 20 20 20 20 20 69 66 20 28 73 75 62 4b 65 79        if (subKey
2a640 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
2a650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
2a660 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2a670 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
2a680 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  = String.Format(
2a690 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2a6a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 63                "c
2a6b0 6f 75 6c 64 20 6e 6f 74 20 6f 70 65 6e 20 72 65  ould not open re
2a6c0 67 69 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c  gistry key: {0}\
2a6d0 5c 50 61 63 6b 61 67 65 73 22 2c 0d 0a 20 20 20  \Packages",..   
2a6e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a6f0 20 20 20 20 20 20 20 20 20 6b 65 79 29 3b 0d 0a           key);..
2a700 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2a710 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
2a720 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
2a730 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
2a740 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2a750 20 20 20 20 20 20 52 65 67 69 73 74 72 79 48 65        RegistryHe
2a760 6c 70 65 72 2e 44 65 6c 65 74 65 53 75 62 4b 65  lper.DeleteSubKe
2a770 79 54 72 65 65 28 0d 0a 20 20 20 20 20 20 20 20  yTree(..        
2a780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a790 6b 65 79 2c 20 70 61 63 6b 61 67 65 2e 50 61 63  key, package.Pac
2a7a0 6b 61 67 65 49 64 2e 54 6f 53 74 72 69 6e 67 28  kageId.ToString(
2a7b0 56 73 49 64 46 6f 72 6d 61 74 29 2c 20 77 68 61  VsIdFormat), wha
2a7c0 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf,..          
2a7d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76 65                ve
2a7e0 72 62 6f 73 65 29 3b 0d 0a 20 20 20 20 20 20 20  rbose);..       
2a7f0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
2a800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 75 73                us
2a810 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72  ing (MockRegistr
2a820 79 4b 65 79 20 73 75 62 4b 65 79 20 3d 20 52 65  yKey subKey = Re
2a830 67 69 73 74 72 79 48 65 6c 70 65 72 2e 4f 70 65  gistryHelper.Ope
2a840 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20  nSubKey(..      
2a850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a860 20 20 6b 65 79 2c 20 22 4d 65 6e 75 73 22 2c 20    key, "Menus", 
2a870 74 72 75 65 2c 20 77 68 61 74 49 66 2c 20 76 65  true, whatIf, ve
2a880 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20  rbose))..       
2a890 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
2a8a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a8b0 69 66 20 28 73 75 62 4b 65 79 20 3d 3d 20 6e 75  if (subKey == nu
2a8c0 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
2a8d0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
2a8e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a8f0 20 20 20 20 65 72 72 6f 72 20 3d 20 53 74 72 69      error = Stri
2a900 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
2a910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a920 20 20 20 20 20 20 20 20 22 63 6f 75 6c 64 20 6e          "could n
2a930 6f 74 20 6f 70 65 6e 20 72 65 67 69 73 74 72 79  ot open registry
2a940 20 6b 65 79 3a 20 7b 30 7d 5c 5c 4d 65 6e 75 73   key: {0}\\Menus
2a950 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
2a960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a970 6b 65 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  key);....       
2a980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a990 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
2a9a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a9b0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
2a9c0 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67               Reg
2a9d0 69 73 74 72 79 48 65 6c 70 65 72 2e 44 65 6c 65  istryHelper.Dele
2a9e0 74 65 56 61 6c 75 65 28 0d 0a 20 20 20 20 20 20  teValue(..      
2a9f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2aa00 20 20 73 75 62 4b 65 79 2c 20 70 61 63 6b 61 67    subKey, packag
2aa10 65 2e 50 61 63 6b 61 67 65 49 64 2e 54 6f 53 74  e.PackageId.ToSt
2aa20 72 69 6e 67 28 56 73 49 64 46 6f 72 6d 61 74 29  ring(VsIdFormat)
2aa30 2c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20  , whatIf,..     
2aa40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2aa50 20 20 20 76 65 72 62 6f 73 65 29 3b 0d 0a 20 20     verbose);..  
2aa60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
2aa70 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
2aa80 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65     using (MockRe
2aa90 67 69 73 74 72 79 4b 65 79 20 73 75 62 4b 65 79  gistryKey subKey
2aaa0 20 3d 20 52 65 67 69 73 74 72 79 48 65 6c 70 65   = RegistryHelpe
2aab0 72 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20  r.OpenSubKey(.. 
2aac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2aad0 20 20 20 20 20 20 20 6b 65 79 2c 20 22 53 65 72         key, "Ser
2aae0 76 69 63 65 73 22 2c 20 74 72 75 65 2c 20 77 68  vices", true, wh
2aaf0 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 29 0d  atIf, verbose)).
2ab00 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2ab10 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
2ab20 20 20 20 20 20 20 20 20 69 66 20 28 73 75 62 4b          if (subK
2ab30 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ey == null)..   
2ab40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ab50 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
2ab60 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
2ab70 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  r = String.Forma
2ab80 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
2ab90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2aba0 22 63 6f 75 6c 64 20 6e 6f 74 20 6f 70 65 6e 20  "could not open 
2abb0 72 65 67 69 73 74 72 79 20 6b 65 79 3a 20 7b 30  registry key: {0
2abc0 7d 5c 5c 53 65 72 76 69 63 65 73 22 2c 0d 0a 20  }\\Services",.. 
2abd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2abe0 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 29 3b             key);
2abf0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2ac00 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
2ac10 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
2ac20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
2ac30 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2ac40 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79          Registry
2ac50 48 65 6c 70 65 72 2e 44 65 6c 65 74 65 53 75 62  Helper.DeleteSub
2ac60 4b 65 79 54 72 65 65 28 0d 0a 20 20 20 20 20 20  KeyTree(..      
2ac70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ac80 20 20 73 75 62 4b 65 79 2c 20 70 61 63 6b 61 67    subKey, packag
2ac90 65 2e 53 65 72 76 69 63 65 49 64 2e 54 6f 53 74  e.ServiceId.ToSt
2aca0 72 69 6e 67 28 56 73 49 64 46 6f 72 6d 61 74 29  ring(VsIdFormat)
2acb0 2c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20  , whatIf,..     
2acc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2acd0 20 20 20 76 65 72 62 6f 73 65 29 3b 0d 0a 20 20     verbose);..  
2ace0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
2acf0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
2ad00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
2ad10 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20  turn true;..    
2ad20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
2ad30 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
2ad40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ad50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ad60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ad70 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
2ad80 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74      private stat
2ad90 69 63 20 62 6f 6f 6c 20 50 72 6f 63 65 73 73 56  ic bool ProcessV
2ada0 73 50 61 63 6b 61 67 65 28 0d 0a 20 20 20 20 20  sPackage(..     
2adb0 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79 4b         RegistryK
2adc0 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20  ey rootKey,..   
2add0 20 20 20 20 20 20 20 20 20 56 65 72 73 69 6f 6e           Version
2ade0 20 76 73 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20   vsVersion,..   
2adf0 20 20 20 20 20 20 20 20 20 50 61 63 6b 61 67 65           Package
2ae00 20 70 61 63 6b 61 67 65 2c 0d 0a 20 20 20 20 20   package,..     
2ae10 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 63 6c         object cl
2ae20 69 65 6e 74 44 61 74 61 2c 0d 0a 20 20 20 20 20  ientData,..     
2ae30 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74         bool what
2ae40 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  If,..           
2ae50 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a   bool verbose,..
2ae60 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20              ref 
2ae70 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20  string error..  
2ae80 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
2ae90 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2aea0 20 20 20 20 41 6e 79 50 61 69 72 3c 73 74 72 69      AnyPair<stri
2aeb0 6e 67 2c 20 62 6f 6f 6c 3e 20 70 61 69 72 20 3d  ng, bool> pair =
2aec0 20 63 6c 69 65 6e 74 44 61 74 61 20 61 73 20 41   clientData as A
2aed0 6e 79 50 61 69 72 3c 73 74 72 69 6e 67 2c 20 62  nyPair<string, b
2aee0 6f 6f 6c 3e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ool>;....       
2aef0 20 20 20 20 20 69 66 20 28 70 61 69 72 20 3d 3d       if (pair ==
2af00 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
2af10 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
2af20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22         error = "
2af30 69 6e 76 61 6c 69 64 20 56 53 20 63 61 6c 6c 62  invalid VS callb
2af40 61 63 6b 20 64 61 74 61 22 3b 0d 0a 20 20 20 20  ack data";..    
2af50 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
2af60 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
2af70 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
2af80 20 20 20 20 20 20 20 20 69 66 20 28 70 61 69 72          if (pair
2af90 2e 59 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  .Y)..           
2afa0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
2afb0 20 20 20 20 72 65 74 75 72 6e 20 41 64 64 56 73      return AddVs
2afc0 50 61 63 6b 61 67 65 28 0d 0a 20 20 20 20 20 20  Package(..      
2afd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f                ro
2afe0 6f 74 4b 65 79 2c 20 76 73 56 65 72 73 69 6f 6e  otKey, vsVersion
2aff0 2c 20 70 61 63 6b 61 67 65 2c 20 70 61 69 72 2e  , package, pair.
2b000 58 2c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20  X, whatIf,..    
2b010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b020 76 65 72 62 6f 73 65 2c 20 72 65 66 20 65 72 72  verbose, ref err
2b030 6f 72 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  or);..          
2b040 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
2b050 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20   else..         
2b060 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
2b070 20 20 20 20 20 20 72 65 74 75 72 6e 20 52 65 6d        return Rem
2b080 6f 76 65 56 73 50 61 63 6b 61 67 65 28 0d 0a 20  oveVsPackage(.. 
2b090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b0a0 20 20 20 72 6f 6f 74 4b 65 79 2c 20 76 73 56 65     rootKey, vsVe
2b0b0 72 73 69 6f 6e 2c 20 70 61 63 6b 61 67 65 2c 20  rsion, package, 
2b0c0 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 2c  whatIf, verbose,
2b0d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2b0e0 20 20 20 20 20 20 72 65 66 20 65 72 72 6f 72 29        ref error)
2b0f0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
2b100 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
2b110 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
2b120 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67  .        #endreg
2b130 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  ion....        /
2b140 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b150 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b160 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b170 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b180 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
2b190 20 20 23 72 65 67 69 6f 6e 20 41 70 70 6c 69 63    #region Applic
2b1a0 61 74 69 6f 6e 20 45 6e 74 72 79 20 50 6f 69 6e  ation Entry Poin
2b1b0 74 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  t..        priva
2b1c0 74 65 20 73 74 61 74 69 63 20 69 6e 74 20 4d 61  te static int Ma
2b1d0 69 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  in(..           
2b1e0 20 73 74 72 69 6e 67 5b 5d 20 61 72 67 73 0d 0a   string[] args..
2b1f0 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
2b200 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
2b210 20 20 20 20 20 20 43 6f 6e 66 69 67 75 72 61 74        Configurat
2b220 69 6f 6e 20 63 6f 6e 66 69 67 75 72 61 74 69 6f  ion configuratio
2b230 6e 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20  n = null;..     
2b240 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 65 72         string er
2b250 72 6f 72 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20  ror = null;.... 
2b260 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
2b270 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b280 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b290 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b2a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
2b2b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 72  ..            #r
2b2c0 65 67 69 6f 6e 20 43 6f 6d 6d 61 6e 64 20 4c 69  egion Command Li
2b2d0 6e 65 20 50 72 6f 63 65 73 73 69 6e 67 0d 0a 20  ne Processing.. 
2b2e0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21             if (!
2b2f0 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 46 72  Configuration.Fr
2b300 6f 6d 41 72 67 73 28 0d 0a 20 20 20 20 20 20 20  omArgs(..       
2b310 20 20 20 20 20 20 20 20 20 20 20 20 20 61 72 67               arg
2b320 73 2c 20 74 72 75 65 2c 20 72 65 66 20 63 6f 6e  s, true, ref con
2b330 66 69 67 75 72 61 74 69 6f 6e 2c 20 72 65 66 20  figuration, ref 
2b340 65 72 72 6f 72 29 20 7c 7c 0d 0a 20 20 20 20 20  error) ||..     
2b350 20 20 20 20 20 20 20 20 20 20 20 21 43 6f 6e 66             !Conf
2b360 69 67 75 72 61 74 69 6f 6e 2e 50 72 6f 63 65 73  iguration.Proces
2b370 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s(..            
2b380 20 20 20 20 20 20 20 20 61 72 67 73 2c 20 63 6f          args, co
2b390 6e 66 69 67 75 72 61 74 69 6f 6e 2c 20 74 72 75  nfiguration, tru
2b3a0 65 2c 20 72 65 66 20 65 72 72 6f 72 29 20 7c 7c  e, ref error) ||
2b3b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2b3c0 20 20 21 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e    !Configuration
2b3d0 2e 43 68 65 63 6b 52 75 6e 74 69 6d 65 56 65 72  .CheckRuntimeVer
2b3e0 73 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20  sion(..         
2b3f0 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69             confi
2b400 67 75 72 61 74 69 6f 6e 2c 20 74 72 75 65 2c 20  guration, true, 
2b410 72 65 66 20 65 72 72 6f 72 29 29 0d 0a 20 20 20  ref error))..   
2b420 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
2b430 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
2b440 65 4f 70 73 2e 53 68 6f 77 4d 65 73 73 61 67 65  eOps.ShowMessage
2b450 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 48  (TracePriority.H
2b460 69 67 68 65 73 74 2c 0d 0a 20 20 20 20 20 20 20  ighest,..       
2b470 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62               deb
2b480 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63  ugCallback, trac
2b490 65 43 61 6c 6c 62 61 63 6b 2c 20 74 68 69 73 41  eCallback, thisA
2b4a0 73 73 65 6d 62 6c 79 2c 0d 0a 20 20 20 20 20 20  ssembly,..      
2b4b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
2b4c0 72 6f 72 2c 20 74 72 61 63 65 43 61 74 65 67 6f  ror, traceCatego
2b4d0 72 79 2c 20 4d 65 73 73 61 67 65 42 6f 78 42 75  ry, MessageBoxBu
2b4e0 74 74 6f 6e 73 2e 4f 4b 2c 0d 0a 20 20 20 20 20  ttons.OK,..     
2b4f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4d                 M
2b500 65 73 73 61 67 65 42 6f 78 49 63 6f 6e 2e 45 72  essageBoxIcon.Er
2b510 72 6f 72 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ror);....       
2b520 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
2b530 31 3b 20 2f 2a 20 46 41 49 4c 55 52 45 20 2a 2f  1; /* FAILURE */
2b540 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
2b550 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e  .            #en
2b560 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
2b570 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
2b580 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b590 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b5a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b5b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
2b5c0 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f            #regio
2b5d0 6e 20 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b  n .NET Framework
2b5e0 20 2f 20 56 69 73 75 61 6c 20 53 74 75 64 69 6f   / Visual Studio
2b5f0 20 44 61 74 61 0d 0a 20 20 20 20 20 20 20 20 20   Data..         
2b600 20 20 20 50 61 63 6b 61 67 65 20 70 61 63 6b 61     Package packa
2b610 67 65 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20  ge = null;..    
2b620 20 20 20 20 20 20 20 20 46 72 61 6d 65 77 6f 72          Framewor
2b630 6b 4c 69 73 74 20 66 72 61 6d 65 77 6f 72 6b 4c  kList frameworkL
2b640 69 73 74 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20  ist = null;..   
2b650 20 20 20 20 20 20 20 20 20 56 73 4c 69 73 74 20           VsList 
2b660 76 73 4c 69 73 74 20 3d 20 6e 75 6c 6c 3b 0d 0a  vsList = null;..
2b670 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2b680 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b690 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b6a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b6b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b6c0 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
2b6d0 20 49 6e 69 74 69 61 6c 69 7a 65 56 73 50 61 63   InitializeVsPac
2b6e0 6b 61 67 65 28 72 65 66 20 70 61 63 6b 61 67 65  kage(ref package
2b6f0 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
2b700 49 6e 69 74 69 61 6c 69 7a 65 46 72 61 6d 65 77  InitializeFramew
2b710 6f 72 6b 4c 69 73 74 28 63 6f 6e 66 69 67 75 72  orkList(configur
2b720 61 74 69 6f 6e 2c 20 72 65 66 20 66 72 61 6d 65  ation, ref frame
2b730 77 6f 72 6b 4c 69 73 74 29 3b 0d 0a 20 20 20 20  workList);..    
2b740 20 20 20 20 20 20 20 20 49 6e 69 74 69 61 6c 69          Initiali
2b750 7a 65 56 73 4c 69 73 74 28 63 6f 6e 66 69 67 75  zeVsList(configu
2b760 72 61 74 69 6f 6e 2c 20 72 65 66 20 76 73 4c 69  ration, ref vsLi
2b770 73 74 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  st);..          
2b780 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
2b790 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
2b7a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b7b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b7c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b7d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
2b7e0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 41  ...            A
2b7f0 73 73 65 6d 62 6c 79 4e 61 6d 65 20 61 73 73 65  ssemblyName asse
2b800 6d 62 6c 79 4e 61 6d 65 20 3d 20 41 73 73 65 6d  mblyName = Assem
2b810 62 6c 79 4e 61 6d 65 2e 47 65 74 41 73 73 65 6d  blyName.GetAssem
2b820 62 6c 79 4e 61 6d 65 28 0d 0a 20 20 20 20 20 20  blyName(..      
2b830 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67            config
2b840 75 72 61 74 69 6f 6e 2e 43 6f 72 65 46 69 6c 65  uration.CoreFile
2b850 4e 61 6d 65 29 3b 20 2f 2a 20 74 68 72 6f 77 20  Name); /* throw 
2b860 2a 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  */....          
2b870 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
2b880 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b890 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b8a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2b8b0 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
2b8c0 20 20 20 20 20 41 6e 79 50 61 69 72 3c 73 74 72       AnyPair<str
2b8d0 69 6e 67 2c 20 62 6f 6f 6c 3e 20 64 69 72 65 63  ing, bool> direc
2b8e0 74 6f 72 79 50 61 69 72 20 3d 20 6e 65 77 20 41  toryPair = new A
2b8f0 6e 79 50 61 69 72 3c 73 74 72 69 6e 67 2c 20 62  nyPair<string, b
2b900 6f 6f 6c 3e 28 0d 0a 20 20 20 20 20 20 20 20 20  ool>(..         
2b910 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61         configura
2b920 74 69 6f 6e 2e 44 69 72 65 63 74 6f 72 79 2c 20  tion.Directory, 
2b930 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 49 6e  configuration.In
2b940 73 74 61 6c 6c 29 3b 0d 0a 0d 0a 20 20 20 20 20  stall);....     
2b950 20 20 20 20 20 20 20 41 6e 79 50 61 69 72 3c 73         AnyPair<s
2b960 74 72 69 6e 67 2c 20 62 6f 6f 6c 3e 20 66 69 6c  tring, bool> fil
2b970 65 4e 61 6d 65 50 61 69 72 20 3d 20 6e 65 77 20  eNamePair = new 
2b980 41 6e 79 50 61 69 72 3c 73 74 72 69 6e 67 2c 20  AnyPair<string, 
2b990 62 6f 6f 6c 3e 28 0d 0a 20 20 20 20 20 20 20 20  bool>(..        
2b9a0 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72          configur
2b9b0 61 74 69 6f 6e 2e 44 65 73 69 67 6e 65 72 46 69  ation.DesignerFi
2b9c0 6c 65 4e 61 6d 65 2c 20 63 6f 6e 66 69 67 75 72  leName, configur
2b9d0 61 74 69 6f 6e 2e 49 6e 73 74 61 6c 6c 29 3b 0d  ation.Install);.
2b9e0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
2b9f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ba00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ba10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ba20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ba30 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
2ba40 20 20 23 72 65 67 69 6f 6e 20 2e 4e 45 54 20 47    #region .NET G
2ba50 41 43 20 49 6e 73 74 61 6c 6c 2f 52 65 6d 6f 76  AC Install/Remov
2ba60 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  e..            i
2ba70 66 20 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  f (configuration
2ba80 2e 48 61 73 46 6c 61 67 73 28 49 6e 73 74 61 6c  .HasFlags(Instal
2ba90 6c 46 6c 61 67 73 2e 47 41 43 2c 20 74 72 75 65  lFlags.GAC, true
2baa0 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
2bab0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
2bac0 20 20 20 50 75 62 6c 69 73 68 20 70 75 62 6c 69     Publish publi
2bad0 73 68 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20  sh = null;....  
2bae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
2baf0 20 28 21 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e   (!configuration
2bb00 2e 57 68 61 74 49 66 29 0d 0a 20 20 20 20 20 20  .WhatIf)..      
2bb10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 75                pu
2bb20 62 6c 69 73 68 20 3d 20 6e 65 77 20 50 75 62 6c  blish = new Publ
2bb30 69 73 68 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ish();....      
2bb40 20 20 20 20 20 20 20 20 20 20 69 66 20 28 63 6f            if (co
2bb50 6e 66 69 67 75 72 61 74 69 6f 6e 2e 49 6e 73 74  nfiguration.Inst
2bb60 61 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  all)..          
2bb70 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
2bb80 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
2bb90 28 21 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e  (!configuration.
2bba0 57 68 61 74 49 66 29 0d 0a 20 20 20 20 20 20 20  WhatIf)..       
2bbb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bbc0 20 70 75 62 6c 69 73 68 2e 47 61 63 49 6e 73 74   publish.GacInst
2bbd0 61 6c 6c 28 63 6f 6e 66 69 67 75 72 61 74 69 6f  all(configuratio
2bbe0 6e 2e 43 6f 72 65 46 69 6c 65 4e 61 6d 65 29 3b  n.CoreFileName);
2bbf0 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 0d 0a   /* throw */....
2bc00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bc10 20 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62      TraceOps.Deb
2bc20 75 67 41 6e 64 54 72 61 63 65 28 54 72 61 63 65  ugAndTrace(Trace
2bc30 50 72 69 6f 72 69 74 79 2e 48 69 67 68 65 73 74  Priority.Highest
2bc40 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
2bc50 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67             debug
2bc60 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43  Callback, traceC
2bc70 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e  allback, String.
2bc80 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
2bc90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bca0 20 22 47 61 63 49 6e 73 74 61 6c 6c 3a 20 61 73   "GacInstall: as
2bcb0 73 65 6d 62 6c 79 50 61 74 68 20 3d 20 7b 30 7d  semblyPath = {0}
2bcc0 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
2bcd0 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44              ForD
2bce0 69 73 70 6c 61 79 28 63 6f 6e 66 69 67 75 72 61  isplay(configura
2bcf0 74 69 6f 6e 2e 43 6f 72 65 46 69 6c 65 4e 61 6d  tion.CoreFileNam
2bd00 65 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  e)),..          
2bd10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
2bd20 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
2bd30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2bd40 20 20 20 20 20 69 66 20 28 21 63 6f 6e 66 69 67       if (!config
2bd50 75 72 61 74 69 6f 6e 2e 57 68 61 74 49 66 29 0d  uration.WhatIf).
2bd60 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2bd70 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 73 68           publish
2bd80 2e 47 61 63 49 6e 73 74 61 6c 6c 28 63 6f 6e 66  .GacInstall(conf
2bd90 69 67 75 72 61 74 69 6f 6e 2e 4c 69 6e 71 46 69  iguration.LinqFi
2bda0 6c 65 4e 61 6d 65 29 3b 20 2f 2a 20 74 68 72 6f  leName); /* thro
2bdb0 77 20 2a 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  w */....        
2bdc0 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
2bdd0 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72 61  eOps.DebugAndTra
2bde0 63 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79  ce(TracePriority
2bdf0 2e 48 69 67 68 65 73 74 2c 0d 0a 20 20 20 20 20  .Highest,..     
2be00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2be10 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b     debugCallback
2be20 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c  , traceCallback,
2be30 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
2be40 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2be50 20 20 20 20 20 20 20 20 20 22 47 61 63 49 6e 73           "GacIns
2be60 74 61 6c 6c 3a 20 61 73 73 65 6d 62 6c 79 50 61  tall: assemblyPa
2be70 74 68 20 3d 20 7b 30 7d 22 2c 0d 0a 20 20 20 20  th = {0}",..    
2be80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2be90 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 63      ForDisplay(c
2bea0 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 4c 69 6e  onfiguration.Lin
2beb0 71 46 69 6c 65 4e 61 6d 65 29 29 2c 0d 0a 20 20  qFileName)),..  
2bec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bed0 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
2bee0 6f 72 79 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ory);..         
2bef0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
2bf00 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a            else..
2bf10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bf20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
2bf30 20 20 20 20 20 20 20 69 66 20 28 21 63 6f 6e 66         if (!conf
2bf40 69 67 75 72 61 74 69 6f 6e 2e 57 68 61 74 49 66  iguration.WhatIf
2bf50 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
2bf60 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
2bf70 73 68 2e 47 61 63 52 65 6d 6f 76 65 28 63 6f 6e  sh.GacRemove(con
2bf80 66 69 67 75 72 61 74 69 6f 6e 2e 4c 69 6e 71 46  figuration.LinqF
2bf90 69 6c 65 4e 61 6d 65 29 3b 20 2f 2a 20 74 68 72  ileName); /* thr
2bfa0 6f 77 20 2a 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  ow */....       
2bfb0 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
2bfc0 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64 54 72  ceOps.DebugAndTr
2bfd0 61 63 65 28 54 72 61 63 65 50 72 69 6f 72 69 74  ace(TracePriorit
2bfe0 79 2e 48 69 67 68 65 73 74 2c 0d 0a 20 20 20 20  y.Highest,..    
2bff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c000 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63      debugCallbac
2c010 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b  k, traceCallback
2c020 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  , String.Format(
2c030 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2c040 20 20 20 20 20 20 20 20 20 20 22 47 61 63 52 65            "GacRe
2c050 6d 6f 76 65 3a 20 61 73 73 65 6d 62 6c 79 50 61  move: assemblyPa
2c060 74 68 20 3d 20 7b 30 7d 22 2c 0d 0a 20 20 20 20  th = {0}",..    
2c070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c080 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 63      ForDisplay(c
2c090 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 4c 69 6e  onfiguration.Lin
2c0a0 71 46 69 6c 65 4e 61 6d 65 29 29 2c 0d 0a 20 20  qFileName)),..  
2c0b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c0c0 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
2c0d0 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
2c0e0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
2c0f0 28 21 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e  (!configuration.
2c100 57 68 61 74 49 66 29 0d 0a 20 20 20 20 20 20 20  WhatIf)..       
2c110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c120 20 70 75 62 6c 69 73 68 2e 47 61 63 52 65 6d 6f   publish.GacRemo
2c130 76 65 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  ve(configuration
2c140 2e 43 6f 72 65 46 69 6c 65 4e 61 6d 65 29 3b 20  .CoreFileName); 
2c150 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 0d 0a 20  /* throw */.... 
2c160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c170 20 20 20 54 72 61 63 65 4f 70 73 2e 44 65 62 75     TraceOps.Debu
2c180 67 41 6e 64 54 72 61 63 65 28 54 72 61 63 65 50  gAndTrace(TraceP
2c190 72 69 6f 72 69 74 79 2e 48 69 67 68 65 73 74 2c  riority.Highest,
2c1a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2c1b0 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67 43            debugC
2c1c0 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61  allback, traceCa
2c1d0 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46  llback, String.F
2c1e0 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
2c1f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c200 22 47 61 63 52 65 6d 6f 76 65 3a 20 61 73 73 65  "GacRemove: asse
2c210 6d 62 6c 79 50 61 74 68 20 3d 20 7b 30 7d 22 2c  mblyPath = {0}",
2c220 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2c230 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73            ForDis
2c240 70 6c 61 79 28 63 6f 6e 66 69 67 75 72 61 74 69  play(configurati
2c250 6f 6e 2e 43 6f 72 65 46 69 6c 65 4e 61 6d 65 29  on.CoreFileName)
2c260 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
2c270 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
2c280 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 20 20 20  eCategory);..   
2c290 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
2c2a0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
2c2b0 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72             #endr
2c2c0 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
2c2d0 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
2c2e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c2f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c300 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c310 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
2c320 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
2c330 2e 4e 45 54 20 41 73 73 65 6d 62 6c 79 46 6f 6c  .NET AssemblyFol
2c340 64 65 72 73 0d 0a 20 20 20 20 20 20 20 20 20 20  ders..          
2c350 20 20 69 66 20 28 63 6f 6e 66 69 67 75 72 61 74    if (configurat
2c360 69 6f 6e 2e 48 61 73 46 6c 61 67 73 28 49 6e 73  ion.HasFlags(Ins
2c370 74 61 6c 6c 46 6c 61 67 73 2e 41 73 73 65 6d 62  tallFlags.Assemb
2c380 6c 79 46 6f 6c 64 65 72 73 2c 20 74 72 75 65 29  lyFolders, true)
2c390 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
2c3a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2c3b0 20 20 69 66 20 28 21 46 6f 72 45 61 63 68 46 72    if (!ForEachFr
2c3c0 61 6d 65 77 6f 72 6b 52 65 67 69 73 74 72 79 28  ameworkRegistry(
2c3d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2c3e0 20 20 20 20 20 20 20 20 20 20 66 72 61 6d 65 77            framew
2c3f0 6f 72 6b 4c 69 73 74 2c 20 50 72 6f 63 65 73 73  orkList, Process
2c400 41 73 73 65 6d 62 6c 79 46 6f 6c 64 65 72 73 2c  AssemblyFolders,
2c410 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2c420 20 20 20 20 20 20 20 20 20 20 64 69 72 65 63 74            direct
2c430 6f 72 79 50 61 69 72 2c 20 63 6f 6e 66 69 67 75  oryPair, configu
2c440 72 61 74 69 6f 6e 2e 57 68 61 74 49 66 2c 0d 0a  ration.WhatIf,..
2c450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c460 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72          configur
2c470 61 74 69 6f 6e 2e 56 65 72 62 6f 73 65 2c 20 72  ation.Verbose, r
2c480 65 66 20 65 72 72 6f 72 29 29 0d 0a 20 20 20 20  ef error))..    
2c490 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
2c4a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c4b0 20 20 20 54 72 61 63 65 4f 70 73 2e 53 68 6f 77     TraceOps.Show
2c4c0 4d 65 73 73 61 67 65 28 54 72 61 63 65 50 72 69  Message(TracePri
2c4d0 6f 72 69 74 79 2e 48 69 67 68 65 73 74 2c 0d 0a  ority.Highest,..
2c4e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c4f0 20 20 20 20 20 20 20 20 64 65 62 75 67 43 61 6c          debugCal
2c500 6c 62 61 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c  lback, traceCall
2c510 62 61 63 6b 2c 20 74 68 69 73 41 73 73 65 6d 62  back, thisAssemb
2c520 6c 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ly,..           
2c530 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
2c540 6f 72 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72  or, traceCategor
2c550 79 2c 20 4d 65 73 73 61 67 65 42 6f 78 42 75 74  y, MessageBoxBut
2c560 74 6f 6e 73 2e 4f 4b 2c 0d 0a 20 20 20 20 20 20  tons.OK,..      
2c570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c580 20 20 4d 65 73 73 61 67 65 42 6f 78 49 63 6f 6e    MessageBoxIcon
2c590 2e 45 72 72 6f 72 29 3b 0d 0a 0d 0a 20 20 20 20  .Error);....    
2c5a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c5b0 72 65 74 75 72 6e 20 31 3b 20 2f 2a 20 46 41 49  return 1; /* FAI
2c5c0 4c 55 52 45 20 2a 2f 0d 0a 20 20 20 20 20 20 20  LURE */..       
2c5d0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
2c5e0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
2c5f0 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
2c600 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n....           
2c610 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
2c620 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c630 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c640 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c650 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
2c660 20 20 20 20 23 72 65 67 69 6f 6e 20 2e 4e 45 54      #region .NET
2c670 20 44 62 50 72 6f 76 69 64 65 72 46 61 63 74 6f   DbProviderFacto
2c680 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ry..            
2c690 69 66 20 28 63 6f 6e 66 69 67 75 72 61 74 69 6f  if (configuratio
2c6a0 6e 2e 48 61 73 46 6c 61 67 73 28 49 6e 73 74 61  n.HasFlags(Insta
2c6b0 6c 6c 46 6c 61 67 73 2e 44 62 50 72 6f 76 69 64  llFlags.DbProvid
2c6c0 65 72 46 61 63 74 6f 72 79 2c 20 74 72 75 65 29  erFactory, true)
2c6d0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
2c6e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2c6f0 20 20 62 6f 6f 6c 20 73 61 76 65 64 20 3d 20 66    bool saved = f
2c700 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  alse;....       
2c710 20 20 20 20 20 20 20 20 20 69 66 20 28 21 46 6f           if (!Fo
2c720 72 45 61 63 68 46 72 61 6d 65 77 6f 72 6b 43 6f  rEachFrameworkCo
2c730 6e 66 69 67 28 0d 0a 20 20 20 20 20 20 20 20 20  nfig(..         
2c740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66                 f
2c750 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2c 20 50 72  rameworkList, Pr
2c760 6f 63 65 73 73 44 62 50 72 6f 76 69 64 65 72 46  ocessDbProviderF
2c770 61 63 74 6f 72 79 2c 0d 0a 20 20 20 20 20 20 20  actory,..       
2c780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c790 20 49 6e 76 61 72 69 61 6e 74 4e 61 6d 65 2c 20   InvariantName, 
2c7a0 50 72 6f 76 69 64 65 72 4e 61 6d 65 2c 20 44 65  ProviderName, De
2c7b0 73 63 72 69 70 74 69 6f 6e 2c 0d 0a 20 20 20 20  scription,..    
2c7c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c7d0 20 20 20 20 46 61 63 74 6f 72 79 54 79 70 65 4e      FactoryTypeN
2c7e0 61 6d 65 2c 20 61 73 73 65 6d 62 6c 79 4e 61 6d  ame, assemblyNam
2c7f0 65 2c 20 64 69 72 65 63 74 6f 72 79 50 61 69 72  e, directoryPair
2c800 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
2c810 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69             confi
2c820 67 75 72 61 74 69 6f 6e 2e 57 68 61 74 49 66 2c  guration.WhatIf,
2c830 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 56   configuration.V
2c840 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20  erbose,..       
2c850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c860 20 72 65 66 20 73 61 76 65 64 2c 20 72 65 66 20   ref saved, ref 
2c870 65 72 72 6f 72 29 29 0d 0a 20 20 20 20 20 20 20  error))..       
2c880 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
2c890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c8a0 54 72 61 63 65 4f 70 73 2e 53 68 6f 77 4d 65 73  TraceOps.ShowMes
2c8b0 73 61 67 65 28 54 72 61 63 65 50 72 69 6f 72 69  sage(TracePriori
2c8c0 74 79 2e 48 69 67 68 65 73 74 2c 0d 0a 20 20 20  ty.Highest,..   
2c8d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c8e0 20 20 20 20 20 64 65 62 75 67 43 61 6c 6c 62 61       debugCallba
2c8f0 63 6b 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63  ck, traceCallbac
2c900 6b 2c 20 74 68 69 73 41 73 73 65 6d 62 6c 79 2c  k, thisAssembly,
2c910 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2c920 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 2c            error,
2c930 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 2c 20   traceCategory, 
2c940 4d 65 73 73 61 67 65 42 6f 78 42 75 74 74 6f 6e  MessageBoxButton
2c950 73 2e 4f 4b 2c 0d 0a 20 20 20 20 20 20 20 20 20  s.OK,..         
2c960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4d                 M
2c970 65 73 73 61 67 65 42 6f 78 49 63 6f 6e 2e 45 72  essageBoxIcon.Er
2c980 72 6f 72 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ror);....       
2c990 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
2c9a0 75 72 6e 20 31 3b 20 2f 2a 20 46 41 49 4c 55 52  urn 1; /* FAILUR
2c9b0 45 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20  E */..          
2c9c0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
2c9d0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
2c9e0 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
2c9f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2ca00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ca10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ca20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ca30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ca40 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
2ca50 20 23 72 65 67 69 6f 6e 20 56 53 20 50 61 63 6b   #region VS Pack
2ca60 61 67 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  age..           
2ca70 20 69 66 20 28 63 6f 6e 66 69 67 75 72 61 74 69   if (configurati
2ca80 6f 6e 2e 48 61 73 46 6c 61 67 73 28 49 6e 73 74  on.HasFlags(Inst
2ca90 61 6c 6c 46 6c 61 67 73 2e 56 73 50 61 63 6b 61  allFlags.VsPacka
2caa0 67 65 2c 20 74 72 75 65 29 29 0d 0a 20 20 20 20  ge, true))..    
2cab0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2cac0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21             if (!
2cad0 46 6f 72 45 61 63 68 56 73 56 65 72 73 69 6f 6e  ForEachVsVersion
2cae0 52 65 67 69 73 74 72 79 28 0d 0a 20 20 20 20 20  Registry(..     
2caf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cb00 20 20 20 76 73 4c 69 73 74 2c 20 50 72 6f 63 65     vsList, Proce
2cb10 73 73 56 73 50 61 63 6b 61 67 65 2c 20 70 61 63  ssVsPackage, pac
2cb20 6b 61 67 65 2c 20 66 69 6c 65 4e 61 6d 65 50 61  kage, fileNamePa
2cb30 69 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ir,..           
2cb40 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
2cb50 66 69 67 75 72 61 74 69 6f 6e 2e 57 68 61 74 49  figuration.WhatI
2cb60 66 2c 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  f, configuration
2cb70 2e 56 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20  .Verbose,..     
2cb80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cb90 20 20 20 72 65 66 20 65 72 72 6f 72 29 29 0d 0a     ref error))..
2cba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cbb0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
2cbc0 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e         TraceOps.
2cbd0 53 68 6f 77 4d 65 73 73 61 67 65 28 54 72 61 63  ShowMessage(Trac
2cbe0 65 50 72 69 6f 72 69 74 79 2e 48 69 67 68 65 73  ePriority.Highes
2cbf0 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t,..            
2cc00 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75              debu
2cc10 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65  gCallback, trace
2cc20 43 61 6c 6c 62 61 63 6b 2c 20 74 68 69 73 41 73  Callback, thisAs
2cc30 73 65 6d 62 6c 79 2c 0d 0a 20 20 20 20 20 20 20  sembly,..       
2cc40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cc50 20 65 72 72 6f 72 2c 20 74 72 61 63 65 43 61 74   error, traceCat
2cc60 65 67 6f 72 79 2c 20 4d 65 73 73 61 67 65 42 6f  egory, MessageBo
2cc70 78 42 75 74 74 6f 6e 73 2e 4f 4b 2c 0d 0a 20 20  xButtons.OK,..  
2cc80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cc90 20 20 20 20 20 20 4d 65 73 73 61 67 65 42 6f 78        MessageBox
2cca0 49 63 6f 6e 2e 45 72 72 6f 72 29 3b 0d 0a 0d 0a  Icon.Error);....
2ccb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ccc0 20 20 20 20 72 65 74 75 72 6e 20 31 3b 20 2f 2a      return 1; /*
2ccd0 20 46 41 49 4c 55 52 45 20 2a 2f 0d 0a 20 20 20   FAILURE */..   
2cce0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
2ccf0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
2cd00 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72             #endr
2cd10 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
2cd20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
2cd30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2cd40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2cd50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2cd60 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
2cd70 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
2cd80 56 53 20 44 61 74 61 53 6f 75 72 63 65 0d 0a 20  VS DataSource.. 
2cd90 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 63             if (c
2cda0 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 48 61 73  onfiguration.Has
2cdb0 46 6c 61 67 73 28 49 6e 73 74 61 6c 6c 46 6c 61  Flags(InstallFla
2cdc0 67 73 2e 56 73 44 61 74 61 53 6f 75 72 63 65 2c  gs.VsDataSource,
2cdd0 20 74 72 75 65 29 29 0d 0a 20 20 20 20 20 20 20   true))..       
2cde0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2cdf0 20 20 20 20 20 20 20 20 69 66 20 28 21 46 6f 72          if (!For
2ce00 45 61 63 68 56 73 56 65 72 73 69 6f 6e 52 65 67  EachVsVersionReg
2ce10 69 73 74 72 79 28 0d 0a 20 20 20 20 20 20 20 20  istry(..        
2ce20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ce30 76 73 4c 69 73 74 2c 20 50 72 6f 63 65 73 73 56  vsList, ProcessV
2ce40 73 44 61 74 61 53 6f 75 72 63 65 2c 20 70 61 63  sDataSource, pac
2ce50 6b 61 67 65 2c 20 66 69 6c 65 4e 61 6d 65 50 61  kage, fileNamePa
2ce60 69 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ir,..           
2ce70 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
2ce80 66 69 67 75 72 61 74 69 6f 6e 2e 57 68 61 74 49  figuration.WhatI
2ce90 66 2c 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  f, configuration
2cea0 2e 56 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20  .Verbose,..     
2ceb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cec0 20 20 20 72 65 66 20 65 72 72 6f 72 29 29 0d 0a     ref error))..
2ced0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cee0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
2cef0 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e         TraceOps.
2cf00 53 68 6f 77 4d 65 73 73 61 67 65 28 54 72 61 63  ShowMessage(Trac
2cf10 65 50 72 69 6f 72 69 74 79 2e 48 69 67 68 65 73  ePriority.Highes
2cf20 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t,..            
2cf30 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62 75              debu
2cf40 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63 65  gCallback, trace
2cf50 43 61 6c 6c 62 61 63 6b 2c 20 74 68 69 73 41 73  Callback, thisAs
2cf60 73 65 6d 62 6c 79 2c 0d 0a 20 20 20 20 20 20 20  sembly,..       
2cf70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cf80 20 65 72 72 6f 72 2c 20 74 72 61 63 65 43 61 74   error, traceCat
2cf90 65 67 6f 72 79 2c 20 4d 65 73 73 61 67 65 42 6f  egory, MessageBo
2cfa0 78 42 75 74 74 6f 6e 73 2e 4f 4b 2c 0d 0a 20 20  xButtons.OK,..  
2cfb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cfc0 20 20 20 20 20 20 4d 65 73 73 61 67 65 42 6f 78        MessageBox
2cfd0 49 63 6f 6e 2e 45 72 72 6f 72 29 3b 0d 0a 0d 0a  Icon.Error);....
2cfe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cff0 20 20 20 20 72 65 74 75 72 6e 20 31 3b 20 2f 2a      return 1; /*
2d000 20 46 41 49 4c 55 52 45 20 2a 2f 0d 0a 20 20 20   FAILURE */..   
2d010 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
2d020 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
2d030 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72             #endr
2d040 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
2d050 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
2d060 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d070 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d080 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d090 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
2d0a0 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
2d0b0 56 53 20 44 61 74 61 50 72 6f 76 69 64 65 72 0d  VS DataProvider.
2d0c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
2d0d0 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 48  (configuration.H
2d0e0 61 73 46 6c 61 67 73 28 49 6e 73 74 61 6c 6c 46  asFlags(InstallF
2d0f0 6c 61 67 73 2e 56 73 44 61 74 61 50 72 6f 76 69  lags.VsDataProvi
2d100 64 65 72 2c 20 74 72 75 65 29 29 0d 0a 20 20 20  der, true))..   
2d110 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
2d120 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
2d130 21 46 6f 72 45 61 63 68 56 73 56 65 72 73 69 6f  !ForEachVsVersio
2d140 6e 52 65 67 69 73 74 72 79 28 0d 0a 20 20 20 20  nRegistry(..    
2d150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d160 20 20 20 20 76 73 4c 69 73 74 2c 20 50 72 6f 63      vsList, Proc
2d170 65 73 73 56 73 44 61 74 61 50 72 6f 76 69 64 65  essVsDataProvide
2d180 72 2c 20 70 61 63 6b 61 67 65 2c 20 66 69 6c 65  r, package, file
2d190 4e 61 6d 65 50 61 69 72 2c 0d 0a 20 20 20 20 20  NamePair,..     
2d1a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d1b0 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e     configuration
2d1c0 2e 57 68 61 74 49 66 2c 20 63 6f 6e 66 69 67 75  .WhatIf, configu
2d1d0 72 61 74 69 6f 6e 2e 56 65 72 62 6f 73 65 2c 0d  ration.Verbose,.
2d1e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2d1f0 20 20 20 20 20 20 20 20 20 72 65 66 20 65 72 72           ref err
2d200 6f 72 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  or))..          
2d210 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
2d220 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
2d230 63 65 4f 70 73 2e 53 68 6f 77 4d 65 73 73 61 67  ceOps.ShowMessag
2d240 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e  e(TracePriority.
2d250 48 69 67 68 65 73 74 2c 0d 0a 20 20 20 20 20 20  Highest,..      
2d260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d270 20 20 64 65 62 75 67 43 61 6c 6c 62 61 63 6b 2c    debugCallback,
2d280 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20   traceCallback, 
2d290 74 68 69 73 41 73 73 65 6d 62 6c 79 2c 0d 0a 20  thisAssembly,.. 
2d2a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d2b0 20 20 20 20 20 20 20 65 72 72 6f 72 2c 20 74 72         error, tr
2d2c0 61 63 65 43 61 74 65 67 6f 72 79 2c 20 4d 65 73  aceCategory, Mes
2d2d0 73 61 67 65 42 6f 78 42 75 74 74 6f 6e 73 2e 4f  sageBoxButtons.O
2d2e0 4b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  K,..            
2d2f0 20 20 20 20 20 20 20 20 20 20 20 20 4d 65 73 73              Mess
2d300 61 67 65 42 6f 78 49 63 6f 6e 2e 45 72 72 6f 72  ageBoxIcon.Error
2d310 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
2d320 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
2d330 20 31 3b 20 2f 2a 20 46 41 49 4c 55 52 45 20 2a   1; /* FAILURE *
2d340 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
2d350 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
2d360 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
2d370 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
2d380 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
2d390 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d3a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d3b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d3c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
2d3d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 72  ..            #r
2d3e0 65 67 69 6f 6e 20 4c 6f 67 20 53 75 6d 6d 61 72  egion Log Summar
2d3f0 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 54  y..            T
2d400 72 61 63 65 4f 70 73 2e 44 65 62 75 67 41 6e 64  raceOps.DebugAnd
2d410 54 72 61 63 65 28 54 72 61 63 65 50 72 69 6f 72  Trace(TracePrior
2d420 69 74 79 2e 48 69 67 68 65 72 2c 0d 0a 20 20 20  ity.Higher,..   
2d430 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65 62               deb
2d440 75 67 43 61 6c 6c 62 61 63 6b 2c 20 74 72 61 63  ugCallback, trac
2d450 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e  eCallback, Strin
2d460 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
2d470 20 20 20 20 20 20 20 20 20 20 20 22 73 75 62 4b             "subK
2d480 65 79 73 43 72 65 61 74 65 64 20 3d 20 7b 30 7d  eysCreated = {0}
2d490 2c 20 73 75 62 4b 65 79 73 44 65 6c 65 74 65 64  , subKeysDeleted
2d4a0 20 3d 20 7b 31 7d 2c 20 22 20 2b 0d 0a 20 20 20   = {1}, " +..   
2d4b0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 6b 65               "ke
2d4c0 79 56 61 6c 75 65 73 53 65 74 20 3d 20 7b 32 7d  yValuesSet = {2}
2d4d0 2c 20 6b 65 79 56 61 6c 75 65 73 44 65 6c 65 74  , keyValuesDelet
2d4e0 65 64 20 3d 20 7b 33 7d 22 2c 0d 0a 20 20 20 20  ed = {3}",..    
2d4f0 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44              ForD
2d500 69 73 70 6c 61 79 28 52 65 67 69 73 74 72 79 48  isplay(RegistryH
2d510 65 6c 70 65 72 2e 53 75 62 4b 65 79 73 43 72 65  elper.SubKeysCre
2d520 61 74 65 64 29 2c 0d 0a 20 20 20 20 20 20 20 20  ated),..        
2d530 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c          ForDispl
2d540 61 79 28 52 65 67 69 73 74 72 79 48 65 6c 70 65  ay(RegistryHelpe
2d550 72 2e 53 75 62 4b 65 79 73 44 65 6c 65 74 65 64  r.SubKeysDeleted
2d560 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
2d570 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 52      ForDisplay(R
2d580 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 4b 65  egistryHelper.Ke
2d590 79 56 61 6c 75 65 73 53 65 74 29 2c 0d 0a 20 20  yValuesSet),..  
2d5a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f                Fo
2d5b0 72 44 69 73 70 6c 61 79 28 52 65 67 69 73 74 72  rDisplay(Registr
2d5c0 79 48 65 6c 70 65 72 2e 4b 65 79 56 61 6c 75 65  yHelper.KeyValue
2d5d0 73 44 65 6c 65 74 65 64 29 29 2c 0d 0a 20 20 20  sDeleted)),..   
2d5e0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
2d5f0 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 20 20  ceCategory);..  
2d600 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65            #endre
2d610 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
2d620 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
2d630 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d640 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d650 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d660 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
2d670 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 30 3b         return 0;
2d680 20 2f 2a 20 53 55 43 43 45 53 53 20 2a 2f 0d 0a   /* SUCCESS */..
2d690 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
2d6a0 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 20     #endregion.. 
2d6b0 20 20 20 7d 0d 0a 20 20 20 20 23 65 6e 64 72 65     }..    #endre
2d6c0 67 69 6f 6e 0d 0a 7d 0d 0a                       gion..}..