System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact 4f6d31c0904ab6cbbf5301adde18663bf664c567:


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 66 61 75 6c 74  .        Default
0a60: 20 3d 20 4d 65 64 69 75 6d 0d 0a 20 20 20 20 7d   = Medium..    }
0a70: 0d 0a 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e  ..    #endregion
0a80: 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f  ....    ////////
0a90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0aa0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0ab0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0ac0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0ad0: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 23 72 65 67 69  ///....    #regi
0ae0: 6f 6e 20 49 6e 73 74 61 6c 6c 65 72 20 43 6c 61  on Installer Cla
0af0: 73 73 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ss..    internal
0b00: 20 73 74 61 74 69 63 20 63 6c 61 73 73 20 49 6e   static class In
0b10: 73 74 61 6c 6c 65 72 0d 0a 20 20 20 20 7b 0d 0a  staller..    {..
0b20: 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
0b30: 50 72 69 76 61 74 65 20 48 65 6c 70 65 72 20 43  Private Helper C
0b40: 6c 61 73 73 65 73 0d 0a 20 20 20 20 20 20 20 20  lasses..        
0b50: 23 72 65 67 69 6f 6e 20 41 6e 79 50 61 69 72 20  #region AnyPair 
0b60: 43 6c 61 73 73 0d 0a 20 20 20 20 20 20 20 20 70  Class..        p
0b70: 72 69 76 61 74 65 20 73 65 61 6c 65 64 20 63 6c  rivate sealed cl
0b80: 61 73 73 20 41 6e 79 50 61 69 72 3c 54 31 2c 20  ass AnyPair<T1, 
0b90: 54 32 3e 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  T2>..        {..
0ba0: 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67              #reg
0bb0: 69 6f 6e 20 50 75 62 6c 69 63 20 43 6f 6e 73 74  ion Public Const
0bc0: 72 75 63 74 6f 72 73 0d 0a 20 20 20 20 20 20 20  ructors..       
0bd0: 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
0be0: 20 20 20 20 20 2f 2f 20 57 41 52 4e 49 4e 47 3a       // WARNING:
0bf0: 20 54 68 69 73 20 63 6f 6e 73 74 72 75 63 74 6f   This constructo
0c00: 72 20 70 72 6f 64 75 63 65 73 20 61 6e 20 69 6d  r produces an im
0c10: 6d 75 74 61 62 6c 65 20 22 65 6d 70 74 79 22 20  mutable "empty" 
0c20: 70 61 69 72 0d 0a 20 20 20 20 20 20 20 20 20 20  pair..          
0c30: 20 20 2f 2f 20 20 20 20 20 20 20 20 20 20 6f 62    //          ob
0c40: 6a 65 63 74 2e 0d 0a 20 20 20 20 20 20 20 20 20  ject...         
0c50: 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
0c60: 20 20 20 70 75 62 6c 69 63 20 41 6e 79 50 61 69     public AnyPai
0c70: 72 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  r()..           
0c80: 20 20 20 20 20 3a 20 62 61 73 65 28 29 0d 0a 20       : base().. 
0c90: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
0ca0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
0cb0: 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20   do nothing...  
0cc0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
0cd0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
0ce0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0cf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0d00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0d10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
0d20: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
0d30: 62 6c 69 63 20 41 6e 79 50 61 69 72 28 54 31 20  blic AnyPair(T1 
0d40: 78 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  x)..            
0d50: 20 20 20 20 3a 20 74 68 69 73 28 29 0d 0a 20 20      : this()..  
0d60: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
0d70: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69               thi
0d80: 73 2e 78 20 3d 20 78 3b 0d 0a 20 20 20 20 20 20  s.x = x;..      
0d90: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
0da0: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
0db0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0dc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0dd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0de0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
0df0: 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
0e00: 20 41 6e 79 50 61 69 72 28 54 31 20 78 2c 20 54   AnyPair(T1 x, T
0e10: 32 20 79 29 0d 0a 20 20 20 20 20 20 20 20 20 20  2 y)..          
0e20: 20 20 20 20 20 20 3a 20 74 68 69 73 28 78 29 0d        : this(x).
0e30: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
0e40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0e50: 74 68 69 73 2e 79 20 3d 20 79 3b 0d 0a 20 20 20  this.y = y;..   
0e60: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
0e70: 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
0e80: 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  on....          
0e90: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
0ea0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0eb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0ec0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0ed0: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
0ee0: 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62       #region Pub
0ef0: 6c 69 63 20 50 72 6f 70 65 72 74 69 65 73 0d 0a  lic Properties..
0f00: 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
0f10: 61 74 65 20 54 31 20 78 3b 0d 0a 20 20 20 20 20  ate T1 x;..     
0f20: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 54 31         public T1
0f30: 20 58 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   X..            
0f40: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
0f50: 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20     get { return 
0f60: 78 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  x; }..          
0f70: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
0f80: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
0f90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0fa0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0fb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0fc0: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
0fd0: 20 20 20 20 20 20 70 72 69 76 61 74 65 20 54 32        private T2
0fe0: 20 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20   y;..           
0ff0: 20 70 75 62 6c 69 63 20 54 32 20 59 0d 0a 20 20   public T2 Y..  
1000: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1010: 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74               get
1020: 20 7b 20 72 65 74 75 72 6e 20 79 3b 20 7d 0d 0a   { return y; }..
1030: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
1040: 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72             #endr
1050: 65 67 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 7d  egion..        }
1060: 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65  ..        #endre
1070: 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
1080: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1090: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
10c0: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
10d0: 20 20 20 23 72 65 67 69 6f 6e 20 54 72 61 63 65     #region Trace
10e0: 4f 70 73 20 43 6c 61 73 73 0d 0a 20 20 20 20 20  Ops Class..     
10f0: 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
1100: 63 20 63 6c 61 73 73 20 54 72 61 63 65 4f 70 73  c class TraceOps
1110: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
1120: 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e           #region
1130: 20 50 72 69 76 61 74 65 20 43 6f 6e 73 74 61 6e   Private Constan
1140: 74 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ts..            
1150: 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20 73 74  private const st
1160: 72 69 6e 67 20 44 65 66 61 75 6c 74 54 72 61 63  ring DefaultTrac
1170: 65 46 6f 72 6d 61 74 20 3d 20 22 23 7b 30 7d 20  eFormat = "#{0} 
1180: 40 20 7b 31 7d 3a 20 7b 32 7d 22 3b 0d 0a 0d 0a  @ {1}: {2}";....
1190: 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
11a0: 61 74 65 20 63 6f 6e 73 74 20 73 74 72 69 6e 67  ate const string
11b0: 20 49 73 6f 38 36 30 31 44 61 74 65 54 69 6d 65   Iso8601DateTime
11c0: 4f 75 74 70 75 74 46 6f 72 6d 61 74 20 3d 0d 0a  OutputFormat =..
11d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11e0: 22 79 79 79 79 2e 4d 4d 2e 64 64 54 48 48 3a 6d  "yyyy.MM.ddTHH:m
11f0: 6d 3a 73 73 2e 66 66 66 66 66 66 66 22 3b 0d 0a  m:ss.fffffff";..
1200: 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64              #end
1210: 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
1220: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
1230: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1240: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1250: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1260: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
1270: 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e           #region
1280: 20 50 72 69 76 61 74 65 20 53 74 61 74 69 63 20   Private Static 
1290: 44 61 74 61 0d 0a 20 20 20 20 20 20 20 20 20 20  Data..          
12a0: 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
12b0: 20 6f 62 6a 65 63 74 20 73 79 6e 63 52 6f 6f 74   object syncRoot
12c0: 20 3d 20 6e 65 77 20 6f 62 6a 65 63 74 28 29 3b   = new object();
12d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
12e0: 69 76 61 74 65 20 73 74 61 74 69 63 20 6c 6f 6e  ivate static lon
12f0: 67 20 6e 65 78 74 49 64 3b 0d 0a 20 20 20 20 20  g nextId;..     
1300: 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
1310: 74 61 74 69 63 20 54 72 61 63 65 50 72 69 6f 72  tatic TracePrior
1320: 69 74 79 20 74 72 61 63 65 50 72 69 6f 72 69 74  ity tracePriorit
1330: 79 20 3d 20 54 72 61 63 65 50 72 69 6f 72 69 74  y = TracePriorit
1340: 79 2e 44 65 66 61 75 6c 74 3b 0d 0a 20 20 20 20  y.Default;..    
1350: 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
1360: 73 74 61 74 69 63 20 73 74 72 69 6e 67 20 74 72  static string tr
1370: 61 63 65 46 6f 72 6d 61 74 20 3d 20 44 65 66 61  aceFormat = Defa
1380: 75 6c 74 54 72 61 63 65 46 6f 72 6d 61 74 3b 0d  ultTraceFormat;.
1390: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e  .            #en
13a0: 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
13b0: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
13c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
1400: 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f            #regio
1410: 6e 20 50 75 62 6c 69 63 20 53 74 61 74 69 63 20  n Public Static 
1420: 50 72 6f 70 65 72 74 69 65 73 0d 0a 20 20 20 20  Properties..    
1430: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73          public s
1440: 74 61 74 69 63 20 54 72 61 63 65 50 72 69 6f 72  tatic TracePrior
1450: 69 74 79 20 54 72 61 63 65 50 72 69 6f 72 69 74  ity TracePriorit
1460: 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  y..            {
1470: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1480: 20 20 67 65 74 20 7b 20 6c 6f 63 6b 20 28 73 79    get { lock (sy
1490: 6e 63 52 6f 6f 74 29 20 7b 20 72 65 74 75 72 6e  ncRoot) { return
14a0: 20 74 72 61 63 65 50 72 69 6f 72 69 74 79 3b 20   tracePriority; 
14b0: 7d 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  } }..           
14c0: 20 20 20 20 20 73 65 74 20 7b 20 6c 6f 63 6b 20       set { lock 
14d0: 28 73 79 6e 63 52 6f 6f 74 29 20 7b 20 74 72 61  (syncRoot) { tra
14e0: 63 65 50 72 69 6f 72 69 74 79 20 3d 20 76 61 6c  cePriority = val
14f0: 75 65 3b 20 7d 20 7d 0d 0a 20 20 20 20 20 20 20  ue; } }..       
1500: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
1510: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
1520: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20  /////////....   
1560: 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
1570: 73 74 61 74 69 63 20 73 74 72 69 6e 67 20 54 72  static string Tr
1580: 61 63 65 46 6f 72 6d 61 74 0d 0a 20 20 20 20 20  aceFormat..     
1590: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
15a0: 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20            get { 
15b0: 6c 6f 63 6b 20 28 73 79 6e 63 52 6f 6f 74 29 20  lock (syncRoot) 
15c0: 7b 20 72 65 74 75 72 6e 20 74 72 61 63 65 46 6f  { return traceFo
15d0: 72 6d 61 74 3b 20 7d 20 7d 0d 0a 20 20 20 20 20  rmat; } }..     
15e0: 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b             set {
15f0: 20 6c 6f 63 6b 20 28 73 79 6e 63 52 6f 6f 74 29   lock (syncRoot)
1600: 20 7b 20 74 72 61 63 65 46 6f 72 6d 61 74 20 3d   { traceFormat =
1610: 20 76 61 6c 75 65 3b 20 7d 20 7d 0d 0a 20 20 20   value; } }..   
1620: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
1630: 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
1640: 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  on....          
1650: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
1660: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1670: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1680: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1690: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
16a0: 20 20 20 20 20 23 72 65 67 69 6f 6e 20 49 6e 74       #region Int
16b0: 65 72 61 63 74 69 76 65 20 53 75 70 70 6f 72 74  eractive Support
16c0: 20 4d 65 74 68 6f 64 73 0d 0a 20 20 20 20 20 20   Methods..      
16d0: 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61        public sta
16e0: 74 69 63 20 73 74 72 69 6e 67 20 47 65 74 41 73  tic string GetAs
16f0: 73 65 6d 62 6c 79 54 69 74 6c 65 28 0d 0a 20 20  semblyTitle(..  
1700: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 41 73                As
1710: 73 65 6d 62 6c 79 20 61 73 73 65 6d 62 6c 79 0d  sembly assembly.
1720: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1730: 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   )..            
1740: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
1750: 20 20 20 69 66 20 28 61 73 73 65 6d 62 6c 79 20     if (assembly 
1760: 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  != null)..      
1770: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1780: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1790: 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20   try..          
17a0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
17b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17c0: 20 20 20 20 20 69 66 20 28 61 73 73 65 6d 62 6c       if (assembl
17d0: 79 2e 49 73 44 65 66 69 6e 65 64 28 0d 0a 20 20  y.IsDefined(..  
17e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 79                ty
1800: 70 65 6f 66 28 41 73 73 65 6d 62 6c 79 54 69 74  peof(AssemblyTit
1810: 6c 65 41 74 74 72 69 62 75 74 65 29 2c 20 66 61  leAttribute), fa
1820: 6c 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20  lse))..         
1830: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
1840: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1850: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 41 73                As
1860: 73 65 6d 62 6c 79 54 69 74 6c 65 41 74 74 72 69  semblyTitleAttri
1870: 62 75 74 65 20 74 69 74 6c 65 20 3d 0d 0a 20 20  bute title =..  
1880: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1890: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 41                (A
18a0: 73 73 65 6d 62 6c 79 54 69 74 6c 65 41 74 74 72  ssemblyTitleAttr
18b0: 69 62 75 74 65 29 0d 0a 20 20 20 20 20 20 20 20  ibute)..        
18c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18d0: 20 20 20 20 20 20 20 20 61 73 73 65 6d 62 6c 79          assembly
18e0: 2e 47 65 74 43 75 73 74 6f 6d 41 74 74 72 69 62  .GetCustomAttrib
18f0: 75 74 65 73 28 0d 0a 20 20 20 20 20 20 20 20 20  utes(..         
1900: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1910: 20 20 20 20 20 20 20 20 20 20 20 74 79 70 65 6f             typeo
1920: 66 28 41 73 73 65 6d 62 6c 79 54 69 74 6c 65 41  f(AssemblyTitleA
1930: 74 74 72 69 62 75 74 65 29 2c 20 66 61 6c 73 65  ttribute), false
1940: 29 5b 30 5d 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  )[0];....       
1950: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1960: 20 20 20 20 20 72 65 74 75 72 6e 20 74 69 74 6c       return titl
1970: 65 2e 54 69 74 6c 65 3b 0d 0a 20 20 20 20 20 20  e.Title;..      
1980: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1990: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
19a0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
19b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19c0: 63 61 74 63 68 0d 0a 20 20 20 20 20 20 20 20 20  catch..         
19d0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
19e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19f0: 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68        // do noth
1a00: 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  ing...          
1a10: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
1a20: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
1a30: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1a40: 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a    return null;..
1a50: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
1a60: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
1a70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1aa0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ab0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1ac0: 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 44 69  public static Di
1ad0: 61 6c 6f 67 52 65 73 75 6c 74 20 53 68 6f 77 4d  alogResult ShowM
1ae0: 65 73 73 61 67 65 28 0d 0a 20 20 20 20 20 20 20  essage(..       
1af0: 20 20 20 20 20 20 20 20 20 54 72 61 63 65 50 72           TracePr
1b00: 69 6f 72 69 74 79 20 74 72 61 63 65 50 72 69 6f  iority tracePrio
1b10: 72 69 74 79 2c 0d 0a 20 20 20 20 20 20 20 20 20  rity,..         
1b20: 20 20 20 20 20 20 20 54 72 61 63 65 43 61 6c 6c         TraceCall
1b30: 62 61 63 6b 20 74 72 61 63 65 43 61 6c 6c 62 61  back traceCallba
1b40: 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ck,..           
1b50: 20 20 20 20 20 41 73 73 65 6d 62 6c 79 20 61 73       Assembly as
1b60: 73 65 6d 62 6c 79 2c 0d 0a 20 20 20 20 20 20 20  sembly,..       
1b70: 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
1b80: 6d 65 73 73 61 67 65 2c 0d 0a 20 20 20 20 20 20  message,..      
1b90: 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
1ba0: 20 63 61 74 65 67 6f 72 79 2c 0d 0a 20 20 20 20   category,..    
1bb0: 20 20 20 20 20 20 20 20 20 20 20 20 4d 65 73 73              Mess
1bc0: 61 67 65 42 6f 78 42 75 74 74 6f 6e 73 20 62 75  ageBoxButtons bu
1bd0: 74 74 6f 6e 73 2c 0d 0a 20 20 20 20 20 20 20 20  ttons,..        
1be0: 20 20 20 20 20 20 20 20 4d 65 73 73 61 67 65 42          MessageB
1bf0: 6f 78 49 63 6f 6e 20 69 63 6f 6e 0d 0a 20 20 20  oxIcon icon..   
1c00: 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a               )..
1c10: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
1c20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 44                 D
1c30: 69 61 6c 6f 67 52 65 73 75 6c 74 20 72 65 73 75  ialogResult resu
1c40: 6c 74 20 3d 20 44 69 61 6c 6f 67 52 65 73 75 6c  lt = DialogResul
1c50: 74 2e 4f 4b 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  t.OK;....       
1c60: 20 20 20 20 20 20 20 20 20 54 72 61 63 65 28 74           Trace(t
1c70: 72 61 63 65 50 72 69 6f 72 69 74 79 2c 20 74 72  racePriority, tr
1c80: 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 6d 65 73  aceCallback, mes
1c90: 73 61 67 65 2c 20 63 61 74 65 67 6f 72 79 29 3b  sage, category);
1ca0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1cb0: 20 20 20 20 69 66 20 28 53 79 73 74 65 6d 49 6e      if (SystemIn
1cc0: 66 6f 72 6d 61 74 69 6f 6e 2e 55 73 65 72 49 6e  formation.UserIn
1cd0: 74 65 72 61 63 74 69 76 65 29 0d 0a 20 20 20 20  teractive)..    
1ce0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
1cf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d00: 20 20 20 73 74 72 69 6e 67 20 74 69 74 6c 65 20     string title 
1d10: 3d 20 47 65 74 41 73 73 65 6d 62 6c 79 54 69 74  = GetAssemblyTit
1d20: 6c 65 28 61 73 73 65 6d 62 6c 79 29 3b 0d 0a 0d  le(assembly);...
1d30: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1d40: 20 20 20 20 20 69 66 20 28 74 69 74 6c 65 20 3d       if (title =
1d50: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
1d60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d70: 20 74 69 74 6c 65 20 3d 20 41 70 70 6c 69 63 61   title = Applica
1d80: 74 69 6f 6e 2e 50 72 6f 64 75 63 74 4e 61 6d 65  tion.ProductName
1d90: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
1da0: 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 20           result 
1db0: 3d 20 4d 65 73 73 61 67 65 42 6f 78 2e 53 68 6f  = MessageBox.Sho
1dc0: 77 28 6d 65 73 73 61 67 65 2c 20 74 69 74 6c 65  w(message, title
1dd0: 2c 20 62 75 74 74 6f 6e 73 2c 20 69 63 6f 6e 29  , buttons, icon)
1de0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
1df0: 20 20 20 20 20 20 20 20 20 54 72 61 63 65 28 74           Trace(t
1e00: 72 61 63 65 50 72 69 6f 72 69 74 79 2c 20 74 72  racePriority, tr
1e10: 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72  aceCallback, Str
1e20: 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
1e30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e40: 20 20 20 20 20 22 55 73 65 72 20 63 68 6f 69 63       "User choic
1e50: 65 20 6f 66 20 7b 30 7d 2e 22 2c 20 46 6f 72 44  e of {0}.", ForD
1e60: 69 73 70 6c 61 79 28 72 65 73 75 6c 74 29 29 2c  isplay(result)),
1e70: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1e80: 20 20 20 20 20 20 20 20 20 20 63 61 74 65 67 6f            catego
1e90: 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
1ea0: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
1eb0: 72 6e 20 72 65 73 75 6c 74 3b 0d 0a 20 20 20 20  rn result;..    
1ec0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
1ed0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1ee0: 20 54 72 61 63 65 28 74 72 61 63 65 50 72 69 6f   Trace(tracePrio
1ef0: 72 69 74 79 2c 20 74 72 61 63 65 43 61 6c 6c 62  rity, traceCallb
1f00: 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d  ack, String.Form
1f10: 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
1f20: 20 20 20 20 20 20 20 20 20 22 44 65 66 61 75 6c           "Defaul
1f30: 74 20 63 68 6f 69 63 65 20 6f 66 20 7b 30 7d 2e  t choice of {0}.
1f40: 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 72 65  ", ForDisplay(re
1f50: 73 75 6c 74 29 29 2c 0d 0a 20 20 20 20 20 20 20  sult)),..       
1f60: 20 20 20 20 20 20 20 20 20 20 20 20 20 63 61 74               cat
1f70: 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
1f80: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
1f90: 6e 20 72 65 73 75 6c 74 3b 0d 0a 20 20 20 20 20  n result;..     
1fa0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
1fb0: 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
1fc0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1fd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fe0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ff0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2000: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2010: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
2020: 20 20 20 23 72 65 67 69 6f 6e 20 54 72 61 63 69     #region Traci
2030: 6e 67 20 53 75 70 70 6f 72 74 20 4d 65 74 68 6f  ng Support Metho
2040: 64 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ds..            
2050: 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 6c 6f  public static lo
2060: 6e 67 20 4e 65 78 74 49 64 28 29 0d 0a 20 20 20  ng NextId()..   
2070: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
2080: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
2090: 72 6e 20 49 6e 74 65 72 6c 6f 63 6b 65 64 2e 49  rn Interlocked.I
20a0: 6e 63 72 65 6d 65 6e 74 28 72 65 66 20 6e 65 78  ncrement(ref nex
20b0: 74 49 64 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  tId);..         
20c0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
20d0: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
20e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2100: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2110: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
2120: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74         public st
2130: 61 74 69 63 20 73 74 72 69 6e 67 20 54 69 6d 65  atic string Time
2140: 53 74 61 6d 70 28 44 61 74 65 54 69 6d 65 20 64  Stamp(DateTime d
2150: 61 74 65 54 69 6d 65 29 0d 0a 20 20 20 20 20 20  ateTime)..      
2160: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
2170: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
2180: 64 61 74 65 54 69 6d 65 2e 54 6f 53 74 72 69 6e  dateTime.ToStrin
2190: 67 28 49 73 6f 38 36 30 31 44 61 74 65 54 69 6d  g(Iso8601DateTim
21a0: 65 4f 75 74 70 75 74 46 6f 72 6d 61 74 29 3b 0d  eOutputFormat);.
21b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
21c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
21d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2200: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2210: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
2220: 20 5b 4d 65 74 68 6f 64 49 6d 70 6c 28 4d 65 74   [MethodImpl(Met
2230: 68 6f 64 49 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e  hodImplOptions.N
2240: 6f 49 6e 6c 69 6e 69 6e 67 29 5d 0d 0a 20 20 20  oInlining)]..   
2250: 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
2260: 20 73 74 61 74 69 63 20 73 74 72 69 6e 67 20 47   static string G
2270: 65 74 4d 65 74 68 6f 64 4e 61 6d 65 28 0d 0a 20  etMethodName(.. 
2280: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53                 S
2290: 74 61 63 6b 54 72 61 63 65 20 73 74 61 63 6b 54  tackTrace stackT
22a0: 72 61 63 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  race,..         
22b0: 20 20 20 20 20 20 20 69 6e 74 20 6c 65 76 65 6c         int level
22c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
22d0: 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20    )..           
22e0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
22f0: 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20      try..       
2300: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
2310: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2320: 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
2330: 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a          // NOTE:
2340: 20 49 66 20 61 20 76 61 6c 69 64 20 73 74 61 63   If a valid stac
2350: 6b 20 74 72 61 63 65 20 77 61 73 20 6e 6f 74 20  k trace was not 
2360: 73 75 70 70 6c 69 65 64 20 62 79 20 74 68 65 0d  supplied by the.
2370: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2380: 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 63 61       //       ca
2390: 6c 6c 65 72 2c 20 63 72 65 61 74 65 20 6f 6e 65  ller, create one
23a0: 20 6e 6f 77 20 62 61 73 65 64 20 6f 6e 20 74 68   now based on th
23b0: 65 20 63 75 72 72 65 6e 74 0d 0a 20 20 20 20 20  e current..     
23c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
23d0: 2f 20 20 20 20 20 20 20 65 78 65 63 75 74 69 6f  /       executio
23e0: 6e 20 73 74 61 63 6b 2e 0d 0a 20 20 20 20 20 20  n stack...      
23f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
2400: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2410: 20 20 20 20 20 20 69 66 20 28 73 74 61 63 6b 54        if (stackT
2420: 72 61 63 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  race == null).. 
2430: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2440: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
2450: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
2460: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2470: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54            // NOT
2480: 45 3a 20 47 72 61 62 20 74 68 65 20 63 75 72 72  E: Grab the curr
2490: 65 6e 74 20 65 78 65 63 75 74 69 6f 6e 20 73 74  ent execution st
24a0: 61 63 6b 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  ack...          
24b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
24c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
24d0: 20 20 20 20 20 20 20 20 20 20 73 74 61 63 6b 54            stackT
24e0: 72 61 63 65 20 3d 20 6e 65 77 20 53 74 61 63 6b  race = new Stack
24f0: 54 72 61 63 65 28 29 3b 0d 0a 0d 0a 20 20 20 20  Trace();....    
2500: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2510: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
2520: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2530: 2f 2f 20 4e 4f 54 45 3a 20 41 6c 77 61 79 73 20  // NOTE: Always 
2540: 73 6b 69 70 20 74 68 69 73 20 63 61 6c 6c 20 66  skip this call f
2550: 72 61 6d 65 20 77 68 65 6e 20 77 65 20 63 61 70  rame when we cap
2560: 74 75 72 65 0d 0a 20 20 20 20 20 20 20 20 20 20  ture..          
2570: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
2580: 20 20 20 20 20 20 20 74 68 65 20 73 74 61 63 6b         the stack
2590: 20 74 72 61 63 65 2e 0d 0a 20 20 20 20 20 20 20   trace...       
25a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25b0: 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
25c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 6c 65 76               lev
25d0: 65 6c 2b 2b 3b 0d 0a 20 20 20 20 20 20 20 20 20  el++;..         
25e0: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
25f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2600: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
2610: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e              // N
2620: 4f 54 45 3a 20 47 65 74 20 74 68 65 20 73 70 65  OTE: Get the spe
2630: 63 69 66 69 65 64 20 73 74 61 63 6b 20 66 72 61  cified stack fra
2640: 6d 65 20 28 61 6c 77 61 79 73 20 61 64 64 20 6f  me (always add o
2650: 6e 65 20 74 6f 0d 0a 20 20 20 20 20 20 20 20 20  ne to..         
2660: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
2670: 20 20 20 20 73 6b 69 70 20 74 68 69 73 20 6d 65      skip this me
2680: 74 68 6f 64 29 2e 0d 0a 20 20 20 20 20 20 20 20  thod)...        
2690: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
26a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26b0: 20 20 20 20 53 74 61 63 6b 46 72 61 6d 65 20 73      StackFrame s
26c0: 74 61 63 6b 46 72 61 6d 65 20 3d 20 73 74 61 63  tackFrame = stac
26d0: 6b 54 72 61 63 65 2e 47 65 74 46 72 61 6d 65 28  kTrace.GetFrame(
26e0: 6c 65 76 65 6c 29 3b 0d 0a 0d 0a 20 20 20 20 20  level);....     
26f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
2700: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
2710: 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20         // NOTE: 
2720: 47 65 74 20 74 68 65 20 6d 65 74 68 6f 64 20 66  Get the method f
2730: 6f 72 20 74 68 65 20 73 74 61 63 6b 20 66 72 61  or the stack fra
2740: 6d 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me...           
2750: 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
2760: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2770: 20 4d 65 74 68 6f 64 42 61 73 65 20 6d 65 74 68   MethodBase meth
2780: 6f 64 42 61 73 65 20 3d 20 73 74 61 63 6b 46 72  odBase = stackFr
2790: 61 6d 65 2e 47 65 74 4d 65 74 68 6f 64 28 29 3b  ame.GetMethod();
27a0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
27b0: 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
27c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27d0: 2f 2f 20 4e 4f 54 45 3a 20 47 65 74 20 74 68 65  // NOTE: Get the
27e0: 20 74 79 70 65 20 66 6f 72 20 74 68 65 20 6d 65   type for the me
27f0: 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 20 20 20  thod...         
2800: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
2810: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2820: 20 20 20 54 79 70 65 20 74 79 70 65 20 3d 20 6d     Type type = m
2830: 65 74 68 6f 64 42 61 73 65 2e 44 65 63 6c 61 72  ethodBase.Declar
2840: 69 6e 67 54 79 70 65 3b 0d 0a 0d 0a 20 20 20 20  ingType;....    
2850: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2860: 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
2870: 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a          // NOTE:
2880: 20 47 65 74 20 74 68 65 20 6e 61 6d 65 20 6f 66   Get the name of
2890: 20 74 68 65 20 6d 65 74 68 6f 64 2e 0d 0a 20 20   the method...  
28a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28b0: 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
28c0: 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
28d0: 20 6e 61 6d 65 20 3d 20 6d 65 74 68 6f 64 42 61   name = methodBa
28e0: 73 65 2e 4e 61 6d 65 3b 0d 0a 0d 0a 20 20 20 20  se.Name;....    
28f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2900: 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
2910: 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a          // NOTE:
2920: 20 52 65 74 75 72 6e 20 74 68 65 20 70 72 6f 70   Return the prop
2930: 65 72 6c 79 20 66 6f 72 6d 61 74 74 65 64 20 72  erly formatted r
2940: 65 73 75 6c 74 2e 0d 0a 20 20 20 20 20 20 20 20  esult...        
2950: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
2960: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2970: 20 20 20 20 72 65 74 75 72 6e 20 53 74 72 69 6e      return Strin
2980: 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
2990: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29a0: 20 20 20 22 7b 30 7d 7b 31 7d 7b 32 7d 22 2c 20     "{0}{1}{2}", 
29b0: 74 79 70 65 2e 4e 61 6d 65 2c 20 54 79 70 65 2e  type.Name, Type.
29c0: 44 65 6c 69 6d 69 74 65 72 2c 20 6e 61 6d 65 29  Delimiter, name)
29d0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
29e0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
29f0: 20 20 20 20 20 20 63 61 74 63 68 0d 0a 20 20 20        catch..   
2a00: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
2a10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a20: 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e      // do nothin
2a30: 67 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  g...            
2a40: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
2a50: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
2a60: 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20  null;..         
2a70: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
2a80: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
2a90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2aa0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ab0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ac0: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
2ad0: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74         public st
2ae0: 61 74 69 63 20 76 6f 69 64 20 54 72 61 63 65 43  atic void TraceC
2af0: 6f 72 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ore(..          
2b00: 20 20 20 20 20 20 73 74 72 69 6e 67 20 6d 65 73        string mes
2b10: 73 61 67 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  sage,..         
2b20: 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 63 61         string ca
2b30: 74 65 67 6f 72 79 0d 0a 20 20 20 20 20 20 20 20  tegory..        
2b40: 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
2b50: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
2b60: 20 20 20 20 20 20 20 20 20 20 6c 6f 63 6b 20 28            lock (
2b70: 73 79 6e 63 52 6f 6f 74 29 0d 0a 20 20 20 20 20  syncRoot)..     
2b80: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
2b90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ba0: 20 20 53 79 73 74 65 6d 2e 44 69 61 67 6e 6f 73    System.Diagnos
2bb0: 74 69 63 73 2e 54 72 61 63 65 2e 57 72 69 74 65  tics.Trace.Write
2bc0: 4c 69 6e 65 28 6d 65 73 73 61 67 65 2c 20 63 61  Line(message, ca
2bd0: 74 65 67 6f 72 79 29 3b 0d 0a 20 20 20 20 20 20  tegory);..      
2be0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 79                Sy
2bf0: 73 74 65 6d 2e 44 69 61 67 6e 6f 73 74 69 63 73  stem.Diagnostics
2c00: 2e 54 72 61 63 65 2e 46 6c 75 73 68 28 29 3b 0d  .Trace.Flush();.
2c10: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2c20: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
2c30: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
2c40: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
2c50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2c80: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
2c90: 20 20 20 20 5b 4d 65 74 68 6f 64 49 6d 70 6c 28      [MethodImpl(
2ca0: 4d 65 74 68 6f 64 49 6d 70 6c 4f 70 74 69 6f 6e  MethodImplOption
2cb0: 73 2e 4e 6f 49 6e 6c 69 6e 69 6e 67 29 5d 0d 0a  s.NoInlining)]..
2cc0: 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
2cd0: 69 63 20 73 74 61 74 69 63 20 73 74 72 69 6e 67  ic static string
2ce0: 20 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20   Trace(..       
2cf0: 20 20 20 20 20 20 20 20 20 54 72 61 63 65 50 72           TracePr
2d00: 69 6f 72 69 74 79 20 74 72 61 63 65 50 72 69 6f  iority tracePrio
2d10: 72 69 74 79 2c 0d 0a 20 20 20 20 20 20 20 20 20  rity,..         
2d20: 20 20 20 20 20 20 20 54 72 61 63 65 43 61 6c 6c         TraceCall
2d30: 62 61 63 6b 20 74 72 61 63 65 43 61 6c 6c 62 61  back traceCallba
2d40: 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ck,..           
2d50: 20 20 20 20 20 45 78 63 65 70 74 69 6f 6e 20 65       Exception e
2d60: 78 63 65 70 74 69 6f 6e 2c 0d 0a 20 20 20 20 20  xception,..     
2d70: 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
2d80: 67 20 63 61 74 65 67 6f 72 79 0d 0a 20 20 20 20  g category..    
2d90: 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
2da0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
2db0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
2dc0: 20 28 65 78 63 65 70 74 69 6f 6e 20 21 3d 20 6e   (exception != n
2dd0: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
2de0: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
2df0: 20 54 72 61 63 65 28 74 72 61 63 65 50 72 69 6f   Trace(tracePrio
2e00: 72 69 74 79 2c 20 74 72 61 63 65 43 61 6c 6c 62  rity, traceCallb
2e10: 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ack,..          
2e20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 65                ne
2e30: 77 20 53 74 61 63 6b 54 72 61 63 65 28 65 78 63  w StackTrace(exc
2e40: 65 70 74 69 6f 6e 2c 20 74 72 75 65 29 2c 20 30  eption, true), 0
2e50: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
2e60: 20 20 20 20 20 20 20 20 20 20 20 65 78 63 65 70             excep
2e70: 74 69 6f 6e 2e 54 6f 53 74 72 69 6e 67 28 29 2c  tion.ToString(),
2e80: 20 63 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20   category);.... 
2e90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
2ea0: 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 20 20 20  eturn null;..   
2eb0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
2ec0: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
2ed0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ee0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ef0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
2f10: 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 4d 65  .            [Me
2f20: 74 68 6f 64 49 6d 70 6c 28 4d 65 74 68 6f 64 49  thodImpl(MethodI
2f30: 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e 6f 49 6e 6c  mplOptions.NoInl
2f40: 69 6e 69 6e 67 29 5d 0d 0a 20 20 20 20 20 20 20  ining)]..       
2f50: 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74       public stat
2f60: 69 63 20 73 74 72 69 6e 67 20 54 72 61 63 65 28  ic string Trace(
2f70: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2f80: 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 20    TracePriority 
2f90: 74 72 61 63 65 50 72 69 6f 72 69 74 79 2c 0d 0a  tracePriority,..
2fa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fb0: 54 72 61 63 65 43 61 6c 6c 62 61 63 6b 20 74 72  TraceCallback tr
2fc0: 61 63 65 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20  aceCallback,..  
2fd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
2fe0: 72 69 6e 67 20 6d 65 73 73 61 67 65 2c 0d 0a 20  ring message,.. 
2ff0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
3000: 74 72 69 6e 67 20 63 61 74 65 67 6f 72 79 0d 0a  tring category..
3010: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3020: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
3030: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
3040: 20 20 72 65 74 75 72 6e 20 54 72 61 63 65 28 0d    return Trace(.
3050: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
3060: 20 20 20 20 20 74 72 61 63 65 50 72 69 6f 72 69       tracePriori
3070: 74 79 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63  ty, traceCallbac
3080: 6b 2c 20 6e 75 6c 6c 2c 20 31 2c 20 6d 65 73 73  k, null, 1, mess
3090: 61 67 65 2c 20 63 61 74 65 67 6f 72 79 29 3b 0d  age, category);.
30a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
30b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
30c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
30f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3100: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
3110: 20 5b 4d 65 74 68 6f 64 49 6d 70 6c 28 4d 65 74   [MethodImpl(Met
3120: 68 6f 64 49 6d 70 6c 4f 70 74 69 6f 6e 73 2e 4e  hodImplOptions.N
3130: 6f 49 6e 6c 69 6e 69 6e 67 29 5d 0d 0a 20 20 20  oInlining)]..   
3140: 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
3150: 20 73 74 61 74 69 63 20 73 74 72 69 6e 67 20 54   static string T
3160: 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20  race(..         
3170: 20 20 20 20 20 20 20 54 72 61 63 65 50 72 69 6f         TracePrio
3180: 72 69 74 79 20 74 72 61 63 65 50 72 69 6f 72 69  rity tracePriori
3190: 74 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ty,..           
31a0: 20 20 20 20 20 54 72 61 63 65 43 61 6c 6c 62 61       TraceCallba
31b0: 63 6b 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b  ck traceCallback
31c0: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
31d0: 20 20 20 53 74 61 63 6b 54 72 61 63 65 20 73 74     StackTrace st
31e0: 61 63 6b 54 72 61 63 65 2c 0d 0a 20 20 20 20 20  ackTrace,..     
31f0: 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 6c             int l
3200: 65 76 65 6c 2c 0d 0a 20 20 20 20 20 20 20 20 20  evel,..         
3210: 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6d 65         string me
3220: 73 73 61 67 65 2c 0d 0a 20 20 20 20 20 20 20 20  ssage,..        
3230: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 63          string c
3240: 61 74 65 67 6f 72 79 0d 0a 20 20 20 20 20 20 20  ategory..       
3250: 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
3260: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
3270: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
3280: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
3290: 2f 20 4e 4f 54 45 3a 20 49 66 20 74 68 65 20 70  / NOTE: If the p
32a0: 72 69 6f 72 69 74 79 20 6f 66 20 74 68 69 73 20  riority of this 
32b0: 6d 65 73 73 61 67 65 20 69 73 20 6c 65 73 73 20  message is less 
32c0: 74 68 61 6e 20 77 68 61 74 0d 0a 20 20 20 20 20  than what..     
32d0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
32e0: 20 20 20 20 77 65 20 63 75 72 72 65 6e 74 6c 79      we currently
32f0: 20 63 61 72 65 20 61 62 6f 75 74 2c 20 6a 75 73   care about, jus
3300: 74 20 72 65 74 75 72 6e 20 6e 6f 77 2e 0d 0a 20  t return now... 
3310: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
3320: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
3330: 20 20 20 69 66 20 28 74 72 61 63 65 50 72 69 6f     if (tracePrio
3340: 72 69 74 79 20 3c 20 54 72 61 63 65 50 72 69 6f  rity < TracePrio
3350: 72 69 74 79 29 0d 0a 20 20 20 20 20 20 20 20 20  rity)..         
3360: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
3370: 6e 20 6d 65 73 73 61 67 65 3b 0d 0a 0d 0a 20 20  n message;....  
3380: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
3390: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
33a0: 20 20 2f 2f 20 4e 4f 54 45 3a 20 41 6c 77 61 79    // NOTE: Alway
33b0: 73 20 73 6b 69 70 20 74 68 69 73 20 63 61 6c 6c  s skip this call
33c0: 20 66 72 61 6d 65 20 69 66 20 74 68 65 20 73 74   frame if the st
33d0: 61 63 6b 20 74 72 61 63 65 20 69 73 0d 0a 20 20  ack trace is..  
33e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
33f0: 20 20 20 20 20 20 20 67 6f 69 6e 67 20 74 6f 20         going to 
3400: 62 65 20 63 61 70 74 75 72 65 64 20 62 79 20 47  be captured by G
3410: 65 74 4d 65 74 68 6f 64 4e 61 6d 65 2e 0d 0a 20  etMethodName... 
3420: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
3430: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
3440: 20 20 20 69 66 20 28 73 74 61 63 6b 54 72 61 63     if (stackTrac
3450: 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  e == null)..    
3460: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3470: 6c 65 76 65 6c 2b 2b 3b 0d 0a 0d 0a 20 20 20 20  level++;....    
3480: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
3490: 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 20 3d 3d  traceCallback ==
34a0: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
34b0: 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
34c0: 65 43 61 6c 6c 62 61 63 6b 20 3d 20 54 72 61 63  eCallback = Trac
34d0: 65 43 6f 72 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  eCore;....      
34e0: 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
34f0: 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46  allback(String.F
3500: 6f 72 6d 61 74 28 22 7b 30 7d 3a 20 7b 31 7d 22  ormat("{0}: {1}"
3510: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
3520: 20 20 20 20 20 20 20 47 65 74 4d 65 74 68 6f 64         GetMethod
3530: 4e 61 6d 65 28 73 74 61 63 6b 54 72 61 63 65 2c  Name(stackTrace,
3540: 20 6c 65 76 65 6c 29 2c 20 6d 65 73 73 61 67 65   level), message
3550: 29 2c 20 63 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  ), category);...
3560: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
3570: 20 72 65 74 75 72 6e 20 6d 65 73 73 61 67 65 3b   return message;
3580: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
3590: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e  .            #en
35a0: 64 72 65 67 69 6f 6e 0d 0a 20 20 20 20 20 20 20  dregion..       
35b0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64   }..        #end
35c0: 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
35d0: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
35e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3600: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3610: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
3620: 20 20 20 20 20 23 72 65 67 69 6f 6e 20 4d 6f 63       #region Moc
3630: 6b 52 65 67 69 73 74 72 79 4b 65 79 20 43 6c 61  kRegistryKey Cla
3640: 73 73 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  ss..        priv
3650: 61 74 65 20 73 65 61 6c 65 64 20 63 6c 61 73 73  ate sealed class
3660: 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79   MockRegistryKey
3670: 20 3a 20 49 44 69 73 70 6f 73 61 62 6c 65 0d 0a   : IDisposable..
3680: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
3690: 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50         #region P
36a0: 72 69 76 61 74 65 20 43 6f 6e 73 74 72 75 63 74  rivate Construct
36b0: 6f 72 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ors..           
36c0: 20 70 72 69 76 61 74 65 20 4d 6f 63 6b 52 65 67   private MockReg
36d0: 69 73 74 72 79 4b 65 79 28 29 0d 0a 20 20 20 20  istryKey()..    
36e0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
36f0: 20 20 20 20 20 20 20 20 20 20 20 77 68 61 74 49             whatI
3700: 66 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20  f = true;..     
3710: 20 20 20 20 20 20 20 20 20 20 20 72 65 61 64 4f             readO
3720: 6e 6c 79 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20  nly = true;..   
3730: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 61 66               saf
3740: 65 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20  e = true;..     
3750: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
3760: 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
3770: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
3780: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3790: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37c0: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
37d0: 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c 69     #region Publi
37e0: 63 20 43 6f 6e 73 74 72 75 63 74 6f 72 73 0d 0a  c Constructors..
37f0: 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
3800: 69 63 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b  ic MockRegistryK
3810: 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey(..           
3820: 20 20 20 20 20 52 65 67 69 73 74 72 79 4b 65 79       RegistryKey
3830: 20 6b 65 79 0d 0a 20 20 20 20 20 20 20 20 20 20   key..          
3840: 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
3850: 20 20 20 20 20 20 20 20 20 3a 20 74 68 69 73 28           : this(
3860: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
3870: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
3880: 20 20 74 68 69 73 2e 6b 65 79 20 3d 20 6b 65 79    this.key = key
3890: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
38a0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
38b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
38c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
38d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
38e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
38f0: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
3900: 20 20 20 70 75 62 6c 69 63 20 4d 6f 63 6b 52 65     public MockRe
3910: 67 69 73 74 72 79 4b 65 79 28 0d 0a 20 20 20 20  gistryKey(..    
3920: 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69              Regi
3930: 73 74 72 79 4b 65 79 20 6b 65 79 2c 0d 0a 20 20  stryKey key,..  
3940: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
3950: 72 69 6e 67 20 73 75 62 4b 65 79 4e 61 6d 65 0d  ring subKeyName.
3960: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
3970: 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   )..            
3980: 20 20 20 20 3a 20 74 68 69 73 28 6b 65 79 29 0d      : this(key).
3990: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
39a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
39b0: 74 68 69 73 2e 73 75 62 4b 65 79 4e 61 6d 65 20  this.subKeyName 
39c0: 3d 20 73 75 62 4b 65 79 4e 61 6d 65 3b 0d 0a 20  = subKeyName;.. 
39d0: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
39e0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
39f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3a00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3a10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3a20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
3a30: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
3a40: 75 62 6c 69 63 20 4d 6f 63 6b 52 65 67 69 73 74  ublic MockRegist
3a50: 72 79 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20  ryKey(..        
3a60: 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79          Registry
3a70: 4b 65 79 20 6b 65 79 2c 0d 0a 20 20 20 20 20 20  Key key,..      
3a80: 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
3a90: 20 73 75 62 4b 65 79 4e 61 6d 65 2c 0d 0a 20 20   subKeyName,..  
3aa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
3ab0: 6f 6c 20 77 68 61 74 49 66 0d 0a 20 20 20 20 20  ol whatIf..     
3ac0: 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
3ad0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3a 20                : 
3ae0: 74 68 69 73 28 6b 65 79 2c 20 73 75 62 4b 65 79  this(key, subKey
3af0: 4e 61 6d 65 29 0d 0a 20 20 20 20 20 20 20 20 20  Name)..         
3b00: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
3b10: 20 20 20 20 20 20 74 68 69 73 2e 77 68 61 74 49        this.whatI
3b20: 66 20 3d 20 77 68 61 74 49 66 3b 0d 0a 20 20 20  f = whatIf;..   
3b30: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
3b40: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
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 0d 0a 0d  /////////////...
3b90: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
3ba0: 6c 69 63 20 4d 6f 63 6b 52 65 67 69 73 74 72 79  lic MockRegistry
3bb0: 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  Key(..          
3bc0: 20 20 20 20 20 20 52 65 67 69 73 74 72 79 4b 65        RegistryKe
3bd0: 79 20 6b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20  y key,..        
3be0: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 73          string s
3bf0: 75 62 4b 65 79 4e 61 6d 65 2c 0d 0a 20 20 20 20  ubKeyName,..    
3c00: 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
3c10: 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20   whatIf,..      
3c20: 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 72            bool r
3c30: 65 61 64 4f 6e 6c 79 0d 0a 20 20 20 20 20 20 20  eadOnly..       
3c40: 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
3c50: 20 20 20 20 20 20 20 20 20 20 20 20 3a 20 74 68              : th
3c60: 69 73 28 6b 65 79 2c 20 73 75 62 4b 65 79 4e 61  is(key, subKeyNa
3c70: 6d 65 2c 20 77 68 61 74 49 66 29 0d 0a 20 20 20  me, whatIf)..   
3c80: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
3c90: 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73              this
3ca0: 2e 72 65 61 64 4f 6e 6c 79 20 3d 20 72 65 61 64  .readOnly = read
3cb0: 4f 6e 6c 79 3b 0d 0a 20 20 20 20 20 20 20 20 20  Only;..         
3cc0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
3cd0: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
3ce0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3cf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3d00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3d10: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
3d20: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 4d 6f         public Mo
3d30: 63 6b 52 65 67 69 73 74 72 79 4b 65 79 28 0d 0a  ckRegistryKey(..
3d40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3d50: 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65 79 2c  RegistryKey key,
3d60: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
3d70: 20 20 73 74 72 69 6e 67 20 73 75 62 4b 65 79 4e    string subKeyN
3d80: 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ame,..          
3d90: 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49        bool whatI
3da0: 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f,..            
3db0: 20 20 20 20 62 6f 6f 6c 20 72 65 61 64 4f 6e 6c      bool readOnl
3dc0: 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y,..            
3dd0: 20 20 20 20 62 6f 6f 6c 20 73 61 66 65 0d 0a 20      bool safe.. 
3de0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29                 )
3df0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
3e00: 20 20 3a 20 74 68 69 73 28 6b 65 79 2c 20 73 75    : this(key, su
3e10: 62 4b 65 79 4e 61 6d 65 2c 20 77 68 61 74 49 66  bKeyName, whatIf
3e20: 2c 20 72 65 61 64 4f 6e 6c 79 29 0d 0a 20 20 20  , readOnly)..   
3e30: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
3e40: 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73              this
3e50: 2e 73 61 66 65 20 3d 20 73 61 66 65 3b 0d 0a 20  .safe = safe;.. 
3e60: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
3e70: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
3e80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3e90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3ea0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3eb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
3ec0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
3ed0: 75 62 6c 69 63 20 4d 6f 63 6b 52 65 67 69 73 74  ublic MockRegist
3ee0: 72 79 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20  ryKey(..        
3ef0: 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79          Registry
3f00: 4b 65 79 20 6b 65 79 2c 0d 0a 20 20 20 20 20 20  Key key,..      
3f10: 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77            bool w
3f20: 68 61 74 49 66 0d 0a 20 20 20 20 20 20 20 20 20  hatIf..         
3f30: 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
3f40: 20 20 20 20 20 20 20 20 20 20 3a 20 74 68 69 73            : this
3f50: 28 6b 65 79 2c 20 6e 75 6c 6c 2c 20 77 68 61 74  (key, null, what
3f60: 49 66 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  If)..           
3f70: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
3f80: 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e      // do nothin
3f90: 67 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  g...            
3fa0: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
3fb0: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
3fc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3fd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3fe0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3ff0: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
4000: 20 20 20 20 70 75 62 6c 69 63 20 4d 6f 63 6b 52      public MockR
4010: 65 67 69 73 74 72 79 4b 65 79 28 0d 0a 20 20 20  egistryKey(..   
4020: 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67               Reg
4030: 69 73 74 72 79 4b 65 79 20 6b 65 79 2c 0d 0a 20  istryKey key,.. 
4040: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
4050: 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20  ool whatIf,..   
4060: 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
4070: 6c 20 72 65 61 64 4f 6e 6c 79 0d 0a 20 20 20 20  l readOnly..    
4080: 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
4090: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3a                 :
40a0: 20 74 68 69 73 28 6b 65 79 2c 20 6e 75 6c 6c 2c   this(key, null,
40b0: 20 77 68 61 74 49 66 2c 20 72 65 61 64 4f 6e 6c   whatIf, readOnl
40c0: 79 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y)..            
40d0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
40e0: 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67     // do nothing
40f0: 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ...            }
4100: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
4110: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4120: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4130: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4140: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4150: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
4160: 20 20 20 70 75 62 6c 69 63 20 4d 6f 63 6b 52 65     public MockRe
4170: 67 69 73 74 72 79 4b 65 79 28 0d 0a 20 20 20 20  gistryKey(..    
4180: 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69              Regi
4190: 73 74 72 79 4b 65 79 20 6b 65 79 2c 0d 0a 20 20  stryKey key,..  
41a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
41b0: 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20  ol whatIf,..    
41c0: 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
41d0: 20 72 65 61 64 4f 6e 6c 79 2c 0d 0a 20 20 20 20   readOnly,..    
41e0: 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
41f0: 20 73 61 66 65 0d 0a 20 20 20 20 20 20 20 20 20   safe..         
4200: 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
4210: 20 20 20 20 20 20 20 20 20 20 3a 20 74 68 69 73            : this
4220: 28 6b 65 79 2c 20 6e 75 6c 6c 2c 20 77 68 61 74  (key, null, what
4230: 49 66 2c 20 72 65 61 64 4f 6e 6c 79 2c 20 73 61  If, readOnly, sa
4240: 66 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  fe)..           
4250: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
4260: 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e      // do nothin
4270: 67 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  g...            
4280: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  }..            #
4290: 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
42a0: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
42b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
42c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
42d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
42e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
42f0: 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67              #reg
4300: 69 6f 6e 20 50 75 62 6c 69 63 20 4d 65 74 68 6f  ion Public Metho
4310: 64 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ds..            
4320: 70 75 62 6c 69 63 20 76 6f 69 64 20 43 6c 6f 73  public void Clos
4330: 65 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e()..           
4340: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
4350: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
4360: 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a          // NOTE:
4370: 20 4e 6f 20 64 69 73 70 6f 73 65 64 20 63 68 65   No disposed che
4380: 63 6b 20 68 65 72 65 20 62 65 63 61 75 73 65 20  ck here because 
4390: 63 61 6c 6c 69 6e 67 20 74 68 69 73 20 6d 65 74  calling this met
43a0: 68 6f 64 0d 0a 20 20 20 20 20 20 20 20 20 20 20  hod..           
43b0: 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 73 68       //       sh
43c0: 6f 75 6c 64 20 62 65 20 6a 75 73 74 20 6c 69 6b  ould be just lik
43d0: 65 20 63 61 6c 6c 69 6e 67 20 44 69 73 70 6f 73  e calling Dispos
43e0: 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e...            
43f0: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
4400: 20 20 20 20 20 20 20 20 44 69 73 70 6f 73 65 28          Dispose(
4410: 74 72 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  true);..        
4420: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
4430: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
4440: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4450: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4460: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4470: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
4480: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 4d          public M
4490: 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 43  ockRegistryKey C
44a0: 72 65 61 74 65 53 75 62 4b 65 79 28 0d 0a 20 20  reateSubKey(..  
44b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
44c0: 72 69 6e 67 20 73 75 62 4b 65 79 4e 61 6d 65 0d  ring subKeyName.
44d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
44e0: 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   )..            
44f0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
4500: 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64     CheckDisposed
4510: 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ();..           
4520: 20 20 20 20 20 43 68 65 63 6b 52 65 61 64 4f 6e       CheckReadOn
4530: 6c 79 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ly();....       
4540: 20 20 20 20 20 20 20 20 20 69 66 20 28 6b 65 79           if (key
4550: 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
4560: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
4570: 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20  eturn null;.... 
4580: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
4590: 66 20 28 77 68 61 74 49 66 29 0d 0a 20 20 20 20  f (whatIf)..    
45a0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
45b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
45c0: 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
45d0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 48 41             // HA
45e0: 43 4b 3a 20 41 74 74 65 6d 70 74 20 74 6f 20 6f  CK: Attempt to o
45f0: 70 65 6e 20 74 68 65 20 73 70 65 63 69 66 69 65  pen the specifie
4600: 64 20 73 75 62 2d 6b 65 79 2e 20 20 49 66 20 74  d sub-key.  If t
4610: 68 69 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20  his..           
4620: 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
4630: 20 20 66 61 69 6c 73 2c 20 77 65 20 77 69 6c 6c    fails, we will
4640: 20 73 69 6d 70 6c 79 20 72 65 74 75 72 6e 20 74   simply return t
4650: 68 65 20 77 72 61 70 70 65 64 20 72 6f 6f 74 20  he wrapped root 
4660: 6b 65 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20  key..           
4670: 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
4680: 20 20 69 74 73 65 6c 66 20 73 69 6e 63 65 20 6e    itself since n
4690: 6f 20 77 72 69 74 65 73 20 61 72 65 20 61 6c 6c  o writes are all
46a0: 6f 77 65 64 20 69 6e 20 27 77 68 61 74 2d 69 66  owed in 'what-if
46b0: 27 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  '..             
46c0: 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
46d0: 6d 6f 64 65 20 61 6e 79 68 6f 77 2e 0d 0a 20 20  mode anyhow...  
46e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
46f0: 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
4700: 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74            Regist
4710: 72 79 4b 65 79 20 73 75 62 4b 65 79 20 3d 20 6b  ryKey subKey = k
4720: 65 79 2e 4f 70 65 6e 53 75 62 4b 65 79 28 73 75  ey.OpenSubKey(su
4730: 62 4b 65 79 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20  bKeyName);....  
4740: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4750: 20 20 72 65 74 75 72 6e 20 28 73 75 62 4b 65 79    return (subKey
4760: 20 21 3d 20 6e 75 6c 6c 29 20 3f 0d 0a 20 20 20   != null) ?..   
4770: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4780: 20 20 20 20 20 6e 65 77 20 4d 6f 63 6b 52 65 67       new MockReg
4790: 69 73 74 72 79 4b 65 79 28 0d 0a 20 20 20 20 20  istryKey(..     
47a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
47b0: 20 20 20 20 20 20 20 20 20 20 20 73 75 62 4b 65             subKe
47c0: 79 2c 20 77 68 61 74 49 66 2c 20 72 65 61 64 4f  y, whatIf, readO
47d0: 6e 6c 79 2c 20 73 61 66 65 29 20 3a 0d 0a 20 20  nly, safe) :..  
47e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
47f0: 20 20 20 20 20 20 6e 65 77 20 4d 6f 63 6b 52 65        new MockRe
4800: 67 69 73 74 72 79 4b 65 79 28 0d 0a 20 20 20 20  gistryKey(..    
4810: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4820: 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 2c              key,
4830: 20 73 75 62 4b 65 79 4e 61 6d 65 2c 20 77 68 61   subKeyName, wha
4840: 74 49 66 2c 20 72 65 61 64 4f 6e 6c 79 2c 20 73  tIf, readOnly, s
4850: 61 66 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  afe);..         
4860: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
4870: 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a            else..
4880: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4890: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
48a0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 65         return ne
48b0: 77 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65  w MockRegistryKe
48c0: 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
48d0: 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 2e              key.
48e0: 43 72 65 61 74 65 53 75 62 4b 65 79 28 73 75 62  CreateSubKey(sub
48f0: 4b 65 79 4e 61 6d 65 29 2c 20 77 68 61 74 49 66  KeyName), whatIf
4900: 2c 20 72 65 61 64 4f 6e 6c 79 2c 20 73 61 66 65  , readOnly, safe
4910: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
4920: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
4930: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
4940: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
4950: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4960: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4970: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4980: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
4990: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 76 6f         public vo
49a0: 69 64 20 44 65 6c 65 74 65 53 75 62 4b 65 79 28  id DeleteSubKey(
49b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
49c0: 20 20 73 74 72 69 6e 67 20 73 75 62 4b 65 79 4e    string subKeyN
49d0: 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ame..           
49e0: 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
49f0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
4a00: 20 20 20 20 20 20 20 43 68 65 63 6b 44 69 73 70         CheckDisp
4a10: 6f 73 65 64 28 29 3b 0d 0a 20 20 20 20 20 20 20  osed();..       
4a20: 20 20 20 20 20 20 20 20 20 43 68 65 63 6b 52 65           CheckRe
4a30: 61 64 4f 6e 6c 79 28 29 3b 0d 0a 0d 0a 20 20 20  adOnly();....   
4a40: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
4a50: 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  (key == null).. 
4a60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4a70: 20 20 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20     return;....  
4a80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
4a90: 20 28 21 77 68 61 74 49 66 29 0d 0a 20 20 20 20   (!whatIf)..    
4aa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4ab0: 6b 65 79 2e 44 65 6c 65 74 65 53 75 62 4b 65 79  key.DeleteSubKey
4ac0: 28 73 75 62 4b 65 79 4e 61 6d 65 29 3b 0d 0a 20  (subKeyName);.. 
4ad0: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
4ae0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
4af0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4b00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4b10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4b20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
4b30: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
4b40: 75 62 6c 69 63 20 76 6f 69 64 20 44 65 6c 65 74  ublic void Delet
4b50: 65 53 75 62 4b 65 79 54 72 65 65 28 0d 0a 20 20  eSubKeyTree(..  
4b60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
4b70: 72 69 6e 67 20 73 75 62 4b 65 79 4e 61 6d 65 0d  ring subKeyName.
4b80: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
4b90: 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   )..            
4ba0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
4bb0: 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64     CheckDisposed
4bc0: 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ();..           
4bd0: 20 20 20 20 20 43 68 65 63 6b 52 65 61 64 4f 6e       CheckReadOn
4be0: 6c 79 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ly();....       
4bf0: 20 20 20 20 20 20 20 20 20 69 66 20 28 6b 65 79           if (key
4c00: 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
4c10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
4c20: 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20  eturn;....      
4c30: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21 77            if (!w
4c40: 68 61 74 49 66 29 0d 0a 20 20 20 20 20 20 20 20  hatIf)..        
4c50: 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 2e              key.
4c60: 44 65 6c 65 74 65 53 75 62 4b 65 79 54 72 65 65  DeleteSubKeyTree
4c70: 28 73 75 62 4b 65 79 4e 61 6d 65 29 3b 0d 0a 20  (subKeyName);.. 
4c80: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
4c90: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
4ca0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4cb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4cc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4cd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
4ce0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
4cf0: 75 62 6c 69 63 20 76 6f 69 64 20 44 65 6c 65 74  ublic void Delet
4d00: 65 56 61 6c 75 65 28 0d 0a 20 20 20 20 20 20 20  eValue(..       
4d10: 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
4d20: 6e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 20  name..          
4d30: 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
4d40: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
4d50: 20 20 20 20 20 20 20 20 43 68 65 63 6b 44 69 73          CheckDis
4d60: 70 6f 73 65 64 28 29 3b 0d 0a 20 20 20 20 20 20  posed();..      
4d70: 20 20 20 20 20 20 20 20 20 20 43 68 65 63 6b 52            CheckR
4d80: 65 61 64 4f 6e 6c 79 28 29 3b 0d 0a 0d 0a 20 20  eadOnly();....  
4d90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
4da0: 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a   (key == null)..
4db0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4dc0: 20 20 20 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20      return;.... 
4dd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
4de0: 66 20 28 21 77 68 61 74 49 66 29 0d 0a 20 20 20  f (!whatIf)..   
4df0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4e00: 20 6b 65 79 2e 44 65 6c 65 74 65 56 61 6c 75 65   key.DeleteValue
4e10: 28 6e 61 6d 65 29 3b 0d 0a 20 20 20 20 20 20 20  (name);..       
4e20: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
4e30: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
4e40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4e50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4e60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4e70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
4e80: 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
4e90: 73 74 72 69 6e 67 5b 5d 20 47 65 74 53 75 62 4b  string[] GetSubK
4ea0: 65 79 4e 61 6d 65 73 28 29 0d 0a 20 20 20 20 20  eyNames()..     
4eb0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
4ec0: 20 20 20 20 20 20 20 20 20 20 43 68 65 63 6b 44            CheckD
4ed0: 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20  isposed();....  
4ee0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
4ef0: 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a   (key == null)..
4f00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4f10: 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b      return null;
4f20: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
4f30: 20 20 20 20 72 65 74 75 72 6e 20 6b 65 79 2e 47      return key.G
4f40: 65 74 53 75 62 4b 65 79 4e 61 6d 65 73 28 29 3b  etSubKeyNames();
4f50: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
4f60: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
4f70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4f80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4f90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4fa0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4fb0: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
4fc0: 20 20 70 75 62 6c 69 63 20 6f 62 6a 65 63 74 20    public object 
4fd0: 47 65 74 56 61 6c 75 65 28 0d 0a 20 20 20 20 20  GetValue(..     
4fe0: 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
4ff0: 67 20 6e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20  g name,..       
5000: 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20           object 
5010: 64 65 66 61 75 6c 74 56 61 6c 75 65 0d 0a 20 20  defaultValue..  
5020: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d                ).
5030: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
5040: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5050: 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b  CheckDisposed();
5060: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
5070: 20 20 20 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e      if (key == n
5080: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
5090: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
50a0: 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20   null;....      
50b0: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
50c0: 20 6b 65 79 2e 47 65 74 56 61 6c 75 65 28 6e 61   key.GetValue(na
50d0: 6d 65 2c 20 64 65 66 61 75 6c 74 56 61 6c 75 65  me, defaultValue
50e0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
50f0: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
5100: 20 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
5150: 20 20 20 20 70 75 62 6c 69 63 20 4d 6f 63 6b 52      public MockR
5160: 65 67 69 73 74 72 79 4b 65 79 20 4f 70 65 6e 53  egistryKey OpenS
5170: 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20  ubKey(..        
5180: 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 73          string s
5190: 75 62 4b 65 79 4e 61 6d 65 0d 0a 20 20 20 20 20  ubKeyName..     
51a0: 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
51b0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
51c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 43 68 65               Che
51d0: 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d  ckDisposed();...
51e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
51f0: 20 72 65 74 75 72 6e 20 4f 70 65 6e 53 75 62 4b   return OpenSubK
5200: 65 79 28 73 75 62 4b 65 79 4e 61 6d 65 2c 20 66  ey(subKeyName, f
5210: 61 6c 73 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  alse);..        
5220: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
5230: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
5240: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5250: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5260: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5270: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
5280: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 4d          public M
5290: 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 4f  ockRegistryKey O
52a0: 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20  penSubKey(..    
52b0: 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
52c0: 6e 67 20 73 75 62 4b 65 79 4e 61 6d 65 2c 0d 0a  ng subKeyName,..
52d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
52e0: 62 6f 6f 6c 20 77 72 69 74 61 62 6c 65 0d 0a 20  bool writable.. 
52f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29                 )
5300: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
5310: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
5320: 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29   CheckDisposed()
5330: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
5340: 20 20 20 20 20 69 66 20 28 77 72 69 74 61 62 6c       if (writabl
5350: 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e)..            
5360: 20 20 20 20 20 20 20 20 43 68 65 63 6b 52 65 61          CheckRea
5370: 64 4f 6e 6c 79 28 29 3b 0d 0a 0d 0a 20 20 20 20  dOnly();....    
5380: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
5390: 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  key == null)..  
53a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
53b0: 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a    return null;..
53c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
53d0: 20 20 52 65 67 69 73 74 72 79 4b 65 79 20 73 75    RegistryKey su
53e0: 62 4b 65 79 20 3d 20 6b 65 79 2e 4f 70 65 6e 53  bKey = key.OpenS
53f0: 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20  ubKey(..        
5400: 20 20 20 20 20 20 20 20 20 20 20 20 73 75 62 4b              subK
5410: 65 79 4e 61 6d 65 2c 20 77 68 61 74 49 66 20 3f  eyName, whatIf ?
5420: 20 66 61 6c 73 65 20 3a 20 77 72 69 74 61 62 6c   false : writabl
5430: 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
5440: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 28 73         return (s
5450: 75 62 4b 65 79 20 21 3d 20 6e 75 6c 6c 29 20 3f  ubKey != null) ?
5460: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
5470: 20 20 20 20 20 20 6e 65 77 20 4d 6f 63 6b 52 65        new MockRe
5480: 67 69 73 74 72 79 4b 65 79 28 73 75 62 4b 65 79  gistryKey(subKey
5490: 2c 20 77 68 61 74 49 66 2c 20 72 65 61 64 4f 6e  , whatIf, readOn
54a0: 6c 79 2c 20 73 61 66 65 29 20 3a 20 6e 75 6c 6c  ly, safe) : null
54b0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
54c0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
54d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
54e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
54f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5500: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5510: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
5520: 20 20 20 70 75 62 6c 69 63 20 76 6f 69 64 20 53     public void S
5530: 65 74 56 61 6c 75 65 28 0d 0a 20 20 20 20 20 20  etValue(..      
5540: 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
5550: 20 6e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20   name,..        
5560: 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 76          object v
5570: 61 6c 75 65 0d 0a 20 20 20 20 20 20 20 20 20 20  alue..          
5580: 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
5590: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
55a0: 20 20 20 20 20 20 20 20 43 68 65 63 6b 44 69 73          CheckDis
55b0: 70 6f 73 65 64 28 29 3b 0d 0a 20 20 20 20 20 20  posed();..      
55c0: 20 20 20 20 20 20 20 20 20 20 43 68 65 63 6b 52            CheckR
55d0: 65 61 64 4f 6e 6c 79 28 29 3b 0d 0a 0d 0a 20 20  eadOnly();....  
55e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
55f0: 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a   (key == null)..
5600: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5610: 20 20 20 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20      return;.... 
5620: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
5630: 66 20 28 21 77 68 61 74 49 66 29 0d 0a 20 20 20  f (!whatIf)..   
5640: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5650: 20 6b 65 79 2e 53 65 74 56 61 6c 75 65 28 6e 61   key.SetValue(na
5660: 6d 65 2c 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20  me, value);..   
5670: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
5680: 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
5690: 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  on....          
56a0: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
56b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
56c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
56d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
56e0: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
56f0: 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62       #region Pub
5700: 6c 69 63 20 50 72 6f 70 65 72 74 69 65 73 0d 0a  lic Properties..
5710: 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
5720: 69 63 20 73 74 72 69 6e 67 20 4e 61 6d 65 0d 0a  ic string Name..
5730: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
5740: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67                 g
5750: 65 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  et..            
5760: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
5770: 20 20 20 20 20 20 20 20 20 20 20 43 68 65 63 6b             Check
5780: 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20  Disposed();.... 
5790: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
57a0: 20 20 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75     if (key == nu
57b0: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
57c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
57d0: 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20  urn null;....   
57e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
57f0: 20 72 65 74 75 72 6e 20 21 53 74 72 69 6e 67 2e   return !String.
5800: 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 73 75  IsNullOrEmpty(su
5810: 62 4b 65 79 4e 61 6d 65 29 20 3f 0d 0a 20 20 20  bKeyName) ?..   
5820: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5830: 20 20 20 20 20 53 74 72 69 6e 67 2e 46 6f 72 6d       String.Form
5840: 61 74 28 22 7b 30 7d 5c 5c 7b 31 7d 22 2c 20 6b  at("{0}\\{1}", k
5850: 65 79 2e 4e 61 6d 65 2c 20 73 75 62 4b 65 79 4e  ey.Name, subKeyN
5860: 61 6d 65 29 20 3a 0d 0a 20 20 20 20 20 20 20 20  ame) :..        
5870: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5880: 6b 65 79 2e 4e 61 6d 65 3b 0d 0a 20 20 20 20 20  key.Name;..     
5890: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
58a0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
58b0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
58c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
58d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
58e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
58f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
5900: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
5910: 69 76 61 74 65 20 52 65 67 69 73 74 72 79 4b 65  ivate RegistryKe
5920: 79 20 6b 65 79 3b 0d 0a 20 20 20 20 20 20 20 20  y key;..        
5930: 20 20 20 20 70 75 62 6c 69 63 20 52 65 67 69 73      public Regis
5940: 74 72 79 4b 65 79 20 4b 65 79 0d 0a 20 20 20 20  tryKey Key..    
5950: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
5960: 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b             get {
5970: 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29   CheckDisposed()
5980: 3b 20 43 68 65 63 6b 53 61 66 65 28 29 3b 20 72  ; CheckSafe(); r
5990: 65 74 75 72 6e 20 6b 65 79 3b 20 7d 0d 0a 20 20  eturn key; }..  
59a0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
59b0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
59c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
59d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
59e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
59f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
5a00: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
5a10: 69 76 61 74 65 20 73 74 72 69 6e 67 20 73 75 62  ivate string sub
5a20: 4b 65 79 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20  KeyName;..      
5a30: 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 72        public str
5a40: 69 6e 67 20 53 75 62 4b 65 79 4e 61 6d 65 0d 0a  ing SubKeyName..
5a50: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
5a60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67                 g
5a70: 65 74 20 7b 20 43 68 65 63 6b 44 69 73 70 6f 73  et { CheckDispos
5a80: 65 64 28 29 3b 20 72 65 74 75 72 6e 20 73 75 62  ed(); return sub
5a90: 4b 65 79 4e 61 6d 65 3b 20 7d 0d 0a 20 20 20 20  KeyName; }..    
5aa0: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
5ab0: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
5ac0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5ad0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5ae0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5af0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
5b00: 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
5b10: 61 74 65 20 62 6f 6f 6c 20 77 68 61 74 49 66 3b  ate bool whatIf;
5b20: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
5b30: 62 6c 69 63 20 62 6f 6f 6c 20 57 68 61 74 49 66  blic bool WhatIf
5b40: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
5b50: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
5b60: 20 67 65 74 20 7b 20 43 68 65 63 6b 44 69 73 70   get { CheckDisp
5b70: 6f 73 65 64 28 29 3b 20 72 65 74 75 72 6e 20 77  osed(); return w
5b80: 68 61 74 49 66 3b 20 7d 0d 0a 20 20 20 20 20 20  hatIf; }..      
5b90: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
5ba0: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
5bb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5bc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5bd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5be0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
5bf0: 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
5c00: 65 20 62 6f 6f 6c 20 72 65 61 64 4f 6e 6c 79 3b  e bool readOnly;
5c10: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
5c20: 62 6c 69 63 20 62 6f 6f 6c 20 52 65 61 64 4f 6e  blic bool ReadOn
5c30: 6c 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ly..            
5c40: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
5c50: 20 20 20 67 65 74 20 7b 20 43 68 65 63 6b 44 69     get { CheckDi
5c60: 73 70 6f 73 65 64 28 29 3b 20 72 65 74 75 72 6e  sposed(); return
5c70: 20 72 65 61 64 4f 6e 6c 79 3b 20 7d 0d 0a 20 20   readOnly; }..  
5c80: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
5c90: 20 20 20 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
5ce0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
5cf0: 62 6c 69 63 20 62 6f 6f 6c 20 73 61 66 65 3b 0d  blic bool safe;.
5d00: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
5d10: 6c 69 63 20 62 6f 6f 6c 20 53 61 66 65 0d 0a 20  lic bool Safe.. 
5d20: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
5d30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65                ge
5d40: 74 20 7b 20 43 68 65 63 6b 44 69 73 70 6f 73 65  t { CheckDispose
5d50: 64 28 29 3b 20 72 65 74 75 72 6e 20 73 61 66 65  d(); return safe
5d60: 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
5d70: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
5d80: 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
5d90: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
5da0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5db0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5dc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5dd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
5de0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65  .            #re
5df0: 67 69 6f 6e 20 50 72 69 76 61 74 65 20 4d 65 74  gion Private Met
5e00: 68 6f 64 73 0d 0a 20 20 20 20 20 20 20 20 20 20  hods..          
5e10: 20 20 70 72 69 76 61 74 65 20 76 6f 69 64 20 43    private void C
5e20: 68 65 63 6b 52 65 61 64 4f 6e 6c 79 28 29 0d 0a  heckReadOnly()..
5e30: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
5e40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
5e50: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
5e60: 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 49 6e 20 22     // NOTE: In "
5e70: 72 65 61 64 2d 6f 6e 6c 79 22 20 6d 6f 64 65 2c  read-only" mode,
5e80: 20 77 65 20 64 69 73 61 6c 6c 6f 77 20 61 6c 6c   we disallow all
5e90: 20 77 72 69 74 65 20 61 63 63 65 73 73 2e 0d 0a   write access...
5ea0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5eb0: 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
5ec0: 20 20 20 20 69 66 20 28 21 72 65 61 64 4f 6e 6c      if (!readOnl
5ed0: 79 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y)..            
5ee0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 3b 0d          return;.
5ef0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
5f00: 20 20 20 74 68 72 6f 77 20 6e 65 77 20 49 6e 76     throw new Inv
5f10: 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45 78 63  alidOperationExc
5f20: 65 70 74 69 6f 6e 28 29 3b 0d 0a 20 20 20 20 20  eption();..     
5f30: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
5f40: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
5f50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5f60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5f70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5f80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
5f90: 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
5fa0: 74 65 20 76 6f 69 64 20 43 68 65 63 6b 53 61 66  te void CheckSaf
5fb0: 65 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e()..           
5fc0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
5fd0: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
5fe0: 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a          // NOTE:
5ff0: 20 49 6e 20 22 73 61 66 65 22 20 6d 6f 64 65 2c   In "safe" mode,
6000: 20 77 65 20 64 69 73 61 6c 6c 6f 77 20 61 6c 6c   we disallow all
6010: 20 64 69 72 65 63 74 20 61 63 63 65 73 73 20 74   direct access t
6020: 6f 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 20  o the..         
6030: 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
6040: 63 6f 6e 74 61 69 6e 65 64 20 72 65 67 69 73 74  contained regist
6050: 72 79 20 6b 65 79 2e 0d 0a 20 20 20 20 20 20 20  ry key...       
6060: 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
6070: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
6080: 28 21 73 61 66 65 29 0d 0a 20 20 20 20 20 20 20  (!safe)..       
6090: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
60a0: 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  urn;....        
60b0: 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
60c0: 77 20 49 6e 76 61 6c 69 64 4f 70 65 72 61 74 69  w InvalidOperati
60d0: 6f 6e 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a  onException();..
60e0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
60f0: 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72             #endr
6100: 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
6110: 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f  ////////////////
6140: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6150: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
6160: 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
6170: 53 79 73 74 65 6d 2e 4f 62 6a 65 63 74 20 4f 76  System.Object Ov
6180: 65 72 72 69 64 65 73 0d 0a 20 20 20 20 20 20 20  errides..       
6190: 20 20 20 20 20 70 75 62 6c 69 63 20 6f 76 65 72       public over
61a0: 72 69 64 65 20 73 74 72 69 6e 67 20 54 6f 53 74  ride string ToSt
61b0: 72 69 6e 67 28 29 0d 0a 20 20 20 20 20 20 20 20  ring()..        
61c0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
61d0: 20 20 20 20 20 20 20 43 68 65 63 6b 44 69 73 70         CheckDisp
61e0: 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20  osed();....     
61f0: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
6200: 6e 20 74 68 69 73 2e 4e 61 6d 65 3b 0d 0a 20 20  n this.Name;..  
6210: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
6220: 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67           #endreg
6230: 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ion....         
6240: 20 20 20 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 2f 2f  ////////////////
6270: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6280: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
6290: 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 49 6d        #region Im
62a0: 70 6c 69 63 69 74 20 43 6f 6e 76 65 72 73 69 6f  plicit Conversio
62b0: 6e 20 4f 70 65 72 61 74 6f 72 73 0d 0a 20 20 20  n Operators..   
62c0: 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
62d0: 20 20 20 20 20 20 20 20 20 2f 2f 20 42 55 47 42           // BUGB
62e0: 55 47 3a 20 54 68 65 20 27 77 68 61 74 2d 69 66  UG: The 'what-if
62f0: 27 20 6d 6f 64 65 20 73 65 74 74 69 6e 67 20 68  ' mode setting h
6300: 65 72 65 20 73 68 6f 75 6c 64 20 70 72 6f 62 61  ere should proba
6310: 62 6c 79 20 62 65 20 62 61 73 65 64 0d 0a 20 20  bly be based..  
6320: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
6330: 20 20 20 20 20 6f 6e 20 73 6f 6d 65 20 73 74 61       on some sta
6340: 74 69 63 20 70 72 6f 70 65 72 74 79 2c 20 6e 6f  tic property, no
6350: 74 20 68 61 72 64 2d 63 6f 64 65 64 20 74 6f 20  t hard-coded to 
6360: 74 72 75 65 3f 0d 0a 20 20 20 20 20 20 20 20 20  true?..         
6370: 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
6380: 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63     public static
6390: 20 69 6d 70 6c 69 63 69 74 20 6f 70 65 72 61 74   implicit operat
63a0: 6f 72 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b  or MockRegistryK
63b0: 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey(..           
63c0: 20 20 20 20 20 52 65 67 69 73 74 72 79 4b 65 79       RegistryKey
63d0: 20 6b 65 79 0d 0a 20 20 20 20 20 20 20 20 20 20   key..          
63e0: 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
63f0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
6400: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e          return n
6410: 65 77 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b  ew MockRegistryK
6420: 65 79 28 6b 65 79 2c 20 6e 75 6c 6c 2c 20 74 72  ey(key, null, tr
6430: 75 65 2c 20 66 61 6c 73 65 2c 20 66 61 6c 73 65  ue, false, false
6440: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
6450: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
6460: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
6470: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6480: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6490: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
64a0: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
64b0: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
64c0: 20 20 20 20 2f 2f 20 42 55 47 42 55 47 3a 20 52      // BUGBUG: R
64d0: 65 6d 6f 76 65 20 6d 65 3f 20 20 54 68 69 73 20  emove me?  This 
64e0: 73 68 6f 75 6c 64 20 62 65 20 73 61 66 65 20 62  should be safe b
64f0: 65 63 61 75 73 65 20 69 6e 20 27 77 68 61 74 2d  ecause in 'what-
6500: 69 66 27 0d 0a 20 20 20 20 20 20 20 20 20 20 20  if'..           
6510: 20 2f 2f 20 20 20 20 20 20 20 20 20 6d 6f 64 65   //         mode
6520: 20 61 6c 6c 20 6b 65 79 73 20 61 72 65 20 6f 70   all keys are op
6530: 65 6e 65 64 20 72 65 61 64 2d 6f 6e 6c 79 2e 0d  ened read-only..
6540: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d  .            //.
6550: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
6560: 6c 69 63 20 73 74 61 74 69 63 20 69 6d 70 6c 69  lic static impli
6570: 63 69 74 20 6f 70 65 72 61 74 6f 72 20 52 65 67  cit operator Reg
6580: 69 73 74 72 79 4b 65 79 28 0d 0a 20 20 20 20 20  istryKey(..     
6590: 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52             MockR
65a0: 65 67 69 73 74 72 79 4b 65 79 20 6b 65 79 0d 0a  egistryKey key..
65b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
65c0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
65d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
65e0: 20 20 72 65 74 75 72 6e 20 28 6b 65 79 20 21 3d    return (key !=
65f0: 20 6e 75 6c 6c 29 20 3f 20 6b 65 79 2e 4b 65 79   null) ? key.Key
6600: 20 3a 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20   : null;..      
6610: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
6620: 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
6630: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
6640: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6650: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6660: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6670: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6680: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
6690: 20 20 23 72 65 67 69 6f 6e 20 49 44 69 73 70 6f    #region IDispo
66a0: 73 61 62 6c 65 20 22 50 61 74 74 65 72 6e 22 20  sable "Pattern" 
66b0: 4d 65 6d 62 65 72 73 0d 0a 20 20 20 20 20 20 20  Members..       
66c0: 20 20 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f       private boo
66d0: 6c 20 64 69 73 70 6f 73 65 64 3b 0d 0a 20 20 20  l disposed;..   
66e0: 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
66f0: 20 76 6f 69 64 20 43 68 65 63 6b 44 69 73 70 6f   void CheckDispo
6700: 73 65 64 28 29 20 2f 2a 20 74 68 72 6f 77 20 2a  sed() /* throw *
6710: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  /..            {
6720: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
6730: 20 20 69 66 20 28 21 64 69 73 70 6f 73 65 64 29    if (!disposed)
6740: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
6750: 20 20 20 20 20 20 72 65 74 75 72 6e 3b 0d 0a 0d        return;...
6760: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
6770: 20 74 68 72 6f 77 20 6e 65 77 20 4f 62 6a 65 63   throw new Objec
6780: 74 44 69 73 70 6f 73 65 64 45 78 63 65 70 74 69  tDisposedExcepti
6790: 6f 6e 28 74 79 70 65 6f 66 28 4d 6f 63 6b 52 65  on(typeof(MockRe
67a0: 67 69 73 74 72 79 4b 65 79 29 2e 4e 61 6d 65 29  gistryKey).Name)
67b0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
67c0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
67d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
67e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
67f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6800: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6810: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
6820: 20 20 20 70 72 69 76 61 74 65 20 2f 2a 20 70 72     private /* pr
6830: 6f 74 65 63 74 65 64 20 76 69 72 74 75 61 6c 20  otected virtual 
6840: 2a 2f 20 76 6f 69 64 20 44 69 73 70 6f 73 65 28  */ void Dispose(
6850: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
6860: 20 20 62 6f 6f 6c 20 64 69 73 70 6f 73 69 6e 67    bool disposing
6870: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
6880: 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20    )..           
6890: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
68a0: 20 20 20 20 69 66 20 28 21 64 69 73 70 6f 73 65      if (!dispose
68b0: 64 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d)..            
68c0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
68d0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 64             if (d
68e0: 69 73 70 6f 73 69 6e 67 29 0d 0a 20 20 20 20 20  isposing)..     
68f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
6900: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
6910: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
6920: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6930: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
6940: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6950: 20 20 20 20 20 20 20 20 2f 2f 20 64 69 73 70 6f          // dispo
6960: 73 65 20 6d 61 6e 61 67 65 64 20 72 65 73 6f 75  se managed resou
6970: 72 63 65 73 20 68 65 72 65 2e 2e 2e 0d 0a 20 20  rces here.....  
6980: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6990: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
69a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
69b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
69c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
69d0: 20 20 20 20 20 20 69 66 20 28 6b 65 79 20 21 3d        if (key !=
69e0: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
69f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6a00: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
6a10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b                 k
6a20: 65 79 2e 43 6c 6f 73 65 28 29 3b 0d 0a 20 20 20  ey.Close();..   
6a30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6a40: 20 20 20 20 20 20 20 20 20 6b 65 79 20 3d 20 6e           key = n
6a50: 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ull;..          
6a60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
6a70: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
6a80: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
6a90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
6aa0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6ab0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6ac0: 2f 2f 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20  ////..          
6ad0: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 72 65 6c            // rel
6ae0: 65 61 73 65 20 75 6e 6d 61 6e 61 67 65 64 20 72  ease unmanaged r
6af0: 65 73 6f 75 72 63 65 73 20 68 65 72 65 2e 2e 2e  esources here...
6b00: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
6b10: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
6b20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6b30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
6b40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6b50: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
6b60: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e              // N
6b70: 4f 54 45 3a 20 54 68 69 73 20 6f 62 6a 65 63 74  OTE: This object
6b80: 20 69 73 20 6e 6f 77 20 64 69 73 70 6f 73 65 64   is now disposed
6b90: 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
6ba0: 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
6bb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
6bc0: 69 73 70 6f 73 65 64 20 3d 20 74 72 75 65 3b 0d  isposed = true;.
6bd0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
6be0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
6bf0: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  }..            #
6c00: 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
6c10: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
6c20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6c30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6c40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6c50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
6c60: 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67              #reg
6c70: 69 6f 6e 20 49 44 69 73 70 6f 73 61 62 6c 65 20  ion IDisposable 
6c80: 4d 65 6d 62 65 72 73 0d 0a 20 20 20 20 20 20 20  Members..       
6c90: 20 20 20 20 20 70 75 62 6c 69 63 20 76 6f 69 64       public void
6ca0: 20 44 69 73 70 6f 73 65 28 29 0d 0a 20 20 20 20   Dispose()..    
6cb0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
6cc0: 20 20 20 20 20 20 20 20 20 20 20 44 69 73 70 6f             Dispo
6cd0: 73 65 28 74 72 75 65 29 3b 0d 0a 20 20 20 20 20  se(true);..     
6ce0: 20 20 20 20 20 20 20 20 20 20 20 47 43 2e 53 75             GC.Su
6cf0: 70 70 72 65 73 73 46 69 6e 61 6c 69 7a 65 28 74  ppressFinalize(t
6d00: 68 69 73 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  his);..         
6d10: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
6d20: 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
6d30: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
6d40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6d50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6d60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6d70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
6d80: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  ...            #
6d90: 72 65 67 69 6f 6e 20 44 65 73 74 72 75 63 74 6f  region Destructo
6da0: 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7e  r..            ~
6db0: 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 28  MockRegistryKey(
6dc0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
6dd0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
6de0: 20 20 44 69 73 70 6f 73 65 28 66 61 6c 73 65 29    Dispose(false)
6df0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
6e00: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65  ..            #e
6e10: 6e 64 72 65 67 69 6f 6e 0d 0a 20 20 20 20 20 20  ndregion..      
6e20: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e    }..        #en
6e30: 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
6e40: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
6e50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6e60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6e70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6e80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
6e90: 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 52 65        #region Re
6ea0: 67 69 73 74 72 79 48 65 6c 70 65 72 20 43 6c 61  gistryHelper Cla
6eb0: 73 73 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  ss..        priv
6ec0: 61 74 65 20 73 74 61 74 69 63 20 63 6c 61 73 73  ate static class
6ed0: 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 0d   RegistryHelper.
6ee0: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
6ef0: 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
6f00: 50 75 62 6c 69 63 20 53 74 61 74 69 63 20 50 72  Public Static Pr
6f10: 6f 70 65 72 74 69 65 73 0d 0a 20 20 20 20 20 20  operties..      
6f20: 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
6f30: 61 74 69 63 20 69 6e 74 20 73 75 62 4b 65 79 73  atic int subKeys
6f40: 43 72 65 61 74 65 64 3b 0d 0a 20 20 20 20 20 20  Created;..      
6f50: 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61        public sta
6f60: 74 69 63 20 69 6e 74 20 53 75 62 4b 65 79 73 43  tic int SubKeysC
6f70: 72 65 61 74 65 64 0d 0a 20 20 20 20 20 20 20 20  reated..        
6f80: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
6f90: 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74         get { ret
6fa0: 75 72 6e 20 73 75 62 4b 65 79 73 43 72 65 61 74  urn subKeysCreat
6fb0: 65 64 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  ed; }..         
6fc0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
6fd0: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
6fe0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6ff0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7000: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7010: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
7020: 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
7030: 74 61 74 69 63 20 69 6e 74 20 73 75 62 4b 65 79  tatic int subKey
7040: 73 44 65 6c 65 74 65 64 3b 0d 0a 20 20 20 20 20  sDeleted;..     
7050: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74         public st
7060: 61 74 69 63 20 69 6e 74 20 53 75 62 4b 65 79 73  atic int SubKeys
7070: 44 65 6c 65 74 65 64 0d 0a 20 20 20 20 20 20 20  Deleted..       
7080: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
7090: 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65          get { re
70a0: 74 75 72 6e 20 73 75 62 4b 65 79 73 44 65 6c 65  turn subKeysDele
70b0: 74 65 64 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  ted; }..        
70c0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
70d0: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
70e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
70f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7100: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7110: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
7120: 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
7130: 73 74 61 74 69 63 20 69 6e 74 20 6b 65 79 56 61  static int keyVa
7140: 6c 75 65 73 53 65 74 3b 0d 0a 20 20 20 20 20 20  luesSet;..      
7150: 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61        public sta
7160: 74 69 63 20 69 6e 74 20 4b 65 79 56 61 6c 75 65  tic int KeyValue
7170: 73 53 65 74 0d 0a 20 20 20 20 20 20 20 20 20 20  sSet..          
7180: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
7190: 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72       get { retur
71a0: 6e 20 6b 65 79 56 61 6c 75 65 73 53 65 74 3b 20  n keyValuesSet; 
71b0: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
71c0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
71d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
71e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
71f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7200: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7210: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
7220: 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
7230: 63 20 69 6e 74 20 6b 65 79 56 61 6c 75 65 73 44  c int keyValuesD
7240: 65 6c 65 74 65 64 3b 0d 0a 20 20 20 20 20 20 20  eleted;..       
7250: 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74       public stat
7260: 69 63 20 69 6e 74 20 4b 65 79 56 61 6c 75 65 73  ic int KeyValues
7270: 44 65 6c 65 74 65 64 0d 0a 20 20 20 20 20 20 20  Deleted..       
7280: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
7290: 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65          get { re
72a0: 74 75 72 6e 20 6b 65 79 56 61 6c 75 65 73 44 65  turn keyValuesDe
72b0: 6c 65 74 65 64 3b 20 7d 0d 0a 20 20 20 20 20 20  leted; }..      
72c0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
72d0: 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
72e0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
72f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7300: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7310: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7320: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7330: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
7340: 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c 69 63    #region Public
7350: 20 53 74 61 74 69 63 20 4d 65 74 68 6f 64 73 0d   Static Methods.
7360: 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
7370: 6c 69 63 20 73 74 61 74 69 63 20 52 65 67 69 73  lic static Regis
7380: 74 72 79 4b 65 79 20 47 65 74 52 6f 6f 74 4b 65  tryKey GetRootKe
7390: 79 42 79 4e 61 6d 65 28 0d 0a 20 20 20 20 20 20  yByName(..      
73a0: 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
73b0: 20 6b 65 79 4e 61 6d 65 0d 0a 20 20 20 20 20 20   keyName..      
73c0: 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
73d0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
73e0: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
73f0: 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45  String.IsNullOrE
7400: 6d 70 74 79 28 6b 65 79 4e 61 6d 65 29 29 0d 0a  mpty(keyName))..
7410: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7420: 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b      return null;
7430: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
7440: 20 20 20 20 73 77 69 74 63 68 20 28 6b 65 79 4e      switch (keyN
7450: 61 6d 65 2e 54 6f 55 70 70 65 72 49 6e 76 61 72  ame.ToUpperInvar
7460: 69 61 6e 74 28 29 29 0d 0a 20 20 20 20 20 20 20  iant())..       
7470: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
7480: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7490: 63 61 73 65 20 22 48 4b 43 52 22 3a 0d 0a 20 20  case "HKCR":..  
74a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
74b0: 20 20 63 61 73 65 20 22 48 4b 45 59 5f 43 4c 41    case "HKEY_CLA
74c0: 53 53 45 53 5f 52 4f 4f 54 22 3a 0d 0a 20 20 20  SSES_ROOT":..   
74d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
74e0: 20 20 20 20 20 72 65 74 75 72 6e 20 52 65 67 69       return Regi
74f0: 73 74 72 79 2e 43 6c 61 73 73 65 73 52 6f 6f 74  stry.ClassesRoot
7500: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
7510: 20 20 20 20 20 20 20 63 61 73 65 20 22 48 4b 43         case "HKC
7520: 43 22 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  C":..           
7530: 20 20 20 20 20 20 20 20 20 63 61 73 65 20 22 48           case "H
7540: 4b 45 59 5f 43 55 52 52 45 4e 54 5f 43 4f 4e 46  KEY_CURRENT_CONF
7550: 49 47 22 3a 0d 0a 20 20 20 20 20 20 20 20 20 20  IG":..          
7560: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
7570: 74 75 72 6e 20 52 65 67 69 73 74 72 79 2e 43 75  turn Registry.Cu
7580: 72 72 65 6e 74 43 6f 6e 66 69 67 3b 0d 0a 20 20  rrentConfig;..  
7590: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
75a0: 20 20 63 61 73 65 20 22 48 4b 43 55 22 3a 0d 0a    case "HKCU":..
75b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
75c0: 20 20 20 20 63 61 73 65 20 22 48 4b 45 59 5f 43      case "HKEY_C
75d0: 55 52 52 45 4e 54 5f 55 53 45 52 22 3a 0d 0a 20  URRENT_USER":.. 
75e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
75f0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 52 65         return Re
7600: 67 69 73 74 72 79 2e 43 75 72 72 65 6e 74 55 73  gistry.CurrentUs
7610: 65 72 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  er;..           
7620: 20 20 20 20 20 20 20 20 20 63 61 73 65 20 22 48           case "H
7630: 4b 44 44 22 3a 0d 0a 20 20 20 20 20 20 20 20 20  KDD":..         
7640: 20 20 20 20 20 20 20 20 20 20 20 63 61 73 65 20             case 
7650: 22 48 4b 45 59 5f 44 59 4e 5f 44 41 54 41 22 3a  "HKEY_DYN_DATA":
7660: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
7670: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
7680: 20 52 65 67 69 73 74 72 79 2e 44 79 6e 44 61 74   Registry.DynDat
7690: 61 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  a;..            
76a0: 20 20 20 20 20 20 20 20 63 61 73 65 20 22 48 4b          case "HK
76b0: 4c 4d 22 3a 0d 0a 20 20 20 20 20 20 20 20 20 20  LM":..          
76c0: 20 20 20 20 20 20 20 20 20 20 63 61 73 65 20 22            case "
76d0: 48 4b 45 59 5f 4c 4f 43 41 4c 5f 4d 41 43 48 49  HKEY_LOCAL_MACHI
76e0: 4e 45 22 3a 0d 0a 20 20 20 20 20 20 20 20 20 20  NE":..          
76f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
7700: 74 75 72 6e 20 52 65 67 69 73 74 72 79 2e 4c 6f  turn Registry.Lo
7710: 63 61 6c 4d 61 63 68 69 6e 65 3b 0d 0a 20 20 20  calMachine;..   
7720: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7730: 20 63 61 73 65 20 22 48 4b 50 44 22 3a 0d 0a 20   case "HKPD":.. 
7740: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7750: 20 20 20 63 61 73 65 20 22 48 4b 45 59 5f 50 45     case "HKEY_PE
7760: 52 46 4f 52 4d 41 4e 43 45 5f 44 41 54 41 22 3a  RFORMANCE_DATA":
7770: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
7780: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
7790: 20 52 65 67 69 73 74 72 79 2e 50 65 72 66 6f 72   Registry.Perfor
77a0: 6d 61 6e 63 65 44 61 74 61 3b 0d 0a 20 20 20 20  manceData;..    
77b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
77c0: 63 61 73 65 20 22 48 4b 55 22 3a 0d 0a 20 20 20  case "HKU":..   
77d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
77e0: 20 63 61 73 65 20 22 48 4b 45 59 5f 55 53 45 52   case "HKEY_USER
77f0: 53 22 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  S":..           
7800: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
7810: 75 72 6e 20 52 65 67 69 73 74 72 79 2e 55 73 65  urn Registry.Use
7820: 72 73 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  rs;..           
7830: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
7840: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
7850: 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20   null;..        
7860: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
7870: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
7880: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7890: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
78a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
78b0: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
78c0: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73          public s
78d0: 74 61 74 69 63 20 4d 6f 63 6b 52 65 67 69 73 74  tatic MockRegist
78e0: 72 79 4b 65 79 20 4f 70 65 6e 53 75 62 4b 65 79  ryKey OpenSubKey
78f0: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
7900: 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b     MockRegistryK
7910: 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20  ey rootKey,..   
7920: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72               str
7930: 69 6e 67 20 73 75 62 4b 65 79 4e 61 6d 65 2c 0d  ing subKeyName,.
7940: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
7950: 20 62 6f 6f 6c 20 77 72 69 74 61 62 6c 65 2c 0d   bool writable,.
7960: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
7970: 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20   bool whatIf,.. 
7980: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
7990: 6f 6f 6c 20 76 65 72 62 6f 73 65 0d 0a 20 20 20  ool verbose..   
79a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a               )..
79b0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
79c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
79d0: 66 20 28 72 6f 6f 74 4b 65 79 20 3d 3d 20 6e 75  f (rootKey == nu
79e0: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
79f0: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
7a00: 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  null;....       
7a10: 20 20 20 20 20 20 20 20 20 69 66 20 28 76 65 72           if (ver
7a20: 62 6f 73 65 29 0d 0a 20 20 20 20 20 20 20 20 20  bose)..         
7a30: 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
7a40: 4f 70 73 2e 54 72 61 63 65 28 0d 0a 20 20 20 20  Ops.Trace(..    
7a50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7a60: 20 20 20 20 77 72 69 74 61 62 6c 65 20 3f 20 54      writable ? T
7a70: 72 61 63 65 50 72 69 6f 72 69 74 79 2e 48 69 67  racePriority.Hig
7a80: 68 65 73 74 20 3a 20 54 72 61 63 65 50 72 69 6f  hest : TracePrio
7a90: 72 69 74 79 2e 48 69 67 68 65 72 2c 0d 0a 20 20  rity.Higher,..  
7aa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7ab0: 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
7ac0: 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d  ack, String.Form
7ad0: 61 74 28 22 72 6f 6f 74 4b 65 79 20 3d 20 7b 30  at("rootKey = {0
7ae0: 7d 2c 20 22 20 2b 0d 0a 20 20 20 20 20 20 20 20  }, " +..        
7af0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7b00: 22 73 75 62 4b 65 79 4e 61 6d 65 20 3d 20 7b 31  "subKeyName = {1
7b10: 7d 2c 20 77 72 69 74 61 62 6c 65 20 3d 20 7b 32  }, writable = {2
7b20: 7d 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 72  }", ForDisplay(r
7b30: 6f 6f 74 4b 65 79 29 2c 0d 0a 20 20 20 20 20 20  ootKey),..      
7b40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7b50: 20 20 46 6f 72 44 69 73 70 6c 61 79 28 73 75 62    ForDisplay(sub
7b60: 4b 65 79 4e 61 6d 65 29 2c 20 46 6f 72 44 69 73  KeyName), ForDis
7b70: 70 6c 61 79 28 77 72 69 74 61 62 6c 65 29 29 2c  play(writable)),
7b80: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
7b90: 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
7ba0: 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
7bb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
7bc0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
7bd0: 20 2f 2f 20 48 41 43 4b 3a 20 41 6c 77 61 79 73   // HACK: Always
7be0: 20 66 6f 72 62 69 64 20 77 72 69 74 61 62 6c 65   forbid writable
7bf0: 20 61 63 63 65 73 73 20 77 68 65 6e 20 6f 70 65   access when ope
7c00: 72 61 74 69 6e 67 20 69 6e 0d 0a 20 20 20 20 20  rating in..     
7c10: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
7c20: 20 20 20 20 27 77 68 61 74 2d 69 66 27 20 6d 6f      'what-if' mo
7c30: 64 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  de...           
7c40: 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
7c50: 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67           MockReg
7c60: 69 73 74 72 79 4b 65 79 20 6b 65 79 20 3d 20 72  istryKey key = r
7c70: 6f 6f 74 4b 65 79 2e 4f 70 65 6e 53 75 62 4b 65  ootKey.OpenSubKe
7c80: 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
7c90: 20 20 20 20 20 20 20 20 73 75 62 4b 65 79 4e 61          subKeyNa
7ca0: 6d 65 2c 20 77 68 61 74 49 66 20 3f 20 66 61 6c  me, whatIf ? fal
7cb0: 73 65 20 3a 20 77 72 69 74 61 62 6c 65 29 3b 0d  se : writable);.
7cc0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
7cd0: 20 20 20 72 65 74 75 72 6e 20 28 6b 65 79 20 21     return (key !
7ce0: 3d 20 6e 75 6c 6c 29 20 3f 0d 0a 20 20 20 20 20  = null) ?..     
7cf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e                 n
7d00: 65 77 20 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b  ew MockRegistryK
7d10: 65 79 28 6b 65 79 2c 20 77 68 61 74 49 66 2c 20  ey(key, whatIf, 
7d20: 66 61 6c 73 65 2c 20 66 61 6c 73 65 29 20 3a 20  false, false) : 
7d30: 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20  null;..         
7d40: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
7d50: 20 20 20 20 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 2f 2f 2f 2f 2f  ////////////////
7d90: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
7da0: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74         public st
7db0: 61 74 69 63 20 4d 6f 63 6b 52 65 67 69 73 74 72  atic MockRegistr
7dc0: 79 4b 65 79 20 43 72 65 61 74 65 53 75 62 4b 65  yKey CreateSubKe
7dd0: 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
7de0: 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74 72 79      MockRegistry
7df0: 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20  Key rootKey,..  
7e00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
7e10: 72 69 6e 67 20 73 75 62 4b 65 79 4e 61 6d 65 2c  ring subKeyName,
7e20: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
7e30: 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a    bool whatIf,..
7e40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7e50: 62 6f 6f 6c 20 76 65 72 62 6f 73 65 0d 0a 20 20  bool verbose..  
7e60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d                ).
7e70: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
7e80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7e90: 69 66 20 28 72 6f 6f 74 4b 65 79 20 3d 3d 20 6e  if (rootKey == n
7ea0: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
7eb0: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
7ec0: 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20   null;....      
7ed0: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76 65            if (ve
7ee0: 72 62 6f 73 65 29 0d 0a 20 20 20 20 20 20 20 20  rbose)..        
7ef0: 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
7f00: 65 4f 70 73 2e 54 72 61 63 65 28 0d 0a 20 20 20  eOps.Trace(..   
7f10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7f20: 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69       TracePriori
7f30: 74 79 2e 48 69 67 68 65 73 74 2c 20 74 72 61 63  ty.Highest, trac
7f40: 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e  eCallback, Strin
7f50: 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
7f60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7f70: 20 20 20 22 72 6f 6f 74 4b 65 79 20 3d 20 7b 30     "rootKey = {0
7f80: 7d 2c 20 73 75 62 4b 65 79 4e 61 6d 65 20 3d 20  }, subKeyName = 
7f90: 7b 31 7d 22 2c 20 46 6f 72 44 69 73 70 6c 61 79  {1}", ForDisplay
7fa0: 28 72 6f 6f 74 4b 65 79 29 2c 0d 0a 20 20 20 20  (rootKey),..    
7fb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7fc0: 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 73      ForDisplay(s
7fd0: 75 62 4b 65 79 4e 61 6d 65 29 29 2c 20 74 72 61  ubKeyName)), tra
7fe0: 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
7ff0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8000: 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20  try..           
8010: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
8020: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
8030: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8040: 20 20 20 20 2f 2f 20 48 41 43 4b 3a 20 41 6c 77      // HACK: Alw
8050: 61 79 73 20 6f 70 65 6e 20 61 20 6b 65 79 2c 20  ays open a key, 
8060: 72 61 74 68 65 72 20 74 68 61 6e 20 63 72 65 61  rather than crea
8070: 74 69 6e 67 20 6f 6e 65 20 77 68 65 6e 0d 0a 20  ting one when.. 
8080: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8090: 20 20 20 2f 2f 20 20 20 20 20 20 20 6f 70 65 72     //       oper
80a0: 61 74 69 6e 67 20 69 6e 20 27 77 68 61 74 2d 69  ating in 'what-i
80b0: 66 27 20 6d 6f 64 65 2e 0d 0a 20 20 20 20 20 20  f' mode...      
80c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
80d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
80e0: 20 20 20 20 20 20 69 66 20 28 77 68 61 74 49 66        if (whatIf
80f0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
8100: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
8110: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8120: 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
8130: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
8140: 20 48 41 43 4b 3a 20 41 74 74 65 6d 70 74 20 74   HACK: Attempt t
8150: 6f 20 6f 70 65 6e 20 74 68 65 20 73 70 65 63 69  o open the speci
8160: 66 69 65 64 20 73 75 62 2d 6b 65 79 2e 20 20 49  fied sub-key.  I
8170: 66 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  f..             
8180: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
8190: 20 20 20 20 74 68 69 73 20 66 61 69 6c 73 2c 20      this fails, 
81a0: 77 65 20 77 69 6c 6c 20 73 69 6d 70 6c 79 20 72  we will simply r
81b0: 65 74 75 72 6e 20 74 68 65 20 72 6f 6f 74 20 6b  eturn the root k
81c0: 65 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ey..            
81d0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
81e0: 20 20 20 20 20 69 74 73 65 6c 66 20 73 69 6e 63       itself sinc
81f0: 65 20 6e 6f 20 77 72 69 74 65 73 20 61 72 65 20  e no writes are 
8200: 61 6c 6c 6f 77 65 64 20 69 6e 0d 0a 20 20 20 20  allowed in..    
8210: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8220: 20 20 20 20 2f 2f 20 20 20 20 20 20 20 27 77 68      //       'wh
8230: 61 74 2d 69 66 27 20 6d 6f 64 65 20 61 6e 79 68  at-if' mode anyh
8240: 6f 77 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ow...           
8250: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
8260: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
8270: 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65 67           MockReg
8280: 69 73 74 72 79 4b 65 79 20 6b 65 79 20 3d 20 72  istryKey key = r
8290: 6f 6f 74 4b 65 79 2e 4f 70 65 6e 53 75 62 4b 65  ootKey.OpenSubKe
82a0: 79 28 73 75 62 4b 65 79 4e 61 6d 65 29 3b 0d 0a  y(subKeyName);..
82b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
82c0: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
82d0: 20 28 6b 65 79 20 21 3d 20 6e 75 6c 6c 29 20 3f   (key != null) ?
82e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
82f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65                ke
8300: 79 20 3a 20 6e 65 77 20 4d 6f 63 6b 52 65 67 69  y : new MockRegi
8310: 73 74 72 79 4b 65 79 28 0d 0a 20 20 20 20 20 20  stryKey(..      
8320: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8330: 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65            rootKe
8340: 79 2c 20 73 75 62 4b 65 79 4e 61 6d 65 2c 20 74  y, subKeyName, t
8350: 72 75 65 2c 20 66 61 6c 73 65 2c 20 66 61 6c 73  rue, false, fals
8360: 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e);..           
8370: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
8380: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8390: 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20  else..          
83a0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
83b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
83c0: 20 20 20 20 20 72 65 74 75 72 6e 20 6e 65 77 20       return new 
83d0: 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 28  MockRegistryKey(
83e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
83f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f                ro
8400: 6f 74 4b 65 79 2e 43 72 65 61 74 65 53 75 62 4b  otKey.CreateSubK
8410: 65 79 28 73 75 62 4b 65 79 4e 61 6d 65 29 2c 20  ey(subKeyName), 
8420: 66 61 6c 73 65 2c 20 66 61 6c 73 65 2c 0d 0a 20  false, false,.. 
8430: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8440: 20 20 20 20 20 20 20 20 20 20 20 66 61 6c 73 65             false
8450: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
8460: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
8470: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
8480: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 69                fi
8490: 6e 61 6c 6c 79 0d 0a 20 20 20 20 20 20 20 20 20  nally..         
84a0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
84b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 75                su
84c0: 62 4b 65 79 73 43 72 65 61 74 65 64 2b 2b 3b 0d  bKeysCreated++;.
84d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
84e0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
84f0: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
8500: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
8510: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8520: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8530: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8540: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
8550: 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69      public stati
8560: 63 20 76 6f 69 64 20 44 65 6c 65 74 65 53 75 62  c void DeleteSub
8570: 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  Key(..          
8580: 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74        MockRegist
8590: 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a  ryKey rootKey,..
85a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
85b0: 73 74 72 69 6e 67 20 73 75 62 4b 65 79 4e 61 6d  string subKeyNam
85c0: 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
85d0: 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c      bool whatIf,
85e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
85f0: 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 0d 0a    bool verbose..
8600: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8610: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
8620: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8630: 20 20 69 66 20 28 72 6f 6f 74 4b 65 79 20 3d 3d    if (rootKey ==
8640: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
8650: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
8660: 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  rn;....         
8670: 20 20 20 20 20 20 20 69 66 20 28 76 65 72 62 6f         if (verbo
8680: 73 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se)..           
8690: 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70           TraceOp
86a0: 73 2e 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20  s.Trace(..      
86b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
86c0: 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e    TracePriority.
86d0: 48 69 67 68 65 73 74 2c 20 74 72 61 63 65 43 61  Highest, traceCa
86e0: 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46  llback, String.F
86f0: 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
8700: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8710: 22 72 6f 6f 74 4b 65 79 20 3d 20 7b 30 7d 2c 20  "rootKey = {0}, 
8720: 73 75 62 4b 65 79 4e 61 6d 65 20 3d 20 7b 31 7d  subKeyName = {1}
8730: 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 72 6f  ", ForDisplay(ro
8740: 6f 74 4b 65 79 29 2c 0d 0a 20 20 20 20 20 20 20  otKey),..       
8750: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8760: 20 46 6f 72 44 69 73 70 6c 61 79 28 73 75 62 4b   ForDisplay(subK
8770: 65 79 4e 61 6d 65 29 29 2c 20 74 72 61 63 65 43  eyName)), traceC
8780: 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
8790: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
87a0: 28 21 77 68 61 74 49 66 29 0d 0a 20 20 20 20 20  (!whatIf)..     
87b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
87c0: 6f 6f 74 4b 65 79 2e 44 65 6c 65 74 65 53 75 62  ootKey.DeleteSub
87d0: 4b 65 79 28 73 75 62 4b 65 79 4e 61 6d 65 29 3b  Key(subKeyName);
87e0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
87f0: 20 20 20 20 73 75 62 4b 65 79 73 44 65 6c 65 74      subKeysDelet
8800: 65 64 2b 2b 3b 0d 0a 20 20 20 20 20 20 20 20 20  ed++;..         
8810: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
8820: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
8830: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8840: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8850: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8860: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
8870: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74         public st
8880: 61 74 69 63 20 76 6f 69 64 20 44 65 6c 65 74 65  atic void Delete
8890: 53 75 62 4b 65 79 54 72 65 65 28 0d 0a 20 20 20  SubKeyTree(..   
88a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63               Moc
88b0: 6b 52 65 67 69 73 74 72 79 4b 65 79 20 72 6f 6f  kRegistryKey roo
88c0: 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20  tKey,..         
88d0: 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 73 75         string su
88e0: 62 4b 65 79 4e 61 6d 65 2c 0d 0a 20 20 20 20 20  bKeyName,..     
88f0: 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
8900: 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20  whatIf,..       
8910: 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65           bool ve
8920: 72 62 6f 73 65 0d 0a 20 20 20 20 20 20 20 20 20  rbose..         
8930: 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
8940: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
8950: 20 20 20 20 20 20 20 20 20 69 66 20 28 72 6f 6f           if (roo
8960: 74 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  tKey == null).. 
8970: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8980: 20 20 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20     return;....  
8990: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
89a0: 20 28 76 65 72 62 6f 73 65 29 0d 0a 20 20 20 20   (verbose)..    
89b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
89c0: 54 72 61 63 65 4f 70 73 2e 54 72 61 63 65 28 0d  TraceOps.Trace(.
89d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
89e0: 20 20 20 20 20 20 20 20 20 54 72 61 63 65 50 72           TracePr
89f0: 69 6f 72 69 74 79 2e 48 69 67 68 65 73 74 2c 20  iority.Highest, 
8a00: 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53  traceCallback, S
8a10: 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
8a20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8a30: 20 20 20 20 20 20 20 22 72 6f 6f 74 4b 65 79 20         "rootKey 
8a40: 3d 20 7b 30 7d 2c 20 73 75 62 4b 65 79 4e 61 6d  = {0}, subKeyNam
8a50: 65 20 3d 20 7b 31 7d 22 2c 20 46 6f 72 44 69 73  e = {1}", ForDis
8a60: 70 6c 61 79 28 72 6f 6f 74 4b 65 79 29 2c 0d 0a  play(rootKey),..
8a70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8a80: 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c          ForDispl
8a90: 61 79 28 73 75 62 4b 65 79 4e 61 6d 65 29 29 2c  ay(subKeyName)),
8aa0: 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
8ab0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
8ac0: 20 20 20 20 69 66 20 28 21 77 68 61 74 49 66 29      if (!whatIf)
8ad0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8ae0: 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2e 44 65        rootKey.De
8af0: 6c 65 74 65 53 75 62 4b 65 79 54 72 65 65 28 73  leteSubKeyTree(s
8b00: 75 62 4b 65 79 4e 61 6d 65 29 3b 0d 0a 0d 0a 20  ubKeyName);.... 
8b10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
8b20: 75 62 4b 65 79 73 44 65 6c 65 74 65 64 2b 2b 3b  ubKeysDeleted++;
8b30: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
8b40: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
8b50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8b60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8b70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8b80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8b90: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
8ba0: 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20    public static 
8bb0: 73 74 72 69 6e 67 5b 5d 20 47 65 74 53 75 62 4b  string[] GetSubK
8bc0: 65 79 4e 61 6d 65 73 28 0d 0a 20 20 20 20 20 20  eyNames(..      
8bd0: 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65            MockRe
8be0: 67 69 73 74 72 79 4b 65 79 20 6b 65 79 2c 0d 0a  gistryKey key,..
8bf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8c00: 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20  bool whatIf,..  
8c10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
8c20: 6f 6c 20 76 65 72 62 6f 73 65 0d 0a 20 20 20 20  ol verbose..    
8c30: 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
8c40: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
8c50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
8c60: 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a   (key == null)..
8c70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8c80: 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b      return null;
8c90: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
8ca0: 20 20 20 20 69 66 20 28 76 65 72 62 6f 73 65 29      if (verbose)
8cb0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8cc0: 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 54        TraceOps.T
8cd0: 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20  race(..         
8ce0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
8cf0: 72 61 63 65 50 72 69 6f 72 69 74 79 2e 48 69 67  racePriority.Hig
8d00: 68 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b  h, traceCallback
8d10: 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  , String.Format(
8d20: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8d30: 20 20 20 20 20 20 20 20 20 20 22 6b 65 79 20 3d            "key =
8d40: 20 7b 30 7d 22 2c 20 46 6f 72 44 69 73 70 6c 61   {0}", ForDispla
8d50: 79 28 6b 65 79 29 29 2c 20 74 72 61 63 65 43 61  y(key)), traceCa
8d60: 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
8d70: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
8d80: 72 6e 20 6b 65 79 2e 47 65 74 53 75 62 4b 65 79  rn key.GetSubKey
8d90: 4e 61 6d 65 73 28 29 3b 0d 0a 20 20 20 20 20 20  Names();..      
8da0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
8db0: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
8dc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8dd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8de0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
8df0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
8e00: 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
8e10: 20 73 74 61 74 69 63 20 6f 62 6a 65 63 74 20 47   static object G
8e20: 65 74 56 61 6c 75 65 28 0d 0a 20 20 20 20 20 20  etValue(..      
8e30: 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b 52 65            MockRe
8e40: 67 69 73 74 72 79 4b 65 79 20 6b 65 79 2c 0d 0a  gistryKey key,..
8e50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8e60: 73 74 72 69 6e 67 20 6e 61 6d 65 2c 0d 0a 20 20  string name,..  
8e70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f 62                ob
8e80: 6a 65 63 74 20 64 65 66 61 75 6c 74 56 61 6c 75  ject defaultValu
8e90: 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
8ea0: 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c      bool whatIf,
8eb0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8ec0: 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 0d 0a    bool verbose..
8ed0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8ee0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
8ef0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8f00: 20 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c    if (key == nul
8f10: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
8f20: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e          return n
8f30: 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ull;....        
8f40: 20 20 20 20 20 20 20 20 69 66 20 28 76 65 72 62          if (verb
8f50: 6f 73 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ose)..          
8f60: 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f            TraceO
8f70: 70 73 2e 54 72 61 63 65 28 0d 0a 20 20 20 20 20  ps.Trace(..     
8f80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8f90: 20 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79     TracePriority
8fa0: 2e 48 69 67 68 2c 20 74 72 61 63 65 43 61 6c 6c  .High, traceCall
8fb0: 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72  back, String.For
8fc0: 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
8fd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 6b                "k
8fe0: 65 79 20 3d 20 7b 30 7d 2c 20 6e 61 6d 65 20 3d  ey = {0}, name =
8ff0: 20 7b 31 7d 2c 20 64 65 66 61 75 6c 74 56 61 6c   {1}, defaultVal
9000: 75 65 20 3d 20 7b 32 7d 22 2c 0d 0a 20 20 20 20  ue = {2}",..    
9010: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9020: 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 6b      ForDisplay(k
9030: 65 79 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  ey), ForDisplay(
9040: 6e 61 6d 65 29 2c 0d 0a 20 20 20 20 20 20 20 20  name),..        
9050: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9060: 46 6f 72 44 69 73 70 6c 61 79 28 64 65 66 61 75  ForDisplay(defau
9070: 6c 74 56 61 6c 75 65 29 29 2c 20 74 72 61 63 65  ltValue)), trace
9080: 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
9090: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
90a0: 74 75 72 6e 20 6b 65 79 2e 47 65 74 56 61 6c 75  turn key.GetValu
90b0: 65 28 6e 61 6d 65 2c 20 64 65 66 61 75 6c 74 56  e(name, defaultV
90c0: 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  alue);..        
90d0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
90e0: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
90f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9100: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9110: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9120: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
9130: 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73          public s
9140: 74 61 74 69 63 20 76 6f 69 64 20 53 65 74 56 61  tatic void SetVa
9150: 6c 75 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  lue(..          
9160: 20 20 20 20 20 20 4d 6f 63 6b 52 65 67 69 73 74        MockRegist
9170: 72 79 4b 65 79 20 6b 65 79 2c 0d 0a 20 20 20 20  ryKey key,..    
9180: 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
9190: 6e 67 20 6e 61 6d 65 2c 0d 0a 20 20 20 20 20 20  ng name,..      
91a0: 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74            object
91b0: 20 76 61 6c 75 65 2c 0d 0a 20 20 20 20 20 20 20   value,..       
91c0: 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68           bool wh
91d0: 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20  atIf,..         
91e0: 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62         bool verb
91f0: 6f 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ose..           
9200: 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
9210: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
9220: 20 20 20 20 20 20 20 69 66 20 28 6b 65 79 20 3d         if (key =
9230: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
9240: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
9250: 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  urn;....        
9260: 20 20 20 20 20 20 20 20 69 66 20 28 76 65 72 62          if (verb
9270: 6f 73 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ose)..          
9280: 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f            TraceO
9290: 70 73 2e 54 72 61 63 65 28 0d 0a 20 20 20 20 20  ps.Trace(..     
92a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
92b0: 20 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79     TracePriority
92c0: 2e 48 69 67 68 65 73 74 2c 20 74 72 61 63 65 43  .Highest, traceC
92d0: 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e  allback, String.
92e0: 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
92f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9300: 20 22 6b 65 79 20 3d 20 7b 30 7d 2c 20 6e 61 6d   "key = {0}, nam
9310: 65 20 3d 20 7b 31 7d 2c 20 76 61 6c 75 65 20 3d  e = {1}, value =
9320: 20 7b 32 7d 22 2c 20 46 6f 72 44 69 73 70 6c 61   {2}", ForDispla
9330: 79 28 6b 65 79 29 2c 0d 0a 20 20 20 20 20 20 20  y(key),..       
9340: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9350: 20 46 6f 72 44 69 73 70 6c 61 79 28 6e 61 6d 65   ForDisplay(name
9360: 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 76 61  ), ForDisplay(va
9370: 6c 75 65 29 29 2c 20 74 72 61 63 65 43 61 74 65  lue)), traceCate
9380: 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
9390: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21 77            if (!w
93a0: 68 61 74 49 66 29 0d 0a 20 20 20 20 20 20 20 20  hatIf)..        
93b0: 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 2e              key.
93c0: 53 65 74 56 61 6c 75 65 28 6e 61 6d 65 2c 20 76  SetValue(name, v
93d0: 61 6c 75 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  alue);....      
93e0: 20 20 20 20 20 20 20 20 20 20 6b 65 79 56 61 6c            keyVal
93f0: 75 65 73 53 65 74 2b 2b 3b 0d 0a 20 20 20 20 20  uesSet++;..     
9400: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
9410: 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
9420: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9430: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9440: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9450: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
9460: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
9470: 63 20 73 74 61 74 69 63 20 76 6f 69 64 20 44 65  c static void De
9480: 6c 65 74 65 56 61 6c 75 65 28 0d 0a 20 20 20 20  leteValue(..    
9490: 20 20 20 20 20 20 20 20 20 20 20 20 4d 6f 63 6b              Mock
94a0: 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65 79 2c  RegistryKey key,
94b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
94c0: 20 20 73 74 72 69 6e 67 20 6e 61 6d 65 2c 0d 0a    string name,..
94d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
94e0: 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20  bool whatIf,..  
94f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
9500: 6f 6c 20 76 65 72 62 6f 73 65 0d 0a 20 20 20 20  ol verbose..    
9510: 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
9520: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
9530: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
9540: 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a   (key == null)..
9550: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9560: 20 20 20 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20      return;.... 
9570: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
9580: 66 20 28 76 65 72 62 6f 73 65 29 0d 0a 20 20 20  f (verbose)..   
9590: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
95a0: 20 54 72 61 63 65 4f 70 73 2e 54 72 61 63 65 28   TraceOps.Trace(
95b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
95c0: 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 50            TraceP
95d0: 72 69 6f 72 69 74 79 2e 48 69 67 68 65 73 74 2c  riority.Highest,
95e0: 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20   traceCallback, 
95f0: 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
9600: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9610: 20 20 20 20 20 20 20 20 22 6b 65 79 20 3d 20 7b          "key = {
9620: 30 7d 2c 20 6e 61 6d 65 20 3d 20 7b 31 7d 22 2c  0}, name = {1}",
9630: 20 46 6f 72 44 69 73 70 6c 61 79 28 6b 65 79 29   ForDisplay(key)
9640: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
9650: 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69             ForDi
9660: 73 70 6c 61 79 28 6e 61 6d 65 29 29 2c 20 74 72  splay(name)), tr
9670: 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
9680: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
9690: 20 69 66 20 28 21 77 68 61 74 49 66 29 0d 0a 20   if (!whatIf).. 
96a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
96b0: 20 20 20 6b 65 79 2e 44 65 6c 65 74 65 56 61 6c     key.DeleteVal
96c0: 75 65 28 6e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20  ue(name);....   
96d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79               key
96e0: 56 61 6c 75 65 73 44 65 6c 65 74 65 64 2b 2b 3b  ValuesDeleted++;
96f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
9700: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e  .            #en
9710: 64 72 65 67 69 6f 6e 0d 0a 20 20 20 20 20 20 20  dregion..       
9720: 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64   }..        #end
9730: 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
9740: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
9750: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9760: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9770: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9780: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
9790: 20 20 20 20 20 23 72 65 67 69 6f 6e 20 53 74 72       #region Str
97a0: 69 6e 67 4c 69 73 74 20 43 6c 61 73 73 0d 0a 20  ingList Class.. 
97b0: 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
97c0: 65 61 6c 65 64 20 63 6c 61 73 73 20 53 74 72 69  ealed class Stri
97d0: 6e 67 4c 69 73 74 20 3a 20 4c 69 73 74 3c 73 74  ngList : List<st
97e0: 72 69 6e 67 3e 0d 0a 20 20 20 20 20 20 20 20 7b  ring>..        {
97f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
9800: 62 6c 69 63 20 53 74 72 69 6e 67 4c 69 73 74 28  blic StringList(
9810: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
9820: 20 20 20 3a 20 62 61 73 65 28 29 0d 0a 20 20 20     : base()..   
9830: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
9840: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64              // d
9850: 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20  o nothing...    
9860: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
9870: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
9880: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9890: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
98a0: 2f 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 0d 0a 0d 0a  ////////////....
98c0: 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
98d0: 69 63 20 53 74 72 69 6e 67 4c 69 73 74 28 49 45  ic StringList(IE
98e0: 6e 75 6d 65 72 61 62 6c 65 3c 73 74 72 69 6e 67  numerable<string
98f0: 3e 20 63 6f 6c 6c 65 63 74 69 6f 6e 29 0d 0a 20  > collection).. 
9900: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3a                 :
9910: 20 62 61 73 65 28 63 6f 6c 6c 65 63 74 69 6f 6e   base(collection
9920: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
9930: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
9940: 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e    // do nothing.
9950: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
9960: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
9970: 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
9980: 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
9990: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
99a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
99b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
99c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
99d0: 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65  /....        #re
99e0: 67 69 6f 6e 20 53 74 72 69 6e 67 44 69 63 74 69  gion StringDicti
99f0: 6f 6e 61 72 79 20 43 6c 61 73 73 0d 0a 20 20 20  onary Class..   
9a00: 20 20 20 20 20 70 72 69 76 61 74 65 20 73 65 61       private sea
9a10: 6c 65 64 20 63 6c 61 73 73 20 53 74 72 69 6e 67  led class String
9a20: 44 69 63 74 69 6f 6e 61 72 79 20 3a 20 44 69 63  Dictionary : Dic
9a30: 74 69 6f 6e 61 72 79 3c 73 74 72 69 6e 67 2c 20  tionary<string, 
9a40: 73 74 72 69 6e 67 3e 0d 0a 20 20 20 20 20 20 20  string>..       
9a50: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
9a60: 70 75 62 6c 69 63 20 53 74 72 69 6e 67 44 69 63  public StringDic
9a70: 74 69 6f 6e 61 72 79 28 29 0d 0a 20 20 20 20 20  tionary()..     
9a80: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
9a90: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20            // do 
9aa0: 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20  nothing...      
9ab0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
9ac0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64   }..        #end
9ad0: 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
9ae0: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
9af0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9b00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9b10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9b20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
9b30: 20 20 20 20 20 23 72 65 67 69 6f 6e 20 56 65 72       #region Ver
9b40: 73 69 6f 6e 4c 69 73 74 20 43 6c 61 73 73 0d 0a  sionList Class..
9b50: 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
9b60: 73 65 61 6c 65 64 20 63 6c 61 73 73 20 56 65 72  sealed class Ver
9b70: 73 69 6f 6e 4c 69 73 74 20 3a 20 4c 69 73 74 3c  sionList : List<
9b80: 56 65 72 73 69 6f 6e 3e 0d 0a 20 20 20 20 20 20  Version>..      
9b90: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
9ba0: 20 70 75 62 6c 69 63 20 56 65 72 73 69 6f 6e 4c   public VersionL
9bb0: 69 73 74 28 29 0d 0a 20 20 20 20 20 20 20 20 20  ist()..         
9bc0: 20 20 20 20 20 20 20 3a 20 62 61 73 65 28 29 0d         : base().
9bd0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
9be0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9bf0: 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a  // do nothing...
9c00: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
9c10: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
9c20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9c30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9c40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9c50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9c60: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
9c70: 70 75 62 6c 69 63 20 56 65 72 73 69 6f 6e 4c 69  public VersionLi
9c80: 73 74 28 49 45 6e 75 6d 65 72 61 62 6c 65 3c 56  st(IEnumerable<V
9c90: 65 72 73 69 6f 6e 3e 20 63 6f 6c 6c 65 63 74 69  ersion> collecti
9ca0: 6f 6e 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on)..           
9cb0: 20 20 20 20 20 3a 20 62 61 73 65 28 63 6f 6c 6c       : base(coll
9cc0: 65 63 74 69 6f 6e 29 0d 0a 20 20 20 20 20 20 20  ection)..       
9cd0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
9ce0: 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f          // do no
9cf0: 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20  thing...        
9d00: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d      }..        }
9d10: 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65  ..        #endre
9d20: 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
9d30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9d40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9d50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9d60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9d70: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
9d80: 20 20 20 23 72 65 67 69 6f 6e 20 56 65 72 73 69     #region Versi
9d90: 6f 6e 4d 61 70 20 43 6c 61 73 73 0d 0a 20 20 20  onMap Class..   
9da0: 20 20 20 20 20 70 72 69 76 61 74 65 20 73 65 61       private sea
9db0: 6c 65 64 20 63 6c 61 73 73 20 56 65 72 73 69 6f  led class Versio
9dc0: 6e 4d 61 70 20 3a 20 44 69 63 74 69 6f 6e 61 72  nMap : Dictionar
9dd0: 79 3c 73 74 72 69 6e 67 2c 20 56 65 72 73 69 6f  y<string, Versio
9de0: 6e 4c 69 73 74 3e 0d 0a 20 20 20 20 20 20 20 20  nList>..        
9df0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  {..            p
9e00: 75 62 6c 69 63 20 56 65 72 73 69 6f 6e 4d 61 70  ublic VersionMap
9e10: 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ()..            
9e20: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
9e30: 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67     // do nothing
9e40: 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ...            }
9e50: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
9e60: 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
9e70: 0a 0d 0a 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f  ////////////////
9ec0: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72  //....        #r
9ed0: 65 67 69 6f 6e 20 56 65 72 73 69 6f 6e 4c 69 73  egion VersionLis
9ee0: 74 4d 61 70 20 43 6c 61 73 73 0d 0a 20 20 20 20  tMap Class..    
9ef0: 20 20 20 20 70 72 69 76 61 74 65 20 73 65 61 6c      private seal
9f00: 65 64 20 63 6c 61 73 73 20 56 65 72 73 69 6f 6e  ed class Version
9f10: 4c 69 73 74 4d 61 70 20 3a 20 44 69 63 74 69 6f  ListMap : Dictio
9f20: 6e 61 72 79 3c 56 65 72 73 69 6f 6e 2c 20 56 65  nary<Version, Ve
9f30: 72 73 69 6f 6e 4c 69 73 74 3e 0d 0a 20 20 20 20  rsionList>..    
9f40: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
9f50: 20 20 20 70 75 62 6c 69 63 20 56 65 72 73 69 6f     public Versio
9f60: 6e 4c 69 73 74 4d 61 70 28 29 0d 0a 20 20 20 20  nListMap()..    
9f70: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
9f80: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f             // do
9f90: 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20   nothing...     
9fa0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
9fb0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e    }..        #en
9fc0: 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
9fd0: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
9fe0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9ff0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a000: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a010: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
a020: 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 61        #region Pa
a030: 63 6b 61 67 65 20 43 6c 61 73 73 0d 0a 20 20 20  ckage Class..   
a040: 20 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 73 65       internal se
a050: 61 6c 65 64 20 63 6c 61 73 73 20 50 61 63 6b 61  aled class Packa
a060: 67 65 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  ge..        {.. 
a070: 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69             #regi
a080: 6f 6e 20 50 75 62 6c 69 63 20 43 6f 6e 73 74 72  on Public Constr
a090: 75 63 74 6f 72 73 0d 0a 20 20 20 20 20 20 20 20  uctors..        
a0a0: 20 20 20 20 70 75 62 6c 69 63 20 50 61 63 6b 61      public Packa
a0b0: 67 65 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ge()..          
a0c0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
a0d0: 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69       // do nothi
a0e0: 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ng...           
a0f0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
a100: 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
a110: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
a120: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a130: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a140: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a150: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
a160: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65  .            #re
a170: 67 69 6f 6e 20 50 75 62 6c 69 63 20 50 72 6f 70  gion Public Prop
a180: 65 72 74 69 65 73 0d 0a 20 20 20 20 20 20 20 20  erties..        
a190: 20 20 20 20 70 72 69 76 61 74 65 20 47 75 69 64      private Guid
a1a0: 20 70 61 63 6b 61 67 65 49 64 3b 0d 0a 20 20 20   packageId;..   
a1b0: 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
a1c0: 47 75 69 64 20 50 61 63 6b 61 67 65 49 64 0d 0a  Guid PackageId..
a1d0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
a1e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67                 g
a1f0: 65 74 20 7b 20 72 65 74 75 72 6e 20 70 61 63 6b  et { return pack
a200: 61 67 65 49 64 3b 20 7d 0d 0a 20 20 20 20 20 20  ageId; }..      
a210: 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20            set { 
a220: 70 61 63 6b 61 67 65 49 64 20 3d 20 76 61 6c 75  packageId = valu
a230: 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  e; }..          
a240: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
a250: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
a260: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a270: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a280: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a290: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
a2a0: 20 20 20 20 20 20 70 72 69 76 61 74 65 20 47 75        private Gu
a2b0: 69 64 20 73 65 72 76 69 63 65 49 64 3b 0d 0a 20  id serviceId;.. 
a2c0: 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
a2d0: 63 20 47 75 69 64 20 53 65 72 76 69 63 65 49 64  c Guid ServiceId
a2e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
a2f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
a300: 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 73 65   get { return se
a310: 72 76 69 63 65 49 64 3b 20 7d 0d 0a 20 20 20 20  rviceId; }..    
a320: 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
a330: 7b 20 73 65 72 76 69 63 65 49 64 20 3d 20 76 61  { serviceId = va
a340: 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  lue; }..        
a350: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
a360: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
a370: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a380: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a390: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a3a0: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
a3b0: 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
a3c0: 47 75 69 64 20 64 61 74 61 53 6f 75 72 63 65 49  Guid dataSourceI
a3d0: 64 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d;..            
a3e0: 70 75 62 6c 69 63 20 47 75 69 64 20 44 61 74 61  public Guid Data
a3f0: 53 6f 75 72 63 65 49 64 0d 0a 20 20 20 20 20 20  SourceId..      
a400: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
a410: 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72           get { r
a420: 65 74 75 72 6e 20 64 61 74 61 53 6f 75 72 63 65  eturn dataSource
a430: 49 64 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  Id; }..         
a440: 20 20 20 20 20 20 20 73 65 74 20 7b 20 64 61 74         set { dat
a450: 61 53 6f 75 72 63 65 49 64 20 3d 20 76 61 6c 75  aSourceId = valu
a460: 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  e; }..          
a470: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
a480: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
a490: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a4a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a4b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a4c0: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
a4d0: 20 20 20 20 20 20 70 72 69 76 61 74 65 20 47 75        private Gu
a4e0: 69 64 20 64 61 74 61 50 72 6f 76 69 64 65 72 49  id dataProviderI
a4f0: 64 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d;..            
a500: 70 75 62 6c 69 63 20 47 75 69 64 20 44 61 74 61  public Guid Data
a510: 50 72 6f 76 69 64 65 72 49 64 0d 0a 20 20 20 20  ProviderId..    
a520: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
a530: 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b             get {
a540: 20 72 65 74 75 72 6e 20 64 61 74 61 50 72 6f 76   return dataProv
a550: 69 64 65 72 49 64 3b 20 7d 0d 0a 20 20 20 20 20  iderId; }..     
a560: 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b             set {
a570: 20 64 61 74 61 50 72 6f 76 69 64 65 72 49 64 20   dataProviderId 
a580: 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20  = value; }..    
a590: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
a5a0: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
a5b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a5c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a5d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a5e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
a5f0: 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
a600: 61 74 65 20 47 75 69 64 20 61 64 6f 4e 65 74 54  ate Guid adoNetT
a610: 65 63 68 6e 6f 6c 6f 67 79 49 64 3b 0d 0a 20 20  echnologyId;..  
a620: 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
a630: 20 47 75 69 64 20 41 64 6f 4e 65 74 54 65 63 68   Guid AdoNetTech
a640: 6e 6f 6c 6f 67 79 49 64 0d 0a 20 20 20 20 20 20  nologyId..      
a650: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
a660: 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72           get { r
a670: 65 74 75 72 6e 20 61 64 6f 4e 65 74 54 65 63 68  eturn adoNetTech
a680: 6e 6f 6c 6f 67 79 49 64 3b 20 7d 0d 0a 20 20 20  nologyId; }..   
a690: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74               set
a6a0: 20 7b 20 61 64 6f 4e 65 74 54 65 63 68 6e 6f 6c   { adoNetTechnol
a6b0: 6f 67 79 49 64 20 3d 20 76 61 6c 75 65 3b 20 7d  ogyId = value; }
a6c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
a6d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e  .            #en
a6e0: 64 72 65 67 69 6f 6e 0d 0a 20 20 20 20 20 20 20  dregion..       
a6f0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64   }..        #end
a700: 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
a710: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
a720: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a730: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a740: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a750: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
a760: 20 20 20 20 20 23 72 65 67 69 6f 6e 20 43 6f 6e       #region Con
a770: 66 69 67 75 72 61 74 69 6f 6e 20 43 6c 61 73 73  figuration Class
a780: 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
a790: 65 20 73 65 61 6c 65 64 20 63 6c 61 73 73 20 43  e sealed class C
a7a0: 6f 6e 66 69 67 75 72 61 74 69 6f 6e 0d 0a 20 20  onfiguration..  
a7b0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
a7c0: 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 72 69       #region Pri
a7d0: 76 61 74 65 20 43 6f 6e 73 74 61 6e 74 73 0d 0a  vate Constants..
a7e0: 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
a7f0: 61 74 65 20 63 6f 6e 73 74 20 63 68 61 72 20 53  ate const char S
a800: 77 69 74 63 68 20 3d 20 27 2d 27 3b 0d 0a 20 20  witch = '-';..  
a810: 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
a820: 65 20 63 6f 6e 73 74 20 63 68 61 72 20 41 6c 74  e const char Alt
a830: 53 77 69 74 63 68 20 3d 20 27 2f 27 3b 0d 0a 0d  Switch = '/';...
a840: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
a850: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a860: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a870: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a880: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a890: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
a8a0: 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 72  private static r
a8b0: 65 61 64 6f 6e 6c 79 20 63 68 61 72 5b 5d 20 53  eadonly char[] S
a8c0: 77 69 74 63 68 43 68 61 72 73 20 3d 20 7b 0d 0a  witchChars = {..
a8d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a8e0: 53 77 69 74 63 68 2c 20 41 6c 74 53 77 69 74 63  Switch, AltSwitc
a8f0: 68 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  h..            }
a900: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  ;..            #
a910: 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
a920: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
a930: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a940: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a950: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a960: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
a970: 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67              #reg
a980: 69 6f 6e 20 50 72 69 76 61 74 65 20 43 6f 6e 73  ion Private Cons
a990: 74 72 75 63 74 6f 72 73 0d 0a 20 20 20 20 20 20  tructors..      
a9a0: 20 20 20 20 20 20 70 72 69 76 61 74 65 20 43 6f        private Co
a9b0: 6e 66 69 67 75 72 61 74 69 6f 6e 28 0d 0a 20 20  nfiguration(..  
a9c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 41 73                As
a9d0: 73 65 6d 62 6c 79 20 61 73 73 65 6d 62 6c 79 2c  sembly assembly,
a9e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
a9f0: 20 20 73 74 72 69 6e 67 20 6c 6f 67 46 69 6c 65    string logFile
aa00: 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  Name,..         
aa10: 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 64 69         string di
aa20: 72 65 63 74 6f 72 79 2c 0d 0a 20 20 20 20 20 20  rectory,..      
aa30: 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
aa40: 20 63 6f 72 65 46 69 6c 65 4e 61 6d 65 2c 0d 0a   coreFileName,..
aa50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
aa60: 73 74 72 69 6e 67 20 6c 69 6e 71 46 69 6c 65 4e  string linqFileN
aa70: 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ame,..          
aa80: 20 20 20 20 20 20 73 74 72 69 6e 67 20 64 65 73        string des
aa90: 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 2c 0d 0a  ignerFileName,..
aaa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
aab0: 73 74 72 69 6e 67 20 74 72 61 63 65 46 6f 72 6d  string traceForm
aac0: 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at,..           
aad0: 20 20 20 20 20 49 6e 73 74 61 6c 6c 46 6c 61 67       InstallFlag
aae0: 73 20 69 6e 73 74 61 6c 6c 46 6c 61 67 73 2c 0d  s installFlags,.
aaf0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
ab00: 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 20 74   TracePriority t
ab10: 72 61 63 65 50 72 69 6f 72 69 74 79 2c 0d 0a 20  racePriority,.. 
ab20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
ab30: 6f 6f 6c 20 69 6e 73 74 61 6c 6c 2c 0d 0a 20 20  ool install,..  
ab40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
ab50: 6f 6c 20 6e 6f 44 65 73 6b 74 6f 70 2c 0d 0a 20  ol noDesktop,.. 
ab60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
ab70: 6f 6f 6c 20 6e 6f 43 6f 6d 70 61 63 74 2c 0d 0a  ool noCompact,..
ab80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ab90: 62 6f 6f 6c 20 6e 6f 4e 65 74 46 78 32 30 2c 0d  bool noNetFx20,.
aba0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
abb0: 20 62 6f 6f 6c 20 6e 6f 4e 65 74 46 78 34 30 2c   bool noNetFx40,
abc0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
abd0: 20 20 62 6f 6f 6c 20 6e 6f 56 73 32 30 30 38 2c    bool noVs2008,
abe0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
abf0: 20 20 62 6f 6f 6c 20 6e 6f 56 73 32 30 31 30 2c    bool noVs2010,
ac00: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
ac10: 20 20 62 6f 6f 6c 20 6e 6f 54 72 61 63 65 2c 0d    bool noTrace,.
ac20: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
ac30: 20 62 6f 6f 6c 20 6e 6f 43 6f 6e 73 6f 6c 65 2c   bool noConsole,
ac40: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
ac50: 20 20 62 6f 6f 6c 20 6e 6f 4c 6f 67 2c 0d 0a 20    bool noLog,.. 
ac60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
ac70: 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20  ool whatIf,..   
ac80: 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f               boo
ac90: 6c 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20  l verbose,..    
aca0: 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
acb0: 20 63 6f 6e 66 69 72 6d 0d 0a 20 20 20 20 20 20   confirm..      
acc0: 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
acd0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
ace0: 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73              this
acf0: 2e 61 73 73 65 6d 62 6c 79 20 3d 20 61 73 73 65  .assembly = asse
ad00: 6d 62 6c 79 3b 0d 0a 20 20 20 20 20 20 20 20 20  mbly;..         
ad10: 20 20 20 20 20 20 20 74 68 69 73 2e 6c 6f 67 46         this.logF
ad20: 69 6c 65 4e 61 6d 65 20 3d 20 6c 6f 67 46 69 6c  ileName = logFil
ad30: 65 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20  eName;..        
ad40: 20 20 20 20 20 20 20 20 74 68 69 73 2e 64 69 72          this.dir
ad50: 65 63 74 6f 72 79 20 3d 20 64 69 72 65 63 74 6f  ectory = directo
ad60: 72 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ry;..           
ad70: 20 20 20 20 20 74 68 69 73 2e 63 6f 72 65 46 69       this.coreFi
ad80: 6c 65 4e 61 6d 65 20 3d 20 63 6f 72 65 46 69 6c  leName = coreFil
ad90: 65 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20  eName;..        
ada0: 20 20 20 20 20 20 20 20 74 68 69 73 2e 6c 69 6e          this.lin
adb0: 71 46 69 6c 65 4e 61 6d 65 20 3d 20 6c 69 6e 71  qFileName = linq
adc0: 46 69 6c 65 4e 61 6d 65 3b 0d 0a 20 20 20 20 20  FileName;..     
add0: 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e             this.
ade0: 64 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65  designerFileName
adf0: 20 3d 20 64 65 73 69 67 6e 65 72 46 69 6c 65 4e   = designerFileN
ae00: 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ame;..          
ae10: 20 20 20 20 20 20 74 68 69 73 2e 74 72 61 63 65        this.trace
ae20: 46 6f 72 6d 61 74 20 3d 20 74 72 61 63 65 46 6f  Format = traceFo
ae30: 72 6d 61 74 3b 0d 0a 20 20 20 20 20 20 20 20 20  rmat;..         
ae40: 20 20 20 20 20 20 20 74 68 69 73 2e 69 6e 73 74         this.inst
ae50: 61 6c 6c 46 6c 61 67 73 20 3d 20 69 6e 73 74 61  allFlags = insta
ae60: 6c 6c 46 6c 61 67 73 3b 0d 0a 20 20 20 20 20 20  llFlags;..      
ae70: 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 74            this.t
ae80: 72 61 63 65 50 72 69 6f 72 69 74 79 20 3d 20 74  racePriority = t
ae90: 72 61 63 65 50 72 69 6f 72 69 74 79 3b 0d 0a 20  racePriority;.. 
aea0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
aeb0: 68 69 73 2e 69 6e 73 74 61 6c 6c 20 3d 20 69 6e  his.install = in
aec0: 73 74 61 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20  stall;..        
aed0: 20 20 20 20 20 20 20 20 74 68 69 73 2e 6e 6f 44          this.noD
aee0: 65 73 6b 74 6f 70 20 3d 20 6e 6f 44 65 73 6b 74  esktop = noDeskt
aef0: 6f 70 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  op;..           
af00: 20 20 20 20 20 74 68 69 73 2e 6e 6f 43 6f 6d 70       this.noComp
af10: 61 63 74 20 3d 20 6e 6f 43 6f 6d 70 61 63 74 3b  act = noCompact;
af20: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
af30: 20 20 74 68 69 73 2e 6e 6f 4e 65 74 46 78 32 30    this.noNetFx20
af40: 20 3d 20 6e 6f 4e 65 74 46 78 32 30 3b 0d 0a 20   = noNetFx20;.. 
af50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
af60: 68 69 73 2e 6e 6f 4e 65 74 46 78 34 30 20 3d 20  his.noNetFx40 = 
af70: 6e 6f 4e 65 74 46 78 34 30 3b 0d 0a 20 20 20 20  noNetFx40;..    
af80: 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73              this
af90: 2e 6e 6f 56 73 32 30 30 38 20 3d 20 6e 6f 56 73  .noVs2008 = noVs
afa0: 32 30 30 38 3b 0d 0a 20 20 20 20 20 20 20 20 20  2008;..         
afb0: 20 20 20 20 20 20 20 74 68 69 73 2e 6e 6f 56 73         this.noVs
afc0: 32 30 31 30 20 3d 20 6e 6f 56 73 32 30 31 30 3b  2010 = noVs2010;
afd0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
afe0: 20 20 74 68 69 73 2e 6e 6f 54 72 61 63 65 20 3d    this.noTrace =
aff0: 20 6e 6f 54 72 61 63 65 3b 0d 0a 20 20 20 20 20   noTrace;..     
b000: 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e             this.
b010: 6e 6f 43 6f 6e 73 6f 6c 65 20 3d 20 6e 6f 43 6f  noConsole = noCo
b020: 6e 73 6f 6c 65 3b 0d 0a 20 20 20 20 20 20 20 20  nsole;..        
b030: 20 20 20 20 20 20 20 20 74 68 69 73 2e 6e 6f 4c          this.noL
b040: 6f 67 20 3d 20 6e 6f 4c 6f 67 3b 0d 0a 20 20 20  og = noLog;..   
b050: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69               thi
b060: 73 2e 77 68 61 74 49 66 20 3d 20 77 68 61 74 49  s.whatIf = whatI
b070: 66 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f;..            
b080: 20 20 20 20 74 68 69 73 2e 76 65 72 62 6f 73 65      this.verbose
b090: 20 3d 20 76 65 72 62 6f 73 65 3b 0d 0a 20 20 20   = verbose;..   
b0a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69               thi
b0b0: 73 2e 63 6f 6e 66 69 72 6d 20 3d 20 63 6f 6e 66  s.confirm = conf
b0c0: 69 72 6d 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  irm;..          
b0d0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
b0e0: 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
b0f0: 20 20 20 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
b140: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 72  ..            #r
b150: 65 67 69 6f 6e 20 50 72 69 76 61 74 65 20 53 74  egion Private St
b160: 61 74 69 63 20 4d 65 74 68 6f 64 73 0d 0a 20 20  atic Methods..  
b170: 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
b180: 65 20 73 74 61 74 69 63 20 76 6f 69 64 20 47 65  e static void Ge
b190: 74 44 65 66 61 75 6c 74 46 69 6c 65 4e 61 6d 65  tDefaultFileName
b1a0: 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s(..            
b1b0: 20 20 20 20 72 65 66 20 73 74 72 69 6e 67 20 64      ref string d
b1c0: 69 72 65 63 74 6f 72 79 2c 0d 0a 20 20 20 20 20  irectory,..     
b1d0: 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20 73             ref s
b1e0: 74 72 69 6e 67 20 63 6f 72 65 46 69 6c 65 4e 61  tring coreFileNa
b1f0: 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me,..           
b200: 20 20 20 20 20 72 65 66 20 73 74 72 69 6e 67 20       ref string 
b210: 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 2c 0d 0a 20  linqFileName,.. 
b220: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
b230: 65 66 20 73 74 72 69 6e 67 20 64 65 73 69 67 6e  ef string design
b240: 65 72 46 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20  erFileName..    
b250: 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
b260: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
b270: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
b280: 20 28 74 68 69 73 41 73 73 65 6d 62 6c 79 20 3d   (thisAssembly =
b290: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
b2a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
b2b0: 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  urn;....        
b2c0: 20 20 20 20 20 20 20 20 64 69 72 65 63 74 6f 72          director
b2d0: 79 20 3d 20 50 61 74 68 2e 47 65 74 44 69 72 65  y = Path.GetDire
b2e0: 63 74 6f 72 79 4e 61 6d 65 28 74 68 69 73 41 73  ctoryName(thisAs
b2f0: 73 65 6d 62 6c 79 2e 4c 6f 63 61 74 69 6f 6e 29  sembly.Location)
b300: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
b310: 20 20 20 20 20 69 66 20 28 53 74 72 69 6e 67 2e       if (String.
b320: 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 64 69  IsNullOrEmpty(di
b330: 72 65 63 74 6f 72 79 29 29 0d 0a 20 20 20 20 20  rectory))..     
b340: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
b350: 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20  eturn;....      
b360: 20 20 20 20 20 20 20 20 20 20 63 6f 72 65 46 69            coreFi
b370: 6c 65 4e 61 6d 65 20 3d 20 50 61 74 68 2e 43 6f  leName = Path.Co
b380: 6d 62 69 6e 65 28 64 69 72 65 63 74 6f 72 79 2c  mbine(directory,
b390: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
b3a0: 20 20 20 20 20 20 49 6e 73 74 61 6c 6c 65 72 2e        Installer.
b3b0: 43 6f 72 65 46 69 6c 65 4e 61 6d 65 29 3b 0d 0a  CoreFileName);..
b3c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
b3d0: 20 20 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 20 3d    linqFileName =
b3e0: 20 50 61 74 68 2e 43 6f 6d 62 69 6e 65 28 64 69   Path.Combine(di
b3f0: 72 65 63 74 6f 72 79 2c 0d 0a 20 20 20 20 20 20  rectory,..      
b400: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 49 6e                In
b410: 73 74 61 6c 6c 65 72 2e 4c 69 6e 71 46 69 6c 65  staller.LinqFile
b420: 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  Name);....      
b430: 20 20 20 20 20 20 20 20 20 20 64 65 73 69 67 6e            design
b440: 65 72 46 69 6c 65 4e 61 6d 65 20 3d 20 50 61 74  erFileName = Pat
b450: 68 2e 43 6f 6d 62 69 6e 65 28 64 69 72 65 63 74  h.Combine(direct
b460: 6f 72 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ory,..          
b470: 20 20 20 20 20 20 20 20 20 20 49 6e 73 74 61 6c            Instal
b480: 6c 65 72 2e 44 65 73 69 67 6e 65 72 46 69 6c 65  ler.DesignerFile
b490: 4e 61 6d 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  Name);..        
b4a0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
b4b0: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
b4c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b4d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b4e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b4f0: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
b500: 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
b510: 73 74 61 74 69 63 20 62 6f 6f 6c 20 43 68 65 63  static bool Chec
b520: 6b 4f 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20  kOption(..      
b530: 20 20 20 20 20 20 20 20 20 20 72 65 66 20 73 74            ref st
b540: 72 69 6e 67 20 61 72 67 0d 0a 20 20 20 20 20 20  ring arg..      
b550: 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
b560: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
b570: 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
b580: 6e 67 20 72 65 73 75 6c 74 20 3d 20 61 72 67 3b  ng result = arg;
b590: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
b5a0: 20 20 20 20 69 66 20 28 21 53 74 72 69 6e 67 2e      if (!String.
b5b0: 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 72 65  IsNullOrEmpty(re
b5c0: 73 75 6c 74 29 29 0d 0a 20 20 20 20 20 20 20 20  sult))..        
b5d0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
b5e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
b5f0: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
b600: 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20         // NOTE: 
b610: 52 65 6d 6f 76 65 20 61 6c 6c 20 6c 65 61 64 69  Remove all leadi
b620: 6e 67 20 73 77 69 74 63 68 20 63 68 61 72 73 2e  ng switch chars.
b630: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
b640: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
b650: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
b660: 73 75 6c 74 20 3d 20 72 65 73 75 6c 74 2e 54 72  sult = result.Tr
b670: 69 6d 53 74 61 72 74 28 53 77 69 74 63 68 43 68  imStart(SwitchCh
b680: 61 72 73 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ars);....       
b690: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
b6a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
b6b0: 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 48 6f       // NOTE: Ho
b6c0: 77 20 6d 61 6e 79 20 63 68 61 72 73 20 77 65 72  w many chars wer
b6d0: 65 20 72 65 6d 6f 76 65 64 3f 0d 0a 20 20 20 20  e removed?..    
b6e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b6f0: 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
b700: 20 20 20 20 20 20 20 20 69 6e 74 20 63 6f 75 6e          int coun
b710: 74 20 3d 20 61 72 67 2e 4c 65 6e 67 74 68 20 2d  t = arg.Length -
b720: 20 72 65 73 75 6c 74 2e 4c 65 6e 67 74 68 3b 0d   result.Length;.
b730: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
b740: 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
b750: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
b760: 2f 20 4e 4f 54 45 3a 20 57 61 73 20 74 68 65 72  / NOTE: Was ther
b770: 65 20 61 74 20 6c 65 61 73 74 20 6f 6e 65 3f 0d  e at least one?.
b780: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
b790: 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
b7a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
b7b0: 28 63 6f 75 6e 74 20 3e 20 30 29 0d 0a 20 20 20  (count > 0)..   
b7c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b7d0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
b7e0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
b7f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b800: 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a          // NOTE:
b810: 20 4f 6b 2c 20 72 65 70 6c 61 63 65 20 74 68 65   Ok, replace the
b820: 69 72 20 6f 72 69 67 69 6e 61 6c 0d 0a 20 20 20  ir original..   
b830: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b840: 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 61 72       //       ar
b850: 67 75 6d 65 6e 74 2e 0d 0a 20 20 20 20 20 20 20  gument...       
b860: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b870: 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
b880: 20 20 20 20 20 20 20 20 20 20 20 20 20 61 72 67               arg
b890: 20 3d 20 72 65 73 75 6c 74 3b 0d 0a 0d 0a 20 20   = result;....  
b8a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b8b0: 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
b8c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b8d0: 20 20 2f 2f 20 4e 4f 54 45 3a 20 59 65 73 2c 20    // NOTE: Yes, 
b8e0: 74 68 69 73 20 69 73 20 61 20 73 77 69 74 63 68  this is a switch
b8f0: 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
b900: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
b910: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b920: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72         return tr
b930: 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
b940: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
b950: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
b960: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
b970: 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
b980: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
b990: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
b9a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b9b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b9c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b9d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
b9e0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
b9f0: 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 62  private static b
ba00: 6f 6f 6c 20 4d 61 74 63 68 4f 70 74 69 6f 6e 28  ool MatchOption(
ba10: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
ba20: 20 20 73 74 72 69 6e 67 20 61 72 67 2c 0d 0a 20    string arg,.. 
ba30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
ba40: 74 72 69 6e 67 20 6f 70 74 69 6f 6e 0d 0a 20 20  tring option..  
ba50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d                ).
ba60: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
ba70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ba80: 69 66 20 28 28 61 72 67 20 3d 3d 20 6e 75 6c 6c  if ((arg == null
ba90: 29 20 7c 7c 20 28 6f 70 74 69 6f 6e 20 3d 3d 20  ) || (option == 
baa0: 6e 75 6c 6c 29 29 0d 0a 20 20 20 20 20 20 20 20  null))..        
bab0: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
bac0: 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20  rn false;....   
bad0: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
bae0: 75 72 6e 20 53 74 72 69 6e 67 2e 43 6f 6d 70 61  urn String.Compa
baf0: 72 65 28 61 72 67 2c 20 30 2c 20 6f 70 74 69 6f  re(arg, 0, optio
bb00: 6e 2c 20 30 2c 0d 0a 20 20 20 20 20 20 20 20 20  n, 0,..         
bb10: 20 20 20 20 20 20 20 20 20 20 20 61 72 67 2e 4c             arg.L
bb20: 65 6e 67 74 68 2c 20 53 74 72 69 6e 67 43 6f 6d  ength, StringCom
bb30: 70 61 72 69 73 6f 6e 2e 4f 72 64 69 6e 61 6c 49  parison.OrdinalI
bb40: 67 6e 6f 72 65 43 61 73 65 29 20 3d 3d 20 30 3b  gnoreCase) == 0;
bb50: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
bb60: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
bb70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bb80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bb90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bba0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bbb0: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
bbc0: 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
bbd0: 20 62 6f 6f 6c 3f 20 50 61 72 73 65 42 6f 6f 6c   bool? ParseBool
bbe0: 65 61 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ean(..          
bbf0: 20 20 20 20 20 20 73 74 72 69 6e 67 20 74 65 78        string tex
bc00: 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  t..             
bc10: 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20     )..          
bc20: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
bc30: 20 20 20 20 20 69 66 20 28 21 53 74 72 69 6e 67       if (!String
bc40: 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 74  .IsNullOrEmpty(t
bc50: 65 78 74 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ext))..         
bc60: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
bc70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
bc80: 6f 6c 20 76 61 6c 75 65 3b 0d 0a 0d 0a 20 20 20  ol value;....   
bc90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bca0: 20 69 66 20 28 62 6f 6f 6c 2e 54 72 79 50 61 72   if (bool.TryPar
bcb0: 73 65 28 74 65 78 74 2c 20 6f 75 74 20 76 61 6c  se(text, out val
bcc0: 75 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ue))..          
bcd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
bce0: 74 75 72 6e 20 76 61 6c 75 65 3b 0d 0a 20 20 20  turn value;..   
bcf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
bd00: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
bd10: 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a    return null;..
bd20: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
bd30: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
bd40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bd50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bd60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bd70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
bd80: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
bd90: 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 6f  private static o
bda0: 62 6a 65 63 74 20 50 61 72 73 65 45 6e 75 6d 28  bject ParseEnum(
bdb0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
bdc0: 20 20 54 79 70 65 20 65 6e 75 6d 54 79 70 65 2c    Type enumType,
bdd0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
bde0: 20 20 73 74 72 69 6e 67 20 74 65 78 74 2c 0d 0a    string text,..
bdf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
be00: 62 6f 6f 6c 20 6e 6f 43 61 73 65 0d 0a 20 20 20  bool noCase..   
be10: 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a               )..
be20: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
be30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
be40: 66 20 28 28 65 6e 75 6d 54 79 70 65 20 3d 3d 20  f ((enumType == 
be50: 6e 75 6c 6c 29 20 7c 7c 20 21 65 6e 75 6d 54 79  null) || !enumTy
be60: 70 65 2e 49 73 45 6e 75 6d 29 0d 0a 20 20 20 20  pe.IsEnum)..    
be70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
be80: 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a  return null;....
be90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bea0: 69 66 20 28 21 53 74 72 69 6e 67 2e 49 73 4e 75  if (!String.IsNu
beb0: 6c 6c 4f 72 45 6d 70 74 79 28 74 65 78 74 29 29  llOrEmpty(text))
bec0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
bed0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
bee0: 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20           try..  
bef0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bf00: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
bf10: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
bf20: 75 72 6e 20 45 6e 75 6d 2e 50 61 72 73 65 28 65  urn Enum.Parse(e
bf30: 6e 75 6d 54 79 70 65 2c 20 74 65 78 74 2c 20 6e  numType, text, n
bf40: 6f 43 61 73 65 29 3b 0d 0a 20 20 20 20 20 20 20  oCase);..       
bf50: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
bf60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bf70: 20 20 20 20 63 61 74 63 68 0d 0a 20 20 20 20 20      catch..     
bf80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
bf90: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
bfa0: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20            // do 
bfb0: 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20  nothing...      
bfc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
bfd0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
bfe0: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
bff0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c        return nul
c000: 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l;..            
c010: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  }..            #
c020: 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
c030: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
c040: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c050: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c060: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c070: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
c080: 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67              #reg
c090: 69 6f 6e 20 50 75 62 6c 69 63 20 53 74 61 74 69  ion Public Stati
c0a0: 63 20 4d 65 74 68 6f 64 73 0d 0a 20 20 20 20 20  c Methods..     
c0b0: 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74         public st
c0c0: 61 74 69 63 20 43 6f 6e 66 69 67 75 72 61 74 69  atic Configurati
c0d0: 6f 6e 20 43 72 65 61 74 65 44 65 66 61 75 6c 74  on CreateDefault
c0e0: 28 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ()..            
c0f0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
c100: 20 20 20 73 74 72 69 6e 67 20 64 69 72 65 63 74     string direct
c110: 6f 72 79 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20  ory = null;..   
c120: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72               str
c130: 69 6e 67 20 63 6f 72 65 46 69 6c 65 4e 61 6d 65  ing coreFileName
c140: 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20   = null;..      
c150: 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
c160: 20 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 20 3d 20   linqFileName = 
c170: 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20  null;..         
c180: 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 64 65         string de
c190: 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 20 3d  signerFileName =
c1a0: 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20   null;....      
c1b0: 20 20 20 20 20 20 20 20 20 20 47 65 74 44 65 66            GetDef
c1c0: 61 75 6c 74 46 69 6c 65 4e 61 6d 65 73 28 0d 0a  aultFileNames(..
c1d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c1e0: 20 20 20 20 72 65 66 20 64 69 72 65 63 74 6f 72      ref director
c1f0: 79 2c 20 72 65 66 20 63 6f 72 65 46 69 6c 65 4e  y, ref coreFileN
c200: 61 6d 65 2c 20 72 65 66 20 6c 69 6e 71 46 69 6c  ame, ref linqFil
c210: 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20  eName,..        
c220: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20              ref 
c230: 64 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65  designerFileName
c240: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
c250: 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 65 77        return new
c260: 20 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 28 74   Configuration(t
c270: 68 69 73 41 73 73 65 6d 62 6c 79 2c 20 6e 75 6c  hisAssembly, nul
c280: 6c 2c 20 64 69 72 65 63 74 6f 72 79 2c 0d 0a 20  l, directory,.. 
c290: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c2a0: 20 20 20 63 6f 72 65 46 69 6c 65 4e 61 6d 65 2c     coreFileName,
c2b0: 20 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 2c 20 64   linqFileName, d
c2c0: 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 2c  esignerFileName,
c2d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
c2e0: 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 54        TraceOps.T
c2f0: 72 61 63 65 46 6f 72 6d 61 74 2c 20 49 6e 73 74  raceFormat, Inst
c300: 61 6c 6c 46 6c 61 67 73 2e 44 65 66 61 75 6c 74  allFlags.Default
c310: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
c320: 20 20 20 20 20 20 20 54 72 61 63 65 50 72 69 6f         TracePrio
c330: 72 69 74 79 2e 44 65 66 61 75 6c 74 2c 20 74 72  rity.Default, tr
c340: 75 65 2c 20 66 61 6c 73 65 2c 20 74 72 75 65 2c  ue, false, true,
c350: 20 66 61 6c 73 65 2c 20 66 61 6c 73 65 2c 0d 0a   false, false,..
c360: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c370: 20 20 20 20 66 61 6c 73 65 2c 20 66 61 6c 73 65      false, false
c380: 2c 20 66 61 6c 73 65 2c 20 66 61 6c 73 65 2c 20  , false, false, 
c390: 66 61 6c 73 65 2c 20 74 72 75 65 2c 20 74 72 75  false, true, tru
c3a0: 65 2c 20 66 61 6c 73 65 29 3b 0d 0a 20 20 20 20  e, false);..    
c3b0: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
c3c0: 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
c3d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c3e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c3f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
c400: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
c410: 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
c420: 69 63 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 46  ic static bool F
c430: 72 6f 6d 41 72 67 73 28 0d 0a 20 20 20 20 20 20  romArgs(..      
c440: 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
c450: 5b 5d 20 61 72 67 73 2c 0d 0a 20 20 20 20 20 20  [] args,..      
c460: 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 73            bool s
c470: 74 72 69 63 74 2c 0d 0a 20 20 20 20 20 20 20 20  trict,..        
c480: 20 20 20 20 20 20 20 20 72 65 66 20 43 6f 6e 66          ref Conf
c490: 69 67 75 72 61 74 69 6f 6e 20 63 6f 6e 66 69 67  iguration config
c4a0: 75 72 61 74 69 6f 6e 2c 0d 0a 20 20 20 20 20 20  uration,..      
c4b0: 20 20 20 20 20 20 20 20 20 20 72 65 66 20 73 74            ref st
c4c0: 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20 20  ring error..    
c4d0: 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
c4e0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
c4f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
c500: 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  y..             
c510: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
c520: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 61 72            if (ar
c530: 67 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  gs == null)..   
c540: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c550: 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65       return true
c560: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
c570: 20 20 20 20 20 20 20 20 20 69 66 20 28 63 6f 6e           if (con
c580: 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20 6e 75  figuration == nu
c590: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
c5a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
c5b0: 66 69 67 75 72 61 74 69 6f 6e 20 3d 20 43 6f 6e  figuration = Con
c5c0: 66 69 67 75 72 61 74 69 6f 6e 2e 43 72 65 61 74  figuration.Creat
c5d0: 65 44 65 66 61 75 6c 74 28 29 3b 0d 0a 0d 0a 20  eDefault();.... 
c5e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c5f0: 20 20 20 69 6e 74 20 6c 65 6e 67 74 68 20 3d 20     int length = 
c600: 61 72 67 73 2e 4c 65 6e 67 74 68 3b 0d 0a 0d 0a  args.Length;....
c610: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c620: 20 20 20 20 66 6f 72 20 28 69 6e 74 20 69 6e 64      for (int ind
c630: 65 78 20 3d 20 30 3b 20 69 6e 64 65 78 20 3c 20  ex = 0; index < 
c640: 6c 65 6e 67 74 68 3b 20 69 6e 64 65 78 2b 2b 29  length; index++)
c650: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
c660: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
c670: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c680: 20 73 74 72 69 6e 67 20 61 72 67 20 3d 20 61 72   string arg = ar
c690: 67 73 5b 69 6e 64 65 78 5d 3b 0d 0a 0d 0a 20 20  gs[index];....  
c6a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c6b0: 20 20 20 20 20 20 69 66 20 28 53 74 72 69 6e 67        if (String
c6c0: 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 61  .IsNullOrEmpty(a
c6d0: 72 67 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  rg))..          
c6e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c6f0: 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 0d 0a 20    continue;.... 
c700: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c710: 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6e 65         string ne
c720: 77 41 72 67 20 3d 20 61 72 67 3b 0d 0a 0d 0a 20  wArg = arg;.... 
c730: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c740: 20 20 20 20 20 20 20 69 66 20 28 43 68 65 63 6b         if (Check
c750: 4f 70 74 69 6f 6e 28 72 65 66 20 6e 65 77 41 72  Option(ref newAr
c760: 67 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  g))..           
c770: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
c780: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c790: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
c7a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c7b0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e              // N
c7c0: 4f 54 45 3a 20 41 6c 6c 20 74 68 65 20 73 75 70  OTE: All the sup
c7d0: 70 6f 72 74 65 64 20 63 6f 6d 6d 61 6e 64 20 6c  ported command l
c7e0: 69 6e 65 20 6f 70 74 69 6f 6e 73 20 6d 75 73 74  ine options must
c7f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
c800: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
c810: 20 20 20 20 20 20 20 68 61 76 65 20 61 20 76 61         have a va
c820: 6c 75 65 3b 20 74 68 65 72 65 66 6f 72 65 2c 20  lue; therefore, 
c830: 61 74 74 65 6d 70 74 20 74 6f 20 61 64 76 61 6e  attempt to advan
c840: 63 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ce..            
c850: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c860: 2f 2f 20 20 20 20 20 20 20 74 6f 20 69 74 20 6e  //       to it n
c870: 6f 77 2e 20 20 49 66 20 77 65 20 66 61 69 6c 2c  ow.  If we fail,
c880: 20 77 65 20 61 72 65 20 64 6f 6e 65 2e 0d 0a 20   we are done... 
c890: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c8a0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
c8b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c8c0: 20 20 20 20 20 20 20 20 20 20 20 69 6e 64 65 78             index
c8d0: 2b 2b 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ++;....         
c8e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c8f0: 20 20 20 69 66 20 28 69 6e 64 65 78 20 3e 3d 20     if (index >= 
c900: 6c 65 6e 67 74 68 29 0d 0a 20 20 20 20 20 20 20  length)..       
c910: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c920: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
c930: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c940: 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
c950: 54 72 61 63 65 4f 70 73 2e 54 72 61 63 65 28 0d  TraceOps.Trace(.
c960: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
c970: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c980: 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69       TracePriori
c990: 74 79 2e 4c 6f 77 65 73 74 2c 0d 0a 20 20 20 20  ty.Lowest,..    
c9a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c9b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c9c0: 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53  traceCallback, S
c9d0: 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
c9e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c9f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ca00: 20 20 20 22 4d 69 73 73 69 6e 67 20 76 61 6c 75     "Missing valu
ca10: 65 20 66 6f 72 20 6f 70 74 69 6f 6e 3a 20 7b 30  e for option: {0
ca20: 7d 22 2c 0d 0a 20 20 20 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: 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70           ForDisp
ca50: 6c 61 79 28 61 72 67 29 29 2c 20 74 72 61 63 65  lay(arg)), trace
ca60: 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
ca70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ca80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
ca90: 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20   (strict)..     
caa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cab0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
cac0: 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a  eturn false;....
cad0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cae0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
caf0: 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20 20 20 20  break;..        
cb00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cb10: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
cb20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cb30: 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
cb40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cb50: 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 47 72       // NOTE: Gr
cb60: 61 62 20 74 68 65 20 74 65 78 74 75 61 6c 20 76  ab the textual v
cb70: 61 6c 75 65 20 6f 66 20 74 68 69 73 20 63 6f 6d  alue of this com
cb80: 6d 61 6e 64 20 6c 69 6e 65 0d 0a 20 20 20 20 20  mand line..     
cb90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cba0: 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
cbb0: 6f 70 74 69 6f 6e 2e 0d 0a 20 20 20 20 20 20 20  option...       
cbc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cbd0: 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
cbe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cbf0: 20 20 20 20 20 73 74 72 69 6e 67 20 74 65 78 74       string text
cc00: 20 3d 20 61 72 67 73 5b 69 6e 64 65 78 5d 3b 0d   = args[index];.
cc10: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
cc20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
cc30: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
cc40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
cc50: 2f 20 4e 4f 54 45 3a 20 46 69 67 75 72 65 20 6f  / NOTE: Figure o
cc60: 75 74 20 77 68 69 63 68 20 63 6f 6d 6d 61 6e 64  ut which command
cc70: 20 6c 69 6e 65 20 6f 70 74 69 6f 6e 20 74 68 69   line option thi
cc80: 73 20 69 73 0d 0a 20 20 20 20 20 20 20 20 20 20  s is..          
cc90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cca0: 20 20 2f 2f 20 20 20 20 20 20 20 28 62 61 73 65    //       (base
ccb0: 64 20 6f 6e 20 61 20 70 61 72 74 69 61 6c 20 6e  d on a partial n
ccc0: 61 6d 65 20 6d 61 74 63 68 29 20 61 6e 64 20 74  ame match) and t
ccd0: 68 65 6e 20 74 72 79 0d 0a 20 20 20 20 20 20 20  hen try..       
cce0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ccf0: 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 74 6f       //       to
cd00: 20 69 6e 74 65 72 70 72 65 74 20 74 68 65 20 74   interpret the t
cd10: 65 78 74 75 61 6c 20 76 61 6c 75 65 20 61 73 20  extual value as 
cd20: 74 68 65 20 63 6f 72 72 65 63 74 0d 0a 20 20 20  the correct..   
cd30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cd40: 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
cd50: 20 20 74 79 70 65 2e 0d 0a 20 20 20 20 20 20 20    type...       
cd60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cd70: 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
cd80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cd90: 20 20 20 20 20 69 66 20 28 4d 61 74 63 68 4f 70       if (MatchOp
cda0: 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 73 74  tion(newArg, "st
cdb0: 72 69 63 74 22 29 29 0d 0a 20 20 20 20 20 20 20  rict"))..       
cdc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cdd0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
cde0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cdf0: 20 20 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76 61          bool? va
ce00: 6c 75 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65  lue = ParseBoole
ce10: 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20  an(text);....   
ce20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ce30: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
ce40: 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d  (value == null).
ce50: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
ce60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ce70: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
ce80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ce90: 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
cea0: 54 72 61 63 65 4f 70 73 2e 54 72 61 63 65 28 0d  TraceOps.Trace(.
ceb0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
cec0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ced0: 20 20 20 20 20 20 20 20 20 54 72 61 63 65 50 72           TracePr
cee0: 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 0d 0a  iority.Lowest,..
cef0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cf00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cf10: 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c          traceCal
cf20: 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f  lback, String.Fo
cf30: 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
cf40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cf50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
cf60: 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c  Invalid {0} bool
cf70: 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c  ean value: {1}",
cf80: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
cf90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cfa0: 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73            ForDis
cfb0: 70 6c 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69  play(arg), ForDi
cfc0: 73 70 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20  splay(text)),.. 
cfd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cfe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cff0: 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
d000: 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
d010: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d020: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
d030: 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20   (strict)..     
d040: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d050: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d060: 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
d070: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
d080: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d090: 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65          continue
d0a0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
d0b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d0c0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
d0d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d0e0: 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
d0f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d100: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e              // N
d110: 4f 54 45 3a 20 41 6c 6c 6f 77 20 74 68 65 20 63  OTE: Allow the c
d120: 6f 6d 6d 61 6e 64 20 6c 69 6e 65 20 61 72 67 75  ommand line argu
d130: 6d 65 6e 74 73 20 74 6f 20 6f 76 65 72 72 69 64  ments to overrid
d140: 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
d150: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d160: 20 20 20 2f 2f 20 20 20 20 20 20 20 74 68 65 20     //       the 
d170: 22 73 74 72 69 63 74 6e 65 73 73 22 20 73 65 74  "strictness" set
d180: 74 69 6e 67 20 70 72 6f 76 69 64 65 64 20 62 79  ting provided by
d190: 20 6f 75 72 20 63 61 6c 6c 65 72 2e 0d 0a 20 20   our caller...  
d1a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d1b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
d1c0: 0d 0a 20 20 20 20 20 20 20 20 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 73 74 72 69 63 74 20 3d 20 28 62 6f 6f 6c    strict = (bool
d1f0: 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20  )value;..       
d200: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d210: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
d220: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d230: 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74      else if (Mat
d240: 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c  chOption(newArg,
d250: 20 22 6c 6f 67 46 69 6c 65 4e 61 6d 65 22 29 29   "logFileName"))
d260: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
d270: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
d280: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
d290: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d2a0: 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6c   configuration.l
d2b0: 6f 67 46 69 6c 65 4e 61 6d 65 20 3d 20 74 65 78  ogFileName = tex
d2c0: 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t;..            
d2d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d2e0: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
d2f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
d300: 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74  lse if (MatchOpt
d310: 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 64 69 72  ion(newArg, "dir
d320: 65 63 74 6f 72 79 22 29 29 0d 0a 20 20 20 20 20  ectory"))..     
d330: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d340: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
d350: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d360: 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67            config
d370: 75 72 61 74 69 6f 6e 2e 64 69 72 65 63 74 6f 72  uration.director
d380: 79 20 3d 20 74 65 78 74 3b 0d 0a 0d 0a 20 20 20  y = text;....   
d390: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d3a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
d3b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
d3c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d3d0: 20 2f 2f 20 4e 4f 54 45 3a 20 2a 53 50 45 43 49   // NOTE: *SPECI
d3e0: 41 4c 2a 20 4d 75 73 74 20 72 65 66 72 65 73 68  AL* Must refresh
d3f0: 20 74 68 65 20 66 69 6c 65 20 6e 61 6d 65 73 0d   the file names.
d400: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
d410: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d420: 20 2f 2f 20 20 20 20 20 20 20 68 65 72 65 20 62   //       here b
d430: 65 63 61 75 73 65 20 74 68 65 20 75 6e 64 65 72  ecause the under
d440: 6c 79 69 6e 67 20 64 69 72 65 63 74 6f 72 79 0d  lying directory.
d450: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
d460: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d470: 20 2f 2f 20 20 20 20 20 20 20 68 61 73 20 63 68   //       has ch
d480: 61 6e 67 65 64 2e 0d 0a 20 20 20 20 20 20 20 20  anged...        
d490: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d4a0: 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
d4b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d4c0: 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
d4d0: 6e 67 20 63 6f 72 65 46 69 6c 65 4e 61 6d 65 20  ng coreFileName 
d4e0: 3d 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e  = configuration.
d4f0: 63 6f 72 65 46 69 6c 65 4e 61 6d 65 3b 0d 0a 0d  coreFileName;...
d500: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
d510: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d520: 20 69 66 20 28 21 53 74 72 69 6e 67 2e 49 73 4e   if (!String.IsN
d530: 75 6c 6c 4f 72 45 6d 70 74 79 28 63 6f 72 65 46  ullOrEmpty(coreF
d540: 69 6c 65 4e 61 6d 65 29 29 0d 0a 20 20 20 20 20  ileName))..     
d550: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d560: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
d570: 6f 72 65 46 69 6c 65 4e 61 6d 65 20 3d 20 50 61  oreFileName = Pa
d580: 74 68 2e 47 65 74 46 69 6c 65 4e 61 6d 65 28 63  th.GetFileName(c
d590: 6f 72 65 46 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d  oreFileName);...
d5a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
d5b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d5c0: 20 69 66 20 28 53 74 72 69 6e 67 2e 49 73 4e 75   if (String.IsNu
d5d0: 6c 6c 4f 72 45 6d 70 74 79 28 63 6f 72 65 46 69  llOrEmpty(coreFi
d5e0: 6c 65 4e 61 6d 65 29 29 0d 0a 20 20 20 20 20 20  leName))..      
d5f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d600: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
d610: 72 65 46 69 6c 65 4e 61 6d 65 20 3d 20 49 6e 73  reFileName = Ins
d620: 74 61 6c 6c 65 72 2e 43 6f 72 65 46 69 6c 65 4e  taller.CoreFileN
d630: 61 6d 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ame;....        
d640: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d650: 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72          configur
d660: 61 74 69 6f 6e 2e 63 6f 72 65 46 69 6c 65 4e 61  ation.coreFileNa
d670: 6d 65 20 3d 20 50 61 74 68 2e 43 6f 6d 62 69 6e  me = Path.Combin
d680: 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
d690: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d6a0: 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72          configur
d6b0: 61 74 69 6f 6e 2e 64 69 72 65 63 74 6f 72 79 2c  ation.directory,
d6c0: 20 63 6f 72 65 46 69 6c 65 4e 61 6d 65 29 3b 0d   coreFileName);.
d6d0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
d6e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d6f0: 20 20 20 73 74 72 69 6e 67 20 6c 69 6e 71 46 69     string linqFi
d700: 6c 65 4e 61 6d 65 20 3d 20 63 6f 6e 66 69 67 75  leName = configu
d710: 72 61 74 69 6f 6e 2e 6c 69 6e 71 46 69 6c 65 4e  ration.linqFileN
d720: 61 6d 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ame;....        
d730: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d740: 20 20 20 20 20 20 20 20 69 66 20 28 21 53 74 72          if (!Str
d750: 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74  ing.IsNullOrEmpt
d760: 79 28 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 29 29  y(linqFileName))
d770: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
d780: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d790: 20 20 20 20 20 20 6c 69 6e 71 46 69 6c 65 4e 61        linqFileNa
d7a0: 6d 65 20 3d 20 50 61 74 68 2e 47 65 74 46 69 6c  me = Path.GetFil
d7b0: 65 4e 61 6d 65 28 6c 69 6e 71 46 69 6c 65 4e 61  eName(linqFileNa
d7c0: 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  me);....        
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 69 66 20 28 53 74 72 69          if (Stri
d7f0: 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79  ng.IsNullOrEmpty
d800: 28 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 29 29 0d  (linqFileName)).
d810: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
d820: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d830: 20 20 20 20 20 6c 69 6e 71 46 69 6c 65 4e 61 6d       linqFileNam
d840: 65 20 3d 20 49 6e 73 74 61 6c 6c 65 72 2e 4c 69  e = Installer.Li
d850: 6e 71 46 69 6c 65 4e 61 6d 65 3b 0d 0a 0d 0a 20  nqFileName;.... 
d860: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d870: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
d880: 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6c 69 6e  onfiguration.lin
d890: 71 46 69 6c 65 4e 61 6d 65 20 3d 20 50 61 74 68  qFileName = Path
d8a0: 2e 43 6f 6d 62 69 6e 65 28 0d 0a 20 20 20 20 20  .Combine(..     
d8b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d8c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
d8d0: 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 64 69 72  onfiguration.dir
d8e0: 65 63 74 6f 72 79 2c 20 6c 69 6e 71 46 69 6c 65  ectory, linqFile
d8f0: 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  Name);....      
d900: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d910: 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
d920: 20 64 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d   designerFileNam
d930: 65 20 3d 20 63 6f 6e 66 69 67 75 72 61 74 69 6f  e = configuratio
d940: 6e 2e 64 65 73 69 67 6e 65 72 46 69 6c 65 4e 61  n.designerFileNa
d950: 6d 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  me;....         
d960: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d970: 20 20 20 20 20 20 20 69 66 20 28 21 53 74 72 69         if (!Stri
d980: 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79  ng.IsNullOrEmpty
d990: 28 64 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d  (designerFileNam
d9a0: 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e))..           
d9b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d9c0: 20 20 20 20 20 20 20 20 20 64 65 73 69 67 6e 65           designe
d9d0: 72 46 69 6c 65 4e 61 6d 65 20 3d 20 50 61 74 68  rFileName = Path
d9e0: 2e 47 65 74 46 69 6c 65 4e 61 6d 65 28 64 65 73  .GetFileName(des
d9f0: 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 29 3b 0d  ignerFileName);.
da00: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
da10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
da20: 20 20 20 69 66 20 28 53 74 72 69 6e 67 2e 49 73     if (String.Is
da30: 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 64 65 73 69  NullOrEmpty(desi
da40: 67 6e 65 72 46 69 6c 65 4e 61 6d 65 29 29 0d 0a  gnerFileName))..
da50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
da60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
da70: 20 20 20 20 64 65 73 69 67 6e 65 72 46 69 6c 65      designerFile
da80: 4e 61 6d 65 20 3d 20 49 6e 73 74 61 6c 6c 65 72  Name = Installer
da90: 2e 44 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d  .DesignerFileNam
daa0: 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
dab0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dac0: 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74        configurat
dad0: 69 6f 6e 2e 64 65 73 69 67 6e 65 72 46 69 6c 65  ion.designerFile
dae0: 4e 61 6d 65 20 3d 20 50 61 74 68 2e 43 6f 6d 62  Name = Path.Comb
daf0: 69 6e 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ine(..          
db00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
db10: 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67            config
db20: 75 72 61 74 69 6f 6e 2e 64 69 72 65 63 74 6f 72  uration.director
db30: 79 2c 20 64 65 73 69 67 6e 65 72 46 69 6c 65 4e  y, designerFileN
db40: 61 6d 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ame);..         
db50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
db60: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
db70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
db80: 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68    else if (Match
db90: 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22  Option(newArg, "
dba0: 63 6f 72 65 46 69 6c 65 4e 61 6d 65 22 29 29 0d  coreFileName")).
dbb0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
dbc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
dbd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dbe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dbf0: 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 63 6f  configuration.co
dc00: 72 65 46 69 6c 65 4e 61 6d 65 20 3d 20 74 65 78  reFileName = tex
dc10: 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t;..            
dc20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dc30: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
dc40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
dc50: 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74  lse if (MatchOpt
dc60: 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 6c 69 6e  ion(newArg, "lin
dc70: 71 46 69 6c 65 4e 61 6d 65 22 29 29 0d 0a 20 20  qFileName"))..  
dc80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dc90: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
dca0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dcb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
dcc0: 66 69 67 75 72 61 74 69 6f 6e 2e 6c 69 6e 71 46  figuration.linqF
dcd0: 69 6c 65 4e 61 6d 65 20 3d 20 74 65 78 74 3b 0d  ileName = text;.
dce0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
dcf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
dd00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dd10: 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65              else
dd20: 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e   if (MatchOption
dd30: 28 6e 65 77 41 72 67 2c 20 22 64 65 73 69 67 6e  (newArg, "design
dd40: 65 72 46 69 6c 65 4e 61 6d 65 22 29 29 0d 0a 20  erFileName")).. 
dd50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dd60: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
dd70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dd80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
dd90: 6e 66 69 67 75 72 61 74 69 6f 6e 2e 64 65 73 69  nfiguration.desi
dda0: 67 6e 65 72 46 69 6c 65 4e 61 6d 65 20 3d 20 74  gnerFileName = t
ddb0: 65 78 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ext;..          
ddc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ddd0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
dde0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ddf0: 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f   else if (MatchO
de00: 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 74  ption(newArg, "t
de10: 72 61 63 65 46 6f 72 6d 61 74 22 29 29 0d 0a 20  raceFormat")).. 
de20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
de30: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
de40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
de50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
de60: 6e 66 69 67 75 72 61 74 69 6f 6e 2e 74 72 61 63  nfiguration.trac
de70: 65 46 6f 72 6d 61 74 20 3d 20 74 65 78 74 3b 0d  eFormat = text;.
de80: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
de90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dea0: 20 54 72 61 63 65 4f 70 73 2e 54 72 61 63 65 46   TraceOps.TraceF
deb0: 6f 72 6d 61 74 20 3d 20 63 6f 6e 66 69 67 75 72  ormat = configur
dec0: 61 74 69 6f 6e 2e 74 72 61 63 65 46 6f 72 6d 61  ation.traceForma
ded0: 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t;..            
dee0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
def0: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
df00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
df10: 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74  lse if (MatchOpt
df20: 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 74 72 61  ion(newArg, "tra
df30: 63 65 50 72 69 6f 72 69 74 79 22 29 29 0d 0a 20  cePriority")).. 
df40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
df50: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
df60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
df70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f 62                ob
df80: 6a 65 63 74 20 76 61 6c 75 65 20 3d 20 50 61 72  ject value = Par
df90: 73 65 45 6e 75 6d 28 0d 0a 20 20 20 20 20 20 20  seEnum(..       
dfa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dfb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 79 70               typ
dfc0: 65 6f 66 28 54 72 61 63 65 50 72 69 6f 72 69 74  eof(TracePriorit
dfd0: 79 29 2c 20 74 65 78 74 2c 20 74 72 75 65 29 3b  y), text, true);
dfe0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
dff0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e000: 20 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d      if (value ==
e010: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
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 7b 0d 0a 20 20 20 20 20          {..     
e040: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e050: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
e060: 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e  rror = TraceOps.
e070: 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20  Trace(..        
e080: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e090: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e0a0: 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f  TracePriority.Lo
e0b0: 77 65 73 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  west,..         
e0c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e0d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
e0e0: 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74  raceCallback, St
e0f0: 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
e100: 20 20 20 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 20 20 20 20 20                  
e120: 20 20 20 20 20 20 22 49 6e 76 61 6c 69 64 20 74        "Invalid t
e130: 72 61 63 65 20 70 72 69 6f 72 69 74 79 20 76 61  race priority va
e140: 6c 75 65 3a 20 7b 30 7d 22 2c 0d 0a 20 20 20 20  lue: {0}",..    
e150: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e160: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e170: 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 74      ForDisplay(t
e180: 65 78 74 29 29 2c 20 74 72 61 63 65 43 61 74 65  ext)), traceCate
e190: 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
e1a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e1b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
e1c0: 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20   (strict)..     
e1d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e1e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e1f0: 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
e200: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
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 63 6f 6e 74 69 6e 75 65          continue
e230: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
e240: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e250: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
e260: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e270: 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72          configur
e280: 61 74 69 6f 6e 2e 74 72 61 63 65 50 72 69 6f 72  ation.tracePrior
e290: 69 74 79 20 3d 20 28 54 72 61 63 65 50 72 69 6f  ity = (TracePrio
e2a0: 72 69 74 79 29 76 61 6c 75 65 3b 0d 0a 20 20 20  rity)value;..   
e2b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e2c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
e2d0: 63 65 4f 70 73 2e 54 72 61 63 65 50 72 69 6f 72  ceOps.TracePrior
e2e0: 69 74 79 20 3d 20 63 6f 6e 66 69 67 75 72 61 74  ity = configurat
e2f0: 69 6f 6e 2e 74 72 61 63 65 50 72 69 6f 72 69 74  ion.tracePriorit
e300: 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y;..            
e310: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e320: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
e330: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
e340: 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74  lse if (MatchOpt
e350: 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 69 6e 73  ion(newArg, "ins
e360: 74 61 6c 6c 22 29 29 0d 0a 20 20 20 20 20 20 20  tall"))..       
e370: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e380: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
e390: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e3a0: 20 20 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76 61          bool? va
e3b0: 6c 75 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65  lue = ParseBoole
e3c0: 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20  an(text);....   
e3d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e3e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
e3f0: 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d  (value == null).
e400: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
e410: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e420: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
e430: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e440: 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
e450: 54 72 61 63 65 4f 70 73 2e 54 72 61 63 65 28 0d  TraceOps.Trace(.
e460: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
e470: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e480: 20 20 20 20 20 20 20 20 20 54 72 61 63 65 50 72           TracePr
e490: 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 0d 0a  iority.Lowest,..
e4a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e4b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e4c0: 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c          traceCal
e4d0: 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f  lback, String.Fo
e4e0: 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
e4f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e500: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
e510: 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c  Invalid {0} bool
e520: 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c  ean value: {1}",
e530: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
e540: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e550: 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73            ForDis
e560: 70 6c 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69  play(arg), ForDi
e570: 73 70 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20  splay(text)),.. 
e580: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e590: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e5a0: 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
e5b0: 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
e5c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e5d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
e5e0: 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20   (strict)..     
e5f0: 20 20 20 20 20 20 20 20 20 20 20 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 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
e620: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
e630: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e640: 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65          continue
e650: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
e660: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e670: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
e680: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e690: 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72          configur
e6a0: 61 74 69 6f 6e 2e 69 6e 73 74 61 6c 6c 20 3d 20  ation.install = 
e6b0: 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20  (bool)value;..  
e6c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e6d0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
e6e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e6f0: 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66           else if
e700: 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65   (MatchOption(ne
e710: 77 41 72 67 2c 20 22 69 6e 73 74 61 6c 6c 46 6c  wArg, "installFl
e720: 61 67 73 22 29 29 0d 0a 20 20 20 20 20 20 20 20  ags"))..        
e730: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e740: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
e750: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e760: 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 76 61         object va
e770: 6c 75 65 20 3d 20 50 61 72 73 65 45 6e 75 6d 28  lue = ParseEnum(
e780: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
e790: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e7a0: 20 20 20 20 20 20 74 79 70 65 6f 66 28 49 6e 73        typeof(Ins
e7b0: 74 61 6c 6c 46 6c 61 67 73 29 2c 20 74 65 78 74  tallFlags), text
e7c0: 2c 20 74 72 75 65 29 3b 0d 0a 0d 0a 20 20 20 20  , true);....    
e7d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e7e0: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
e7f0: 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  value == null)..
e800: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e810: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e820: 7b 0d 0a 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: 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54         error = T
e850: 72 61 63 65 4f 70 73 2e 54 72 61 63 65 28 0d 0a  raceOps.Trace(..
e860: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e870: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e880: 20 20 20 20 20 20 20 20 54 72 61 63 65 50 72 69          TracePri
e890: 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 0d 0a 20  ority.Lowest,.. 
e8a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
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 74 72 61 63 65 43 61 6c 6c         traceCall
e8d0: 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72  back, String.For
e8e0: 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
e8f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e900: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 49                "I
e910: 6e 76 61 6c 69 64 20 69 6e 73 74 61 6c 6c 20 66  nvalid install f
e920: 6c 61 67 73 20 76 61 6c 75 65 3a 20 7b 30 7d 22  lags value: {0}"
e930: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
e940: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e950: 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69             ForDi
e960: 73 70 6c 61 79 28 74 65 78 74 29 29 2c 20 74 72  splay(text)), tr
e970: 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
e980: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
e990: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e9a0: 20 20 20 20 20 69 66 20 28 73 74 72 69 63 74 29       if (strict)
e9b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
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 72 65 74 75 72 6e            return
e9e0: 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20   false;....     
e9f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ea00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
ea10: 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20  ontinue;..      
ea20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ea30: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
ea40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ea50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
ea60: 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 69 6e 73  onfiguration.ins
ea70: 74 61 6c 6c 46 6c 61 67 73 20 3d 20 28 49 6e 73  tallFlags = (Ins
ea80: 74 61 6c 6c 46 6c 61 67 73 29 76 61 6c 75 65 3b  tallFlags)value;
ea90: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
eaa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
eab0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
eac0: 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73               els
ead0: 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f  e if (MatchOptio
eae0: 6e 28 6e 65 77 41 72 67 2c 20 22 77 68 61 74 49  n(newArg, "whatI
eaf0: 66 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  f"))..          
eb00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
eb10: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
eb20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
eb30: 20 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65       bool? value
eb40: 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28   = ParseBoolean(
eb50: 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  text);....      
eb60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
eb70: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76 61            if (va
eb80: 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  lue == null)..  
eb90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
eba0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
ebb0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
ebc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ebd0: 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72 61       error = Tra
ebe0: 63 65 4f 70 73 2e 54 72 61 63 65 28 0d 0a 20 20  ceOps.Trace(..  
ebf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ec00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ec10: 20 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72        TracePrior
ec20: 69 74 79 2e 4c 6f 77 65 73 74 2c 0d 0a 20 20 20  ity.Lowest,..   
ec30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ec40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ec50: 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61       traceCallba
ec60: 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ck, String.Forma
ec70: 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
ec80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ec90: 20 20 20 20 20 20 20 20 20 20 20 20 22 49 6e 76              "Inv
eca0: 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e  alid {0} boolean
ecb0: 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20   value: {1}",.. 
ecc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ecd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ece0: 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61         ForDispla
ecf0: 79 28 61 72 67 29 2c 20 46 6f 72 44 69 73 70 6c  y(arg), ForDispl
ed00: 61 79 28 74 65 78 74 29 29 2c 0d 0a 20 20 20 20  ay(text)),..    
ed10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ed20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ed30: 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72      traceCategor
ed40: 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
ed50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ed60: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73             if (s
ed70: 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20  trict)..        
ed80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ed90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
eda0: 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d  return false;...
edb0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
edc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
edd0: 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a       continue;..
ede0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
edf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ee00: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
ee10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ee20: 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69       configurati
ee30: 6f 6e 2e 77 68 61 74 49 66 20 3d 20 28 62 6f 6f  on.whatIf = (boo
ee40: 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20  l)value;..      
ee50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ee60: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
ee70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ee80: 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61       else if (Ma
ee90: 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67  tchOption(newArg
eea0: 2c 20 22 76 65 72 62 6f 73 65 22 29 29 0d 0a 20  , "verbose")).. 
eeb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
eec0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
eed0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
eee0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
eef0: 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61 72 73  ol? value = Pars
ef00: 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d  eBoolean(text);.
ef10: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
ef20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ef30: 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20     if (value == 
ef40: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
ef50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ef60: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
ef70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ef80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
ef90: 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 54  ror = TraceOps.T
efa0: 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20  race(..         
efb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
efc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
efd0: 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77  racePriority.Low
efe0: 65 73 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  est,..          
eff0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f000: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
f010: 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72  aceCallback, Str
f020: 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
f030: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f040: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f050: 20 20 20 20 20 22 49 6e 76 61 6c 69 64 20 7b 30       "Invalid {0
f060: 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a  } boolean value:
f070: 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20   {1}",..        
f080: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f090: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f0a0: 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29 2c  ForDisplay(arg),
f0b0: 20 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74   ForDisplay(text
f0c0: 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
f0d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f0e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
f0f0: 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
f100: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f110: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f120: 20 20 20 20 69 66 20 28 73 74 72 69 63 74 29 0d      if (strict).
f130: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
f140: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f150: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
f160: 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  false;....      
f170: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f180: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
f190: 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20  ntinue;..       
f1a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f1b0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
f1c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f1d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
f1e0: 6e 66 69 67 75 72 61 74 69 6f 6e 2e 76 65 72 62  nfiguration.verb
f1f0: 6f 73 65 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75  ose = (bool)valu
f200: 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
f210: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f220: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
f230: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
f240: 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74  lse if (MatchOpt
f250: 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 63 6f 6e  ion(newArg, "con
f260: 66 69 72 6d 22 29 29 0d 0a 20 20 20 20 20 20 20  firm"))..       
f270: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f280: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
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 62 6f 6f 6c 3f 20 76 61          bool? va
f2b0: 6c 75 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65  lue = ParseBoole
f2c0: 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20  an(text);....   
f2d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f2e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
f2f0: 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d  (value == null).
f300: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
f310: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f320: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
f330: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f340: 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
f350: 54 72 61 63 65 4f 70 73 2e 54 72 61 63 65 28 0d  TraceOps.Trace(.
f360: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
f370: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f380: 20 20 20 20 20 20 20 20 20 54 72 61 63 65 50 72           TracePr
f390: 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 0d 0a  iority.Lowest,..
f3a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f3b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f3c0: 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c          traceCal
f3d0: 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f  lback, String.Fo
f3e0: 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
f3f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f400: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
f410: 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c  Invalid {0} bool
f420: 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c  ean value: {1}",
f430: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
f440: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f450: 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73            ForDis
f460: 70 6c 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69  play(arg), ForDi
f470: 73 70 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20  splay(text)),.. 
f480: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f490: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f4a0: 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
f4b0: 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
f4c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f4d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
f4e0: 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20   (strict)..     
f4f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f500: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f510: 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
f520: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
f530: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f540: 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65          continue
f550: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
f560: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f570: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
f580: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f590: 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72          configur
f5a0: 61 74 69 6f 6e 2e 63 6f 6e 66 69 72 6d 20 3d 20  ation.confirm = 
f5b0: 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20  (bool)value;..  
f5c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f5d0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
f5e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f5f0: 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66           else if
f600: 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65   (MatchOption(ne
f610: 77 41 72 67 2c 20 22 6e 6f 44 65 73 6b 74 6f 70  wArg, "noDesktop
f620: 22 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  "))..           
f630: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f640: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
f650: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f660: 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20      bool? value 
f670: 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74  = ParseBoolean(t
f680: 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ext);....       
f690: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f6a0: 20 20 20 20 20 20 20 20 20 69 66 20 28 76 61 6c           if (val
f6b0: 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ue == null)..   
f6c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f6d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
f6e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f6f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f700: 20 20 20 20 65 72 72 6f 72 20 3d 20 54 72 61 63      error = Trac
f710: 65 4f 70 73 2e 54 72 61 63 65 28 0d 0a 20 20 20  eOps.Trace(..   
f720: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f730: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f740: 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69       TracePriori
f750: 74 79 2e 4c 6f 77 65 73 74 2c 0d 0a 20 20 20 20  ty.Lowest,..    
f760: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f770: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f780: 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63      traceCallbac
f790: 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  k, String.Format
f7a0: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
f7b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f7c0: 20 20 20 20 20 20 20 20 20 20 20 22 49 6e 76 61             "Inva
f7d0: 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20  lid {0} boolean 
f7e0: 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20  value: {1}",..  
f7f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f800: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f810: 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79        ForDisplay
f820: 28 61 72 67 29 2c 20 46 6f 72 44 69 73 70 6c 61  (arg), ForDispla
f830: 79 28 74 65 78 74 29 29 2c 0d 0a 20 20 20 20 20  y(text)),..     
f840: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f850: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f860: 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
f870: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
f880: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f890: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73 74            if (st
f8a0: 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20  rict)..         
f8b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f8c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
f8d0: 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a  eturn false;....
f8e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f8f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f900: 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20      continue;.. 
f910: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f920: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
f930: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
f940: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f950: 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f      configuratio
f960: 6e 2e 6e 6f 44 65 73 6b 74 6f 70 20 3d 20 28 62  n.noDesktop = (b
f970: 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20  ool)value;..    
f980: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f990: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
f9a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f9b0: 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28         else if (
f9c0: 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41  MatchOption(newA
f9d0: 72 67 2c 20 22 6e 6f 43 6f 6d 70 61 63 74 22 29  rg, "noCompact")
f9e0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
f9f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
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 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20    bool? value = 
fa30: 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78  ParseBoolean(tex
fa40: 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  t);....         
fa50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fa60: 20 20 20 20 20 20 20 69 66 20 28 76 61 6c 75 65         if (value
fa70: 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
fa80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fa90: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
faa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fab0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fac0: 20 20 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f    error = TraceO
fad0: 70 73 2e 54 72 61 63 65 28 0d 0a 20 20 20 20 20  ps.Trace(..     
fae0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
faf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fb00: 20 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79     TracePriority
fb10: 2e 4c 6f 77 65 73 74 2c 0d 0a 20 20 20 20 20 20  .Lowest,..      
fb20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fb30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fb40: 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c    traceCallback,
fb50: 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
fb60: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
fb70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fb80: 20 20 20 20 20 20 20 20 20 22 49 6e 76 61 6c 69           "Invali
fb90: 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61  d {0} boolean va
fba0: 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20  lue: {1}",..    
fbb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fbc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fbd0: 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61      ForDisplay(a
fbe0: 72 67 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  rg), ForDisplay(
fbf0: 74 65 78 74 29 29 2c 0d 0a 20 20 20 20 20 20 20  text)),..       
fc00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fc10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fc20: 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
fc30: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
fc40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fc50: 20 20 20 20 20 20 20 20 69 66 20 28 73 74 72 69          if (stri
fc60: 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ct)..           
fc70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fc80: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
fc90: 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20  urn false;....  
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 20                  
fcc0: 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20    continue;..   
fcd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fce0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
fcf0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
fd00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fd10: 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e    configuration.
fd20: 6e 6f 43 6f 6d 70 61 63 74 20 3d 20 28 62 6f 6f  noCompact = (boo
fd30: 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20  l)value;..      
fd40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fd50: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
fd60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fd70: 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61       else if (Ma
fd80: 74 63 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67  tchOption(newArg
fd90: 2c 20 22 6e 6f 4e 65 74 46 78 32 30 22 29 29 0d  , "noNetFx20")).
fda0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
fdb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
fdc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fdd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fde0: 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61  bool? value = Pa
fdf0: 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29  rseBoolean(text)
fe00: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
fe10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fe20: 20 20 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d       if (value =
fe30: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
fe40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fe50: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
fe60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fe70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fe80: 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73  error = TraceOps
fe90: 2e 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20  .Trace(..       
fea0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
feb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fec0: 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c   TracePriority.L
fed0: 6f 77 65 73 74 2c 0d 0a 20 20 20 20 20 20 20 20  owest,..        
fee0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fef0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ff00: 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53  traceCallback, S
ff10: 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
ff20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ff30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ff40: 20 20 20 20 20 20 20 22 49 6e 76 61 6c 69 64 20         "Invalid 
ff50: 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75  {0} boolean valu
ff60: 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20  e: {1}",..      
ff70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ff80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ff90: 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67    ForDisplay(arg
ffa0: 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74 65  ), ForDisplay(te
ffb0: 78 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  xt)),..         
ffc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ffd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
ffe0: 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
fff0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
10000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10010 20 20 20 20 20 20 69 66 20 28 73 74 72 69 63 74        if (strict
10020 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
10030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10040 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
10050 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20  n false;....    
10060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10080 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20  continue;..     
10090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
100a0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
100b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
100c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
100d0 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f  configuration.no
100e0 4e 65 74 46 78 32 30 20 3d 20 28 62 6f 6f 6c 29  NetFx20 = (bool)
100f0 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20  value;..        
10100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10110 20 20 20 20 7d 0d 0a 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 65 6c 73 65 20 69 66 20 28 4d 61 74 63     else if (Matc
10140 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20  hOption(newArg, 
10150 22 6e 6f 4e 65 74 46 78 34 30 22 29 29 0d 0a 20  "noNetFx40")).. 
10160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10170 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
10180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
101a0 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61 72 73  ol? value = Pars
101b0 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d  eBoolean(text);.
101c0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
101d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
101e0 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20     if (value == 
101f0 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
10200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10210 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
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 20 20 20 65 72                er
10240 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 54  ror = TraceOps.T
10250 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20  race(..         
10260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
10280 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77  racePriority.Low
10290 65 73 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  est,..          
102a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
102b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
102c0 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72  aceCallback, Str
102d0 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
102e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
102f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10300 20 20 20 20 20 22 49 6e 76 61 6c 69 64 20 7b 30       "Invalid {0
10310 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a  } boolean value:
10320 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20   {1}",..        
10330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10350 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29 2c  ForDisplay(arg),
10360 20 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74   ForDisplay(text
10370 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
10380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10390 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
103a0 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
103b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
103c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
103d0 20 20 20 20 69 66 20 28 73 74 72 69 63 74 29 0d      if (strict).
103e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
103f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10400 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
10410 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  false;....      
10420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
10440 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20  ntinue;..       
10450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10460 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
10470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
10490 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 4e 65  nfiguration.noNe
104a0 74 46 78 34 30 20 3d 20 28 62 6f 6f 6c 29 76 61  tFx40 = (bool)va
104b0 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lue;..          
104c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
104d0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
104e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
104f0 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f   else if (MatchO
10500 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 6e  ption(newArg, "n
10510 6f 56 73 32 30 30 38 22 29 29 0d 0a 20 20 20 20  oVs2008"))..    
10520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10530 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
10540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10550 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 3f             bool?
10560 20 76 61 6c 75 65 20 3d 20 50 61 72 73 65 42 6f   value = ParseBo
10570 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a  olean(text);....
10580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
105a0 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c  if (value == nul
105b0 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
105c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
105d0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
105e0 20 20 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 65 72 72 6f 72             error
10600 20 3d 20 54 72 61 63 65 4f 70 73 2e 54 72 61 63   = TraceOps.Trac
10610 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
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 20 20 20 20 20 54 72 61 63              Trac
10640 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74  ePriority.Lowest
10650 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
10660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10670 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
10680 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67  Callback, String
10690 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
106a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
106b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
106c0 20 20 22 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62    "Invalid {0} b
106d0 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31  oolean value: {1
106e0 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }",..           
106f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10700 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72               For
10710 44 69 73 70 6c 61 79 28 61 72 67 29 2c 20 46 6f  Display(arg), Fo
10720 72 44 69 73 70 6c 61 79 28 74 65 78 74 29 29 2c  rDisplay(text)),
10730 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
10740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10750 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
10760 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
10770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10790 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a 20 20   if (strict)..  
107a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
107b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
107c0 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
107d0 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  se;....         
107e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
107f0 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69             conti
10800 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  nue;..          
10810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10820 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
10830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10840 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69             confi
10850 67 75 72 61 74 69 6f 6e 2e 6e 6f 56 73 32 30 30  guration.noVs200
10860 38 20 3d 20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b  8 = (bool)value;
10870 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
10880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
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 65 6c 73               els
108b0 65 20 69 66 20 28 4d 61 74 63 68 4f 70 74 69 6f  e if (MatchOptio
108c0 6e 28 6e 65 77 41 72 67 2c 20 22 6e 6f 56 73 32  n(newArg, "noVs2
108d0 30 31 30 22 29 29 0d 0a 20 20 20 20 20 20 20 20  010"))..        
108e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
108f0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
10900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10910 20 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76 61 6c         bool? val
10920 75 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65 61  ue = ParseBoolea
10930 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20  n(text);....    
10940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10950 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
10960 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  value == null)..
10970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10990 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
109a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
109b0 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 54         error = T
109c0 72 61 63 65 4f 70 73 2e 54 72 61 63 65 28 0d 0a  raceOps.Trace(..
109d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
109e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
109f0 20 20 20 20 20 20 20 20 54 72 61 63 65 50 72 69          TracePri
10a00 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 0d 0a 20  ority.Lowest,.. 
10a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10a30 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c         traceCall
10a40 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72  back, String.For
10a50 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
10a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 49                "I
10a80 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c 65  nvalid {0} boole
10a90 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c 0d  an value: {1}",.
10aa0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
10ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10ac0 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70           ForDisp
10ad0 6c 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69 73  lay(arg), ForDis
10ae0 70 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20 20  play(text)),..  
10af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10b10 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
10b20 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
10b30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10b40 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
10b50 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20  (strict)..      
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 20 20 20 20 20 20 20 20                  
10b80 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
10b90 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
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 63 6f 6e 74 69 6e 75 65 3b         continue;
10bc0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
10bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10be0 20 20 7d 0d 0a 0d 0a 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 63 6f 6e 66 69 67 75 72 61         configura
10c10 74 69 6f 6e 2e 6e 6f 56 73 32 30 31 30 20 3d 20  tion.noVs2010 = 
10c20 28 62 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20  (bool)value;..  
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 7d 0d 0a 20 20 20            }..   
10c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10c60 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66           else if
10c70 20 28 4d 61 74 63 68 4f 70 74 69 6f 6e 28 6e 65   (MatchOption(ne
10c80 77 41 72 67 2c 20 22 6e 6f 54 72 61 63 65 22 29  wArg, "noTrace")
10c90 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
10ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
10cb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
10cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10cd0 20 20 62 6f 6f 6c 3f 20 76 61 6c 75 65 20 3d 20    bool? value = 
10ce0 50 61 72 73 65 42 6f 6f 6c 65 61 6e 28 74 65 78  ParseBoolean(tex
10cf0 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  t);....         
10d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10d10 20 20 20 20 20 20 20 69 66 20 28 76 61 6c 75 65         if (value
10d20 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
10d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10d40 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
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 20                  
10d70 20 20 65 72 72 6f 72 20 3d 20 54 72 61 63 65 4f    error = TraceO
10d80 70 73 2e 54 72 61 63 65 28 0d 0a 20 20 20 20 20  ps.Trace(..     
10d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10db0 20 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79     TracePriority
10dc0 2e 4c 6f 77 65 73 74 2c 0d 0a 20 20 20 20 20 20  .Lowest,..      
10dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10df0 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c    traceCallback,
10e00 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
10e10 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
10e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10e30 20 20 20 20 20 20 20 20 20 22 49 6e 76 61 6c 69           "Invali
10e40 64 20 7b 30 7d 20 62 6f 6f 6c 65 61 6e 20 76 61  d {0} boolean va
10e50 6c 75 65 3a 20 7b 31 7d 22 2c 0d 0a 20 20 20 20  lue: {1}",..    
10e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10e80 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61      ForDisplay(a
10e90 72 67 29 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  rg), ForDisplay(
10ea0 74 65 78 74 29 29 2c 0d 0a 20 20 20 20 20 20 20  text)),..       
10eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10ed0 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
10ee0 0d 0a 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 20 20 20 20 69 66 20 28 73 74 72 69          if (stri
10f10 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ct)..           
10f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10f30 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
10f40 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20  urn false;....  
10f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10f70 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20    continue;..   
10f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10f90 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
10fa0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
10fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10fc0 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e    configuration.
10fd0 6e 6f 54 72 61 63 65 20 3d 20 28 62 6f 6f 6c 29  noTrace = (bool)
10fe0 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20  value;..        
10ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11000 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
11010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11020 20 20 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63     else if (Matc
11030 68 4f 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20  hOption(newArg, 
11040 22 6e 6f 43 6f 6e 73 6f 6c 65 22 29 29 0d 0a 20  "noConsole")).. 
11050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11060 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
11070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
11090 6f 6c 3f 20 76 61 6c 75 65 20 3d 20 50 61 72 73  ol? value = Pars
110a0 65 42 6f 6f 6c 65 61 6e 28 74 65 78 74 29 3b 0d  eBoolean(text);.
110b0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
110c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
110d0 20 20 20 69 66 20 28 76 61 6c 75 65 20 3d 3d 20     if (value == 
110e0 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
110f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11100 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
11110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
11130 72 6f 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 54  ror = TraceOps.T
11140 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20  race(..         
11150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
11170 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77  racePriority.Low
11180 65 73 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  est,..          
11190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
111a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
111b0 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72  aceCallback, Str
111c0 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
111d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
111e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
111f0 20 20 20 20 20 22 49 6e 76 61 6c 69 64 20 7b 30       "Invalid {0
11200 7d 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 3a  } boolean value:
11210 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20   {1}",..        
11220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11240 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67 29 2c  ForDisplay(arg),
11250 20 46 6f 72 44 69 73 70 6c 61 79 28 74 65 78 74   ForDisplay(text
11260 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
11270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11280 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
11290 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
112a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
112b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
112c0 20 20 20 20 69 66 20 28 73 74 72 69 63 74 29 0d      if (strict).
112d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
112e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
112f0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
11300 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  false;....      
11310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
11330 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20  ntinue;..       
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 7d 0d 0a 0d 0a 20 20           }....  
11360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
11380 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 43 6f  nfiguration.noCo
11390 6e 73 6f 6c 65 20 3d 20 28 62 6f 6f 6c 29 76 61  nsole = (bool)va
113a0 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lue;..          
113b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
113c0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
113d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
113e0 20 65 6c 73 65 20 69 66 20 28 4d 61 74 63 68 4f   else if (MatchO
113f0 70 74 69 6f 6e 28 6e 65 77 41 72 67 2c 20 22 6e  ption(newArg, "n
11400 6f 4c 6f 67 22 29 29 0d 0a 20 20 20 20 20 20 20  oLog"))..       
11410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11420 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
11430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11440 20 20 20 20 20 20 20 20 62 6f 6f 6c 3f 20 76 61          bool? va
11450 6c 75 65 20 3d 20 50 61 72 73 65 42 6f 6f 6c 65  lue = ParseBoole
11460 61 6e 28 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20  an(text);....   
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 20 20 20 20 20 69 66 20               if 
11490 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d  (value == null).
114a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
114b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
114c0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
114d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
114e0 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
114f0 54 72 61 63 65 4f 70 73 2e 54 72 61 63 65 28 0d  TraceOps.Trace(.
11500 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
11510 20 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 54 72 61 63 65 50 72           TracePr
11530 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 0d 0a  iority.Lowest,..
11540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11560 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c          traceCal
11570 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f  lback, String.Fo
11580 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
11590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
115a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
115b0 49 6e 76 61 6c 69 64 20 7b 30 7d 20 62 6f 6f 6c  Invalid {0} bool
115c0 65 61 6e 20 76 61 6c 75 65 3a 20 7b 31 7d 22 2c  ean value: {1}",
115d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
115e0 20 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 46 6f 72 44 69 73            ForDis
11600 70 6c 61 79 28 61 72 67 29 2c 20 46 6f 72 44 69  play(arg), ForDi
11610 73 70 6c 61 79 28 74 65 78 74 29 29 2c 0d 0a 20  splay(text)),.. 
11620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11640 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
11650 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
11660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
11680 20 28 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20   (strict)..     
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 20                  
116b0 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
116c0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
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 63 6f 6e 74 69 6e 75 65          continue
116f0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
11700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11710 20 20 20 7d 0d 0a 0d 0a 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 63 6f 6e 66 69 67 75 72          configur
11740 61 74 69 6f 6e 2e 6e 6f 4c 6f 67 20 3d 20 28 62  ation.noLog = (b
11750 6f 6f 6c 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20  ool)value;..    
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 7d 0d 0a 20 20 20 20 20          }..     
11780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11790 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20         else..   
117a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
117b0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
117c0 20 20 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 65 72 72 6f              erro
117e0 72 20 3d 20 54 72 61 63 65 4f 70 73 2e 54 72 61  r = TraceOps.Tra
117f0 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ce(..           
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 20 20 54 72 61 63 65 50 72           TracePr
11820 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c 0d 0a  iority.Lowest,..
11830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11850 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63      traceCallbac
11860 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  k, String.Format
11870 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
11880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11890 20 20 20 20 20 20 20 22 55 6e 73 75 70 70 6f 72         "Unsuppor
118a0 74 65 64 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65  ted command line
118b0 20 6f 70 74 69 6f 6e 3a 20 7b 30 7d 22 2c 0d 0a   option: {0}",..
118c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
118d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
118e0 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61      ForDisplay(a
118f0 72 67 29 29 2c 20 74 72 61 63 65 43 61 74 65 67  rg)), traceCateg
11900 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
11910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11920 20 20 20 20 20 20 20 20 20 69 66 20 28 73 74 72           if (str
11930 69 63 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ict)..          
11940 20 20 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 72 65 74 75 72 6e            return
11960 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
11970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11980 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
11990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
119a0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
119b0 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d             else.
119c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
119d0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
119e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
119f0 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
11a00 54 72 61 63 65 4f 70 73 2e 54 72 61 63 65 28 0d  TraceOps.Trace(.
11a10 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
11a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11a30 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c   TracePriority.L
11a40 6f 77 65 73 74 2c 0d 0a 20 20 20 20 20 20 20 20  owest,..        
11a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11a60 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c          traceCal
11a70 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f  lback, String.Fo
11a80 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
11a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11aa0 20 20 20 20 20 20 20 22 55 6e 73 75 70 70 6f 72         "Unsuppor
11ab0 74 65 64 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65  ted command line
11ac0 20 61 72 67 75 6d 65 6e 74 3a 20 7b 30 7d 22 2c   argument: {0}",
11ad0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
11ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11af0 20 20 46 6f 72 44 69 73 70 6c 61 79 28 61 72 67    ForDisplay(arg
11b00 29 29 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72  )), traceCategor
11b10 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
11b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11b30 20 20 20 69 66 20 28 73 74 72 69 63 74 29 0d 0a     if (strict)..
11b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11b60 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20  return false;.. 
11b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11b80 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
11b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
11ba0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
11bb0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72         return tr
11bc0 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
11bd0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
11be0 20 20 20 20 20 20 20 20 63 61 74 63 68 20 28 45          catch (E
11bf0 78 63 65 70 74 69 6f 6e 20 65 29 0d 0a 20 20 20  xception e)..   
11c00 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
11c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11c20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 54 72 61      TraceOps.Tra
11c30 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ce(..           
11c40 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
11c50 63 65 50 72 69 6f 72 69 74 79 2e 48 69 67 68 65  cePriority.Highe
11c60 73 74 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63  st, traceCallbac
11c70 6b 2c 20 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  k, e,..         
11c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
11c90 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
11ca0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
11cb0 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 46        error = "F
11cc0 61 69 6c 65 64 20 74 6f 20 6d 6f 64 69 66 79 20  ailed to modify 
11cd0 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 22 3b  configuration.";
11ce0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
11cf0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
11d00 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
11d10 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lse;..          
11d20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
11d30 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
11d40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11d50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11d60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11d70 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
11d80 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 61        public sta
11d90 74 69 63 20 62 6f 6f 6c 20 50 72 6f 63 65 73 73  tic bool Process
11da0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
11db0 20 20 20 73 74 72 69 6e 67 5b 5d 20 61 72 67 73     string[] args
11dc0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
11dd0 20 20 20 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e     Configuration
11de0 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2c 0d   configuration,.
11df0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
11e00 20 62 6f 6f 6c 20 73 74 72 69 63 74 2c 0d 0a 20   bool strict,.. 
11e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
11e20 65 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72 0d  ef string error.
11e30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
11e40 20 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   )..            
11e50 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
11e60 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20     try..        
11e70 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
11e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
11e90 66 20 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  f (configuration
11ea0 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
11eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
11ec0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
11ed0 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
11ee0 3d 20 22 49 6e 76 61 6c 69 64 20 63 6f 6e 66 69  = "Invalid confi
11ef0 67 75 72 61 74 69 6f 6e 2e 22 3b 0d 0a 20 20 20  guration.";..   
11f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11f10 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
11f20 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
11f30 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
11f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11f50 20 41 73 73 65 6d 62 6c 79 20 61 73 73 65 6d 62   Assembly assemb
11f60 6c 79 20 3d 20 63 6f 6e 66 69 67 75 72 61 74 69  ly = configurati
11f70 6f 6e 2e 61 73 73 65 6d 62 6c 79 3b 0d 0a 0d 0a  on.assembly;....
11f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11f90 20 20 20 20 69 66 20 28 61 73 73 65 6d 62 6c 79      if (assembly
11fa0 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
11fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
11fc0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
11fd0 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
11fe0 3d 20 22 49 6e 76 61 6c 69 64 20 61 73 73 65 6d  = "Invalid assem
11ff0 62 6c 79 2e 22 3b 0d 0a 20 20 20 20 20 20 20 20  bly.";..        
12000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12010 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20  return false;.. 
12020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12030 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
12040 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
12050 21 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e  !configuration.n
12060 6f 54 72 61 63 65 29 0d 0a 20 20 20 20 20 20 20  oTrace)..       
12070 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
12080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12090 20 20 20 20 20 20 20 20 69 66 20 28 21 63 6f 6e          if (!con
120a0 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 4c 6f 67  figuration.noLog
120b0 20 26 26 0d 0a 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 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72   String.IsNullOr
120e0 45 6d 70 74 79 28 63 6f 6e 66 69 67 75 72 61 74  Empty(configurat
120f0 69 6f 6e 2e 6c 6f 67 46 69 6c 65 4e 61 6d 65 29  ion.logFileName)
12100 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
12110 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
12120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12130 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67            config
12140 75 72 61 74 69 6f 6e 2e 6c 6f 67 46 69 6c 65 4e  uration.logFileN
12150 61 6d 65 20 3d 20 47 65 74 4c 6f 67 46 69 6c 65  ame = GetLogFile
12160 4e 61 6d 65 28 29 3b 0d 0a 20 20 20 20 20 20 20  Name();..       
12170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12180 20 7d 0d 0a 0d 0a 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 2f 2f                //
121a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
121b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
121c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
121d0 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
121e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
121f0 20 69 66 20 28 21 63 6f 6e 66 69 67 75 72 61 74   if (!configurat
12200 69 6f 6e 2e 6e 6f 43 6f 6e 73 6f 6c 65 29 0d 0a  ion.noConsole)..
12210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12220 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
12230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12240 20 20 20 20 20 20 20 54 72 61 63 65 2e 4c 69 73         Trace.Lis
12250 74 65 6e 65 72 73 2e 41 64 64 28 6e 65 77 20 43  teners.Add(new C
12260 6f 6e 73 6f 6c 65 54 72 61 63 65 4c 69 73 74 65  onsoleTraceListe
12270 6e 65 72 28 29 29 3b 0d 0a 20 20 20 20 20 20 20  ner());..       
12280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12290 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
122a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
122b0 20 28 21 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e   (!configuration
122c0 2e 6e 6f 4c 6f 67 20 26 26 0d 0a 20 20 20 20 20  .noLog &&..     
122d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
122e0 20 20 20 20 20 20 20 21 53 74 72 69 6e 67 2e 49         !String.I
122f0 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 63 6f 6e  sNullOrEmpty(con
12300 66 69 67 75 72 61 74 69 6f 6e 2e 6c 6f 67 46 69  figuration.logFi
12310 6c 65 4e 61 6d 65 29 29 0d 0a 20 20 20 20 20 20  leName))..      
12320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12330 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
12340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12350 20 54 72 61 63 65 2e 4c 69 73 74 65 6e 65 72 73   Trace.Listeners
12360 2e 41 64 64 28 6e 65 77 20 54 65 78 74 57 72 69  .Add(new TextWri
12370 74 65 72 54 72 61 63 65 4c 69 73 74 65 6e 65 72  terTraceListener
12380 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
12390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
123a0 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e     configuration
123b0 2e 6c 6f 67 46 69 6c 65 4e 61 6d 65 29 29 3b 0d  .logFileName));.
123c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
123d0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
123e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
123f0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
12400 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
12410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12420 20 2f 2f 20 4e 4f 54 45 3a 20 44 75 6d 70 20 74   // NOTE: Dump t
12430 68 65 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  he configuration
12440 20 6e 6f 77 20 69 6e 20 63 61 73 65 20 77 65 20   now in case we 
12450 6e 65 65 64 20 74 6f 0d 0a 20 20 20 20 20 20 20  need to..       
12460 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
12470 20 20 20 20 20 20 74 72 6f 75 62 6c 65 73 68 6f        troublesho
12480 6f 74 20 61 6e 79 20 69 73 73 75 65 73 2e 0d 0a  ot any issues...
12490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
124a0 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
124b0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
124c0 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 74 72  configuration.tr
124d0 61 63 65 50 72 69 6f 72 69 74 79 20 3c 3d 20 54  acePriority <= T
124e0 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4d 65 64  racePriority.Med
124f0 69 75 6d 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ium)..          
12500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
12510 6e 66 69 67 75 72 61 74 69 6f 6e 2e 44 75 6d 70  nfiguration.Dump
12520 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ();....         
12530 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
12540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12550 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 53 68 6f 77     // NOTE: Show
12560 20 77 68 65 72 65 20 77 65 20 61 72 65 20 72 75   where we are ru
12570 6e 6e 69 6e 67 20 66 72 6f 6d 20 61 6e 64 20 68  nning from and h
12580 6f 77 20 77 65 20 77 65 72 65 0d 0a 20 20 20 20  ow we were..    
12590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
125a0 2f 2f 20 20 20 20 20 20 20 69 6e 76 6f 6b 65 64  //       invoked
125b0 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
125c0 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
125d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
125e0 74 72 69 6e 67 20 6c 6f 63 61 74 69 6f 6e 20 3d  tring location =
125f0 20 61 73 73 65 6d 62 6c 79 2e 4c 6f 63 61 74 69   assembly.Locati
12600 6f 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  on;....         
12610 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
12620 4f 70 73 2e 54 72 61 63 65 28 0d 0a 20 20 20 20  Ops.Trace(..    
12630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12640 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69 74      TracePriorit
12650 79 2e 4d 65 64 69 75 6d 2c 20 74 72 61 63 65 43  y.Medium, traceC
12660 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e  allback, String.
12670 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
12680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12690 20 22 52 75 6e 6e 69 6e 67 20 66 72 6f 6d 3a 20   "Running from: 
126a0 7b 30 7d 22 2c 20 46 6f 72 44 69 73 70 6c 61 79  {0}", ForDisplay
126b0 28 6c 6f 63 61 74 69 6f 6e 29 29 2c 0d 0a 20 20  (location)),..  
126c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
126d0 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
126e0 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
126f0 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
12700 63 65 4f 70 73 2e 54 72 61 63 65 28 0d 0a 20 20  ceOps.Trace(..  
12710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12720 20 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72        TracePrior
12730 69 74 79 2e 4d 65 64 69 75 6d 2c 20 74 72 61 63  ity.Medium, trac
12740 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e  eCallback, Strin
12750 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
12760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12770 20 20 20 22 4f 72 69 67 69 6e 61 6c 20 63 6f 6d     "Original com
12780 6d 61 6e 64 20 6c 69 6e 65 20 69 73 3a 20 7b 30  mand line is: {0
12790 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }",..           
127a0 20 20 20 20 20 20 20 20 20 20 20 20 20 45 6e 76               Env
127b0 69 72 6f 6e 6d 65 6e 74 2e 43 6f 6d 6d 61 6e 64  ironment.Command
127c0 4c 69 6e 65 29 2c 20 74 72 61 63 65 43 61 74 65  Line), traceCate
127d0 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
127e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
127f0 20 28 21 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e   (!configuration
12800 2e 77 68 61 74 49 66 29 0d 0a 20 20 20 20 20 20  .whatIf)..      
12810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
12820 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
12830 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
12840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12850 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 49 66       // NOTE: If
12860 20 74 68 65 20 64 65 62 75 67 67 65 72 20 69 73   the debugger is
12870 20 61 74 74 61 63 68 65 64 20 61 6e 64 20 57 68   attached and Wh
12880 61 74 2d 49 66 20 6d 6f 64 65 0d 0a 20 20 20 20  at-If mode..    
12890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
128a0 20 20 20 20 2f 2f 20 20 20 20 20 20 20 69 73 20      //       is 
128b0 5b 6e 6f 77 5d 20 64 69 73 61 62 6c 65 64 2c 20  [now] disabled, 
128c0 69 73 73 75 65 20 61 20 77 61 72 6e 69 6e 67 2e  issue a warning.
128d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
128e0 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
128f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12900 20 20 20 20 20 20 69 66 20 28 44 65 62 75 67 67        if (Debugg
12910 65 72 2e 49 73 41 74 74 61 63 68 65 64 29 0d 0a  er.IsAttached)..
12920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12930 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
12940 65 4f 70 73 2e 54 72 61 63 65 28 0d 0a 20 20 20  eOps.Trace(..   
12950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12960 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
12970 63 65 50 72 69 6f 72 69 74 79 2e 4d 65 64 69 75  cePriority.Mediu
12980 6d 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b  m, traceCallback
12990 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
129a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
129b0 20 20 20 22 46 6f 72 63 65 64 20 74 6f 20 64 69     "Forced to di
129c0 73 61 62 6c 65 20 5c 22 77 68 61 74 2d 69 66 5c  sable \"what-if\
129d0 22 20 6d 6f 64 65 20 77 69 74 68 20 22 20 2b 0d  " mode with " +.
129e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
129f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12a00 20 22 64 65 62 75 67 67 65 72 20 61 74 74 61 63   "debugger attac
12a10 68 65 64 2e 22 2c 20 74 72 61 63 65 43 61 74 65  hed.", traceCate
12a20 67 6f 72 79 29 3b 0d 0a 20 20 20 20 20 20 20 20  gory);..        
12a30 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
12a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12a50 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20     else..       
12a60 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
12a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12a80 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73          TraceOps
12a90 2e 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20  .Trace(..       
12aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12ab0 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69       TracePriori
12ac0 74 79 2e 48 69 67 68 65 72 2c 20 74 72 61 63 65  ty.Higher, trace
12ad0 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20  Callback,..     
12ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12af0 20 20 20 20 20 20 20 22 4e 6f 20 61 63 74 75 61         "No actua
12b00 6c 20 63 68 61 6e 67 65 73 20 77 69 6c 6c 20 62  l changes will b
12b10 65 20 6d 61 64 65 20 74 6f 20 74 68 69 73 20 22  e made to this "
12b20 20 2b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   +..            
12b30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12b40 22 73 79 73 74 65 6d 20 62 65 63 61 75 73 65 20  "system because 
12b50 5c 22 77 68 61 74 2d 69 66 5c 22 20 6d 6f 64 65  \"what-if\" mode
12b60 20 69 73 20 65 6e 61 62 6c 65 64 2e 22 2c 0d 0a   is enabled.",..
12b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12b80 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
12b90 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 20 20 20  eCategory);..   
12ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12bb0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
12bc0 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
12bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12be0 20 20 2f 2f 20 4e 4f 54 45 3a 20 49 66 20 74 68    // NOTE: If th
12bf0 65 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 20 68  e command line h
12c00 61 73 20 6e 6f 74 20 62 65 65 6e 20 6d 61 6e 75  as not been manu
12c10 61 6c 6c 79 0d 0a 20 20 20 20 20 20 20 20 20 20  ally..          
12c20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
12c30 20 20 20 63 6f 6e 66 69 72 6d 65 64 20 28 69 2e     confirmed (i.
12c40 65 2e 20 76 69 61 20 74 68 65 20 65 78 70 6c 69  e. via the expli
12c50 63 69 74 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65  cit command line
12c60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
12c70 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6f        //       o
12c80 70 74 69 6f 6e 29 2c 20 74 68 65 6e 20 73 74 6f  ption), then sto
12c90 70 20 70 72 6f 63 65 73 73 69 6e 67 20 6e 6f 77  p processing now
12ca0 2e 20 20 57 65 20 65 6e 66 6f 72 63 65 0d 0a 20  .  We enforce.. 
12cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12cc0 20 20 20 2f 2f 20 20 20 20 20 20 20 74 68 69 73     //       this
12cd0 20 72 75 6c 65 20 73 6f 20 74 68 61 74 20 73 69   rule so that si
12ce0 6d 70 6c 79 20 64 6f 75 62 6c 65 2d 63 6c 69 63  mply double-clic
12cf0 6b 69 6e 67 20 74 68 65 0d 0a 20 20 20 20 20 20  king the..      
12d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
12d10 20 20 20 20 20 20 20 65 78 65 63 75 74 61 62 6c         executabl
12d20 65 20 77 69 6c 6c 20 6e 6f 74 20 72 65 73 75 6c  e will not resul
12d30 74 20 69 6e 20 61 6e 79 20 63 68 61 6e 67 65 73  t in any changes
12d40 20 62 65 69 6e 67 0d 0a 20 20 20 20 20 20 20 20   being..        
12d50 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
12d60 20 20 20 20 20 6d 61 64 65 20 74 6f 20 74 68 65       made to the
12d70 20 73 79 73 74 65 6d 2e 0d 0a 20 20 20 20 20 20   system...      
12d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
12d90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
12da0 20 20 20 20 20 20 69 66 20 28 21 63 6f 6e 66 69        if (!confi
12db0 67 75 72 61 74 69 6f 6e 2e 63 6f 6e 66 69 72 6d  guration.confirm
12dc0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
12dd0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
12de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12df0 20 20 65 72 72 6f 72 20 3d 20 22 43 61 6e 6e 6f    error = "Canno
12e00 74 20 63 6f 6e 74 69 6e 75 65 2c 20 74 68 65 20  t continue, the 
12e10 5c 22 63 6f 6e 66 69 72 6d 5c 22 20 6f 70 74 69  \"confirm\" opti
12e20 6f 6e 20 69 73 20 22 20 2b 0d 0a 20 20 20 20 20  on is " +..     
12e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12e40 20 20 20 20 20 20 20 22 6e 6f 74 20 65 6e 61 62         "not enab
12e50 6c 65 64 2e 22 3b 0d 0a 0d 0a 20 20 20 20 20 20  led.";....      
12e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12e70 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
12e80 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
12e90 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
12ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
12eb0 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20  turn true;..    
12ec0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
12ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
12ee0 61 74 63 68 20 28 45 78 63 65 70 74 69 6f 6e 20  atch (Exception 
12ef0 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e)..            
12f00 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
12f10 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
12f20 4f 70 73 2e 54 72 61 63 65 28 0d 0a 20 20 20 20  Ops.Trace(..    
12f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12f40 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69 74      TracePriorit
12f50 79 2e 48 69 67 68 65 73 74 2c 20 74 72 61 63 65  y.Highest, trace
12f60 43 61 6c 6c 62 61 63 6b 2c 20 65 2c 0d 0a 20 20  Callback, e,..  
12f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12f80 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
12f90 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
12fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
12fb0 6f 72 20 3d 20 22 46 61 69 6c 65 64 20 74 6f 20  or = "Failed to 
12fc0 70 72 6f 63 65 73 73 20 63 6f 6e 66 69 67 75 72  process configur
12fd0 61 74 69 6f 6e 2e 22 3b 0d 0a 20 20 20 20 20 20  ation.";..      
12fe0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
12ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
13000 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
13010 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
13020 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
13030 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13040 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13050 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13060 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
13070 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
13080 62 6c 69 63 20 73 74 61 74 69 63 20 62 6f 6f 6c  blic static bool
13090 20 43 68 65 63 6b 49 6d 61 67 65 52 75 6e 74 69   CheckImageRunti
130a0 6d 65 56 65 72 73 69 6f 6e 28 0d 0a 20 20 20 20  meVersion(..    
130b0 20 20 20 20 20 20 20 20 20 20 20 20 43 6f 6e 66              Conf
130c0 69 67 75 72 61 74 69 6f 6e 20 63 6f 6e 66 69 67  iguration config
130d0 75 72 61 74 69 6f 6e 2c 0d 0a 20 20 20 20 20 20  uration,..      
130e0 20 20 20 20 20 20 20 20 20 20 56 73 4c 69 73 74            VsList
130f0 20 76 73 4c 69 73 74 2c 0d 0a 20 20 20 20 20 20   vsList,..      
13100 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 73            bool s
13110 74 72 69 63 74 2c 0d 0a 20 20 20 20 20 20 20 20  trict,..        
13120 20 20 20 20 20 20 20 20 72 65 66 20 73 74 72 69          ref stri
13130 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20  ng error..      
13140 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
13150 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
13160 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79 0d              try.
13170 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
13180 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
13190 20 20 20 20 20 20 20 20 69 66 20 28 63 6f 6e 66          if (conf
131a0 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c  iguration == nul
131b0 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
131c0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
131d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
131e0 20 20 20 65 72 72 6f 72 20 3d 20 22 49 6e 76 61     error = "Inva
131f0 6c 69 64 20 63 6f 6e 66 69 67 75 72 61 74 69 6f  lid configuratio
13200 6e 2e 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  n.";..          
13210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
13220 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
13230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13240 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
13250 20 20 20 20 20 20 20 20 20 20 41 73 73 65 6d 62            Assemb
13260 6c 79 20 61 73 73 65 6d 62 6c 79 20 3d 20 63 6f  ly assembly = co
13270 6e 66 69 67 75 72 61 74 69 6f 6e 2e 61 73 73 65  nfiguration.asse
13280 6d 62 6c 79 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  mbly;....       
13290 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
132a0 28 61 73 73 65 6d 62 6c 79 20 3d 3d 20 6e 75 6c  (assembly == nul
132b0 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
132c0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
132d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
132e0 20 20 20 65 72 72 6f 72 20 3d 20 22 49 6e 76 61     error = "Inva
132f0 6c 69 64 20 61 73 73 65 6d 62 6c 79 2e 22 3b 0d  lid assembly.";.
13300 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
13310 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
13320 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
13330 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
13340 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
13350 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
13360 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
13370 4e 4f 54 45 3a 20 57 68 61 74 20 76 65 72 73 69  NOTE: What versi
13380 6f 6e 20 6f 66 20 74 68 65 20 72 75 6e 74 69 6d  on of the runtim
13390 65 20 77 61 73 20 74 68 65 20 63 6f 72 65 20 28  e was the core (
133a0 70 72 69 6d 61 72 79 29 0d 0a 20 20 20 20 20 20  primary)..      
133b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
133c0 20 20 20 20 20 20 20 61 73 73 65 6d 62 6c 79 20         assembly 
133d0 63 6f 6d 70 69 6c 65 64 20 61 67 61 69 6e 73 74  compiled against
133e0 20 28 65 2e 67 2e 20 22 76 32 2e 30 2e 35 30 37   (e.g. "v2.0.507
133f0 32 37 22 20 6f 72 0d 0a 20 20 20 20 20 20 20 20  27" or..        
13400 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
13410 20 20 20 20 20 22 76 34 2e 30 2e 33 30 33 31 39       "v4.0.30319
13420 22 29 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ")...           
13430 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
13440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13450 20 73 74 72 69 6e 67 20 63 6f 72 65 49 6d 61 67   string coreImag
13460 65 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 20  eRuntimeVersion 
13470 3d 20 47 65 74 49 6d 61 67 65 52 75 6e 74 69 6d  = GetImageRuntim
13480 65 56 65 72 73 69 6f 6e 28 0d 0a 20 20 20 20 20  eVersion(..     
13490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
134a0 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e     configuration
134b0 2e 63 6f 72 65 46 69 6c 65 4e 61 6d 65 29 3b 0d  .coreFileName);.
134c0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
134d0 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
134e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
134f0 2f 20 54 4f 44 4f 3a 20 52 65 73 74 72 69 63 74  / TODO: Restrict
13500 20 74 68 65 20 63 6f 6e 66 69 67 75 72 61 74 69   the configurati
13510 6f 6e 20 62 61 73 65 64 20 6f 6e 20 77 68 69 63  on based on whic
13520 68 20 69 6d 61 67 65 0d 0a 20 20 20 20 20 20 20  h image..       
13530 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
13540 20 20 20 20 20 20 72 75 6e 74 69 6d 65 20 76 65        runtime ve
13550 72 73 69 6f 6e 73 20 28 77 68 69 63 68 20 6d 6f  rsions (which mo
13560 72 65 2d 6f 72 2d 6c 65 73 73 20 63 6f 72 72 65  re-or-less corre
13570 73 70 6f 6e 64 0d 0a 20 20 20 20 20 20 20 20 20  spond..         
13580 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
13590 20 20 20 20 74 6f 20 2e 4e 45 54 20 46 72 61 6d      to .NET Fram
135a0 65 77 6f 72 6b 20 76 65 72 73 69 6f 6e 73 29 20  ework versions) 
135b0 61 72 65 20 73 75 70 70 6f 72 74 65 64 20 62 79  are supported by
135c0 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 20 20   the..          
135d0 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
135e0 20 20 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 56     versions of V
135f0 69 73 75 61 6c 20 53 74 75 64 69 6f 20 74 68 61  isual Studio tha
13600 74 20 61 72 65 20 69 6e 73 74 61 6c 6c 65 64 2e  t are installed.
13610 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
13620 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
13630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
13640 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20  turn true;..    
13650 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
13660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
13670 61 74 63 68 20 28 45 78 63 65 70 74 69 6f 6e 20  atch (Exception 
13680 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e)..            
13690 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
136a0 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
136b0 4f 70 73 2e 54 72 61 63 65 28 0d 0a 20 20 20 20  Ops.Trace(..    
136c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
136d0 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69 74      TracePriorit
136e0 79 2e 48 69 67 68 65 73 74 2c 20 74 72 61 63 65  y.Highest, trace
136f0 43 61 6c 6c 62 61 63 6b 2c 20 65 2c 0d 0a 20 20  Callback, e,..  
13700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13710 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67        traceCateg
13720 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
13730 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
13740 6f 72 20 3d 20 22 46 61 69 6c 65 64 20 74 6f 20  or = "Failed to 
13750 63 68 65 63 6b 20 69 6d 61 67 65 20 72 75 6e 74  check image runt
13760 69 6d 65 20 76 65 72 73 69 6f 6e 2e 22 3b 0d 0a  ime version.";..
13770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13780 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
13790 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
137a0 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
137b0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  }..            #
137c0 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
137d0 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
137e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
137f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13800 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13810 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
13820 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67              #reg
13830 69 6f 6e 20 50 75 62 6c 69 63 20 4d 65 74 68 6f  ion Public Metho
13840 64 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ds..            
13850 70 75 62 6c 69 63 20 62 6f 6f 6c 20 48 61 73 46  public bool HasF
13860 6c 61 67 73 28 0d 0a 20 20 20 20 20 20 20 20 20  lags(..         
13870 20 20 20 20 20 20 20 49 6e 73 74 61 6c 6c 46 6c         InstallFl
13880 61 67 73 20 68 61 73 46 6c 61 67 73 2c 0d 0a 20  ags hasFlags,.. 
13890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
138a0 6f 6f 6c 20 61 6c 6c 0d 0a 20 20 20 20 20 20 20  ool all..       
138b0 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
138c0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
138d0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 61             if (a
138e0 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
138f0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
13900 28 28 69 6e 73 74 61 6c 6c 46 6c 61 67 73 20 26  ((installFlags &
13910 20 68 61 73 46 6c 61 67 73 29 20 3d 3d 20 68 61   hasFlags) == ha
13920 73 46 6c 61 67 73 29 3b 0d 0a 20 20 20 20 20 20  sFlags);..      
13930 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a            else..
13940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13950 20 20 20 20 72 65 74 75 72 6e 20 28 28 69 6e 73      return ((ins
13960 74 61 6c 6c 46 6c 61 67 73 20 26 20 68 61 73 46  tallFlags & hasF
13970 6c 61 67 73 29 20 21 3d 20 49 6e 73 74 61 6c 6c  lags) != Install
13980 46 6c 61 67 73 2e 4e 6f 6e 65 29 3b 0d 0a 20 20  Flags.None);..  
13990 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
139a0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
139b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
139c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
139d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
139e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
139f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
13a00 62 6c 69 63 20 76 6f 69 64 20 44 75 6d 70 28 29  blic void Dump()
13a10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
13a20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
13a30 20 69 66 20 28 74 72 61 63 65 43 61 6c 6c 62 61   if (traceCallba
13a40 63 6b 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ck != null)..   
13a50 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
13a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13a70 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63      traceCallbac
13a80 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  k(String.Format(
13a90 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d  NameAndValueForm
13aa0 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at,..           
13ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 41 73               "As
13ac0 73 65 6d 62 6c 79 22 2c 20 46 6f 72 44 69 73 70  sembly", ForDisp
13ad0 6c 61 79 28 61 73 73 65 6d 62 6c 79 29 29 2c 0d  lay(assembly)),.
13ae0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
13af0 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
13b00 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
13b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13b20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74  traceCallback(St
13b30 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65  ring.Format(Name
13b40 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d  AndValueFormat,.
13b50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
13b60 20 20 20 20 20 20 20 20 20 22 4c 6f 67 46 69 6c           "LogFil
13b70 65 4e 61 6d 65 22 2c 20 46 6f 72 44 69 73 70 6c  eName", ForDispl
13b80 61 79 28 6c 6f 67 46 69 6c 65 4e 61 6d 65 29 29  ay(logFileName))
13b90 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
13ba0 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
13bb0 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
13bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13bd0 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28    traceCallback(
13be0 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61  String.Format(Na
13bf0 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74  meAndValueFormat
13c00 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
13c10 20 20 20 20 20 20 20 20 20 20 20 22 44 69 72 65             "Dire
13c20 63 74 6f 72 79 22 2c 20 46 6f 72 44 69 73 70 6c  ctory", ForDispl
13c30 61 79 28 64 69 72 65 63 74 6f 72 79 29 29 2c 0d  ay(directory)),.
13c40 0a 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 74 72 61 63 65 43 61           traceCa
13c60 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
13c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13c80 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74  traceCallback(St
13c90 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65  ring.Format(Name
13ca0 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d  AndValueFormat,.
13cb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
13cc0 20 20 20 20 20 20 20 20 20 22 43 6f 72 65 46 69           "CoreFi
13cd0 6c 65 4e 61 6d 65 22 2c 20 46 6f 72 44 69 73 70  leName", ForDisp
13ce0 6c 61 79 28 63 6f 72 65 46 69 6c 65 4e 61 6d 65  lay(coreFileName
13cf0 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
13d00 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
13d10 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
13d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13d30 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63      traceCallbac
13d40 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  k(String.Format(
13d50 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d  NameAndValueForm
13d60 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at,..           
13d70 20 20 20 20 20 20 20 20 20 20 20 20 20 22 4c 69               "Li
13d80 6e 71 46 69 6c 65 4e 61 6d 65 22 2c 20 46 6f 72  nqFileName", For
13d90 44 69 73 70 6c 61 79 28 6c 69 6e 71 46 69 6c 65  Display(linqFile
13da0 4e 61 6d 65 29 29 2c 0d 0a 20 20 20 20 20 20 20  Name)),..       
13db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13dc0 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
13dd0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
13de0 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c          traceCal
13df0 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72  lback(String.For
13e00 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65  mat(NameAndValue
13e10 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20  Format,..       
13e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13e30 20 22 44 65 73 69 67 6e 65 72 46 69 6c 65 4e 61   "DesignerFileNa
13e40 6d 65 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  me", ForDisplay(
13e50 64 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65  designerFileName
13e60 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
13e70 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
13e80 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
13e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13ea0 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63      traceCallbac
13eb0 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  k(String.Format(
13ec0 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d  NameAndValueForm
13ed0 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at,..           
13ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 54 72               "Tr
13ef0 61 63 65 46 6f 72 6d 61 74 22 2c 20 46 6f 72 44  aceFormat", ForD
13f00 69 73 70 6c 61 79 28 74 72 61 63 65 46 6f 72 6d  isplay(traceForm
13f10 61 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  at)),..         
13f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
13f30 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
13f40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
13f50 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
13f60 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ack(String.Forma
13f70 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f  t(NameAndValueFo
13f80 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  rmat,..         
13f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
13fa0 49 6e 73 74 61 6c 6c 46 6c 61 67 73 22 2c 20 46  InstallFlags", F
13fb0 6f 72 44 69 73 70 6c 61 79 28 69 6e 73 74 61 6c  orDisplay(instal
13fc0 6c 46 6c 61 67 73 29 29 2c 0d 0a 20 20 20 20 20  lFlags)),..     
13fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13fe0 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
13ff0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
14000 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
14010 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46  allback(String.F
14020 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c  ormat(NameAndVal
14030 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20  ueFormat,..     
14040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14050 20 20 20 22 54 72 61 63 65 50 72 69 6f 72 69 74     "TracePriorit
14060 79 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74  y", ForDisplay(t
14070 72 61 63 65 50 72 69 6f 72 69 74 79 29 29 2c 0d  racePriority)),.
14080 0a 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 74 72 61 63 65 43 61           traceCa
140a0 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
140b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
140c0 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74  traceCallback(St
140d0 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65  ring.Format(Name
140e0 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d  AndValueFormat,.
140f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
14100 20 20 20 20 20 20 20 20 20 22 49 6e 73 74 61 6c           "Instal
14110 6c 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 69  l", ForDisplay(i
14120 6e 73 74 61 6c 6c 29 29 2c 0d 0a 20 20 20 20 20  nstall)),..     
14130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14140 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
14150 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
14160 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
14170 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46  allback(String.F
14180 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c  ormat(NameAndVal
14190 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20  ueFormat,..     
141a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
141b0 20 20 20 22 4e 6f 44 65 73 6b 74 6f 70 22 2c 20     "NoDesktop", 
141c0 46 6f 72 44 69 73 70 6c 61 79 28 6e 6f 44 65 73  ForDisplay(noDes
141d0 6b 74 6f 70 29 29 2c 0d 0a 20 20 20 20 20 20 20  ktop)),..       
141e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
141f0 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
14200 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
14210 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c          traceCal
14220 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72  lback(String.For
14230 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65  mat(NameAndValue
14240 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20  Format,..       
14250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14260 20 22 4e 6f 43 6f 6d 70 61 63 74 22 2c 20 46 6f   "NoCompact", Fo
14270 72 44 69 73 70 6c 61 79 28 6e 6f 43 6f 6d 70 61  rDisplay(noCompa
14280 63 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  ct)),..         
14290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
142a0 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
142b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
142c0 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
142d0 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ack(String.Forma
142e0 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f  t(NameAndValueFo
142f0 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  rmat,..         
14300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
14310 4e 6f 4e 65 74 46 78 32 30 22 2c 20 46 6f 72 44  NoNetFx20", ForD
14320 69 73 70 6c 61 79 28 6e 6f 4e 65 74 46 78 32 30  isplay(noNetFx20
14330 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
14340 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
14350 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
14360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14370 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63      traceCallbac
14380 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  k(String.Format(
14390 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d  NameAndValueForm
143a0 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at,..           
143b0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 4e 6f               "No
143c0 4e 65 74 46 78 34 30 22 2c 20 46 6f 72 44 69 73  NetFx40", ForDis
143d0 70 6c 61 79 28 6e 6f 4e 65 74 46 78 34 30 29 29  play(noNetFx40))
143e0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
143f0 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
14400 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
14410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14420 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28    traceCallback(
14430 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61  String.Format(Na
14440 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74  meAndValueFormat
14450 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
14460 20 20 20 20 20 20 20 20 20 20 20 22 4e 6f 56 73             "NoVs
14470 32 30 30 38 22 2c 20 46 6f 72 44 69 73 70 6c 61  2008", ForDispla
14480 79 28 6e 6f 56 73 32 30 30 38 29 29 2c 0d 0a 20  y(noVs2008)),.. 
14490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
144a0 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
144b0 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
144c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
144d0 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69  aceCallback(Stri
144e0 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e  ng.Format(NameAn
144f0 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20  dValueFormat,.. 
14500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14510 20 20 20 20 20 20 20 22 4e 6f 56 73 32 30 31 30         "NoVs2010
14520 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 6e 6f  ", ForDisplay(no
14530 56 73 32 30 31 30 29 29 2c 0d 0a 20 20 20 20 20  Vs2010)),..     
14540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14550 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
14560 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
14570 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
14580 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46  allback(String.F
14590 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c  ormat(NameAndVal
145a0 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20  ueFormat,..     
145b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
145c0 20 20 20 22 4e 6f 54 72 61 63 65 22 2c 20 46 6f     "NoTrace", Fo
145d0 72 44 69 73 70 6c 61 79 28 6e 6f 54 72 61 63 65  rDisplay(noTrace
145e0 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
145f0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
14600 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
14610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14620 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63      traceCallbac
14630 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  k(String.Format(
14640 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d  NameAndValueForm
14650 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at,..           
14660 20 20 20 20 20 20 20 20 20 20 20 20 20 22 4e 6f               "No
14670 43 6f 6e 73 6f 6c 65 22 2c 20 46 6f 72 44 69 73  Console", ForDis
14680 70 6c 61 79 28 6e 6f 43 6f 6e 73 6f 6c 65 29 29  play(noConsole))
14690 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
146a0 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
146b0 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
146c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
146d0 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28    traceCallback(
146e0 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61  String.Format(Na
146f0 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74  meAndValueFormat
14700 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
14710 20 20 20 20 20 20 20 20 20 20 20 22 4e 6f 4c 6f             "NoLo
14720 67 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 6e  g", ForDisplay(n
14730 6f 4c 6f 67 29 29 2c 0d 0a 20 20 20 20 20 20 20  oLog)),..       
14740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14750 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
14760 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
14770 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c          traceCal
14780 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72  lback(String.For
14790 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65  mat(NameAndValue
147a0 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20  Format,..       
147b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
147c0 20 22 57 68 61 74 49 66 22 2c 20 46 6f 72 44 69   "WhatIf", ForDi
147d0 73 70 6c 61 79 28 77 68 61 74 49 66 29 29 2c 0d  splay(whatIf)),.
147e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
147f0 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
14800 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
14810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14820 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74  traceCallback(St
14830 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65  ring.Format(Name
14840 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d  AndValueFormat,.
14850 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
14860 20 20 20 20 20 20 20 20 20 22 56 65 72 62 6f 73           "Verbos
14870 65 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 76  e", ForDisplay(v
14880 65 72 62 6f 73 65 29 29 2c 0d 0a 20 20 20 20 20  erbose)),..     
14890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
148a0 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
148b0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
148c0 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
148d0 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46  allback(String.F
148e0 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c  ormat(NameAndVal
148f0 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20  ueFormat,..     
14900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14910 20 20 20 22 43 6f 6e 66 69 72 6d 22 2c 20 46 6f     "Confirm", Fo
14920 72 44 69 73 70 6c 61 79 28 63 6f 6e 66 69 72 6d  rDisplay(confirm
14930 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
14940 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
14950 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 20 20  ceCategory);..  
14960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
14970 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
14980 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64              #end
14990 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
149a0 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
149b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
149c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
149d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
149e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
149f0 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e           #region
14a00 20 50 75 62 6c 69 63 20 50 72 6f 70 65 72 74 69   Public Properti
14a10 65 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  es..            
14a20 70 72 69 76 61 74 65 20 41 73 73 65 6d 62 6c 79  private Assembly
14a30 20 61 73 73 65 6d 62 6c 79 3b 0d 0a 20 20 20 20   assembly;..    
14a40 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 41          public A
14a50 73 73 65 6d 62 6c 79 20 41 73 73 65 6d 62 6c 79  ssembly Assembly
14a60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
14a70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
14a80 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 61 73   get { return as
14a90 73 65 6d 62 6c 79 3b 20 7d 0d 0a 20 20 20 20 20  sembly; }..     
14aa0 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b             set {
14ab0 20 61 73 73 65 6d 62 6c 79 20 3d 20 76 61 6c 75   assembly = valu
14ac0 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  e; }..          
14ad0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
14ae0 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
14af0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14b00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14b10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14b20 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
14b30 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
14b40 72 69 6e 67 20 6c 6f 67 46 69 6c 65 4e 61 6d 65  ring logFileName
14b50 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ;..            p
14b60 75 62 6c 69 63 20 73 74 72 69 6e 67 20 4c 6f 67  ublic string Log
14b70 46 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20  FileName..      
14b80 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
14b90 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72           get { r
14ba0 65 74 75 72 6e 20 6c 6f 67 46 69 6c 65 4e 61 6d  eturn logFileNam
14bb0 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  e; }..          
14bc0 20 20 20 20 20 20 73 65 74 20 7b 20 6c 6f 67 46        set { logF
14bd0 69 6c 65 4e 61 6d 65 20 3d 20 76 61 6c 75 65 3b  ileName = value;
14be0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
14bf0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
14c00 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
14c10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14c20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14c30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14c40 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
14c50 20 20 20 20 70 72 69 76 61 74 65 20 73 74 72 69      private stri
14c60 6e 67 20 64 69 72 65 63 74 6f 72 79 3b 0d 0a 20  ng directory;.. 
14c70 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
14c80 63 20 73 74 72 69 6e 67 20 44 69 72 65 63 74 6f  c string Directo
14c90 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ry..            
14ca0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
14cb0 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20     get { return 
14cc0 64 69 72 65 63 74 6f 72 79 3b 20 7d 0d 0a 20 20  directory; }..  
14cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65                se
14ce0 74 20 7b 20 64 69 72 65 63 74 6f 72 79 20 3d 20  t { directory = 
14cf0 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20  value; }..      
14d00 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
14d10 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
14d20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14d30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14d40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14d50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
14d60 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
14d70 65 20 73 74 72 69 6e 67 20 63 6f 72 65 46 69 6c  e string coreFil
14d80 65 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20  eName;..        
14d90 20 20 20 20 70 75 62 6c 69 63 20 73 74 72 69 6e      public strin
14da0 67 20 43 6f 72 65 46 69 6c 65 4e 61 6d 65 0d 0a  g CoreFileName..
14db0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
14dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67                 g
14dd0 65 74 20 7b 20 72 65 74 75 72 6e 20 63 6f 72 65  et { return core
14de0 46 69 6c 65 4e 61 6d 65 3b 20 7d 0d 0a 20 20 20  FileName; }..   
14df0 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74               set
14e00 20 7b 20 63 6f 72 65 46 69 6c 65 4e 61 6d 65 20   { coreFileName 
14e10 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20  = value; }..    
14e20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
14e30 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
14e40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14e50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14e60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14e70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
14e80 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
14e90 61 74 65 20 73 74 72 69 6e 67 20 6c 69 6e 71 46  ate string linqF
14ea0 69 6c 65 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20  ileName;..      
14eb0 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 72        public str
14ec0 69 6e 67 20 4c 69 6e 71 46 69 6c 65 4e 61 6d 65  ing LinqFileName
14ed0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
14ee0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
14ef0 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 6c 69   get { return li
14f00 6e 71 46 69 6c 65 4e 61 6d 65 3b 20 7d 0d 0a 20  nqFileName; }.. 
14f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
14f20 65 74 20 7b 20 6c 69 6e 71 46 69 6c 65 4e 61 6d  et { linqFileNam
14f30 65 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20  e = value; }..  
14f40 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
14f50 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
14f60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14f70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14f80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14f90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
14fa0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
14fb0 69 76 61 74 65 20 73 74 72 69 6e 67 20 64 65 73  ivate string des
14fc0 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 3b 0d 0a  ignerFileName;..
14fd0 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
14fe0 69 63 20 73 74 72 69 6e 67 20 44 65 73 69 67 6e  ic string Design
14ff0 65 72 46 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20  erFileName..    
15000 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
15010 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b             get {
15020 20 72 65 74 75 72 6e 20 64 65 73 69 67 6e 65 72   return designer
15030 46 69 6c 65 4e 61 6d 65 3b 20 7d 0d 0a 20 20 20  FileName; }..   
15040 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74               set
15050 20 7b 20 64 65 73 69 67 6e 65 72 46 69 6c 65 4e   { designerFileN
15060 61 6d 65 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a  ame = value; }..
15070 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
15080 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
15090 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
150a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
150b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
150c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
150d0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
150e0 70 72 69 76 61 74 65 20 73 74 72 69 6e 67 20 74  private string t
150f0 72 61 63 65 46 6f 72 6d 61 74 3b 0d 0a 20 20 20  raceFormat;..   
15100 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
15110 73 74 72 69 6e 67 20 54 72 61 63 65 46 6f 72 6d  string TraceForm
15120 61 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  at..            
15130 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
15140 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20     get { return 
15150 74 72 61 63 65 46 6f 72 6d 61 74 3b 20 7d 0d 0a  traceFormat; }..
15160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15170 73 65 74 20 7b 20 74 72 61 63 65 46 6f 72 6d 61  set { traceForma
15180 74 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20  t = value; }..  
15190 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
151a0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
151b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
151c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
151d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
151e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
151f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
15200 69 76 61 74 65 20 49 6e 73 74 61 6c 6c 46 6c 61  ivate InstallFla
15210 67 73 20 69 6e 73 74 61 6c 6c 46 6c 61 67 73 3b  gs installFlags;
15220 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
15230 62 6c 69 63 20 49 6e 73 74 61 6c 6c 46 6c 61 67  blic InstallFlag
15240 73 20 49 6e 73 74 61 6c 6c 46 6c 61 67 73 0d 0a  s InstallFlags..
15250 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
15260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67                 g
15270 65 74 20 7b 20 72 65 74 75 72 6e 20 69 6e 73 74  et { return inst
15280 61 6c 6c 46 6c 61 67 73 3b 20 7d 0d 0a 20 20 20  allFlags; }..   
15290 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74               set
152a0 20 7b 20 69 6e 73 74 61 6c 6c 46 6c 61 67 73 20   { installFlags 
152b0 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20  = value; }..    
152c0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
152d0 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
152e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
152f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15300 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15310 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
15320 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
15330 61 74 65 20 54 72 61 63 65 50 72 69 6f 72 69 74  ate TracePriorit
15340 79 20 74 72 61 63 65 50 72 69 6f 72 69 74 79 3b  y tracePriority;
15350 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
15360 62 6c 69 63 20 54 72 61 63 65 50 72 69 6f 72 69  blic TracePriori
15370 74 79 20 54 72 61 63 65 50 72 69 6f 72 69 74 79  ty TracePriority
15380 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
15390 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
153a0 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 74 72   get { return tr
153b0 61 63 65 50 72 69 6f 72 69 74 79 3b 20 7d 0d 0a  acePriority; }..
153c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
153d0 73 65 74 20 7b 20 74 72 61 63 65 50 72 69 6f 72  set { tracePrior
153e0 69 74 79 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a  ity = value; }..
153f0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
15400 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
15410 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15420 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15430 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15440 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15450 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
15460 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 69 6e 73  private bool ins
15470 74 61 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20  tall;..         
15480 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 49     public bool I
15490 6e 73 74 61 6c 6c 0d 0a 20 20 20 20 20 20 20 20  nstall..        
154a0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
154b0 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74         get { ret
154c0 75 72 6e 20 69 6e 73 74 61 6c 6c 3b 20 7d 0d 0a  urn install; }..
154d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
154e0 73 65 74 20 7b 20 69 6e 73 74 61 6c 6c 20 3d 20  set { install = 
154f0 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20  value; }..      
15500 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
15510 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
15520 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15530 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15540 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15550 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
15560 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
15570 65 20 62 6f 6f 6c 20 6e 6f 44 65 73 6b 74 6f 70  e bool noDesktop
15580 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ;..            p
15590 75 62 6c 69 63 20 62 6f 6f 6c 20 4e 6f 44 65 73  ublic bool NoDes
155a0 6b 74 6f 70 0d 0a 20 20 20 20 20 20 20 20 20 20  ktop..          
155b0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
155c0 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72       get { retur
155d0 6e 20 6e 6f 44 65 73 6b 74 6f 70 3b 20 7d 0d 0a  n noDesktop; }..
155e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
155f0 73 65 74 20 7b 20 6e 6f 44 65 73 6b 74 6f 70 20  set { noDesktop 
15600 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20  = value; }..    
15610 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
15620 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
15630 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15640 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15650 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15660 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
15670 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
15680 61 74 65 20 62 6f 6f 6c 20 6e 6f 43 6f 6d 70 61  ate bool noCompa
15690 63 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ct;..           
156a0 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 4e 6f 43   public bool NoC
156b0 6f 6d 70 61 63 74 0d 0a 20 20 20 20 20 20 20 20  ompact..        
156c0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
156d0 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74         get { ret
156e0 75 72 6e 20 6e 6f 43 6f 6d 70 61 63 74 3b 20 7d  urn noCompact; }
156f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
15700 20 20 73 65 74 20 7b 20 6e 6f 43 6f 6d 70 61 63    set { noCompac
15710 74 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20  t = value; }..  
15720 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
15730 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
15740 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15750 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15760 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15770 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
15780 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
15790 69 76 61 74 65 20 62 6f 6f 6c 20 6e 6f 4e 65 74  ivate bool noNet
157a0 46 78 32 30 3b 0d 0a 20 20 20 20 20 20 20 20 20  Fx20;..         
157b0 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 4e     public bool N
157c0 6f 4e 65 74 46 78 32 30 0d 0a 20 20 20 20 20 20  oNetFx20..      
157d0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
157e0 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72           get { r
157f0 65 74 75 72 6e 20 6e 6f 4e 65 74 46 78 32 30 3b  eturn noNetFx20;
15800 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
15810 20 20 20 20 73 65 74 20 7b 20 6e 6f 4e 65 74 46      set { noNetF
15820 78 32 30 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a  x20 = value; }..
15830 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
15840 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
15850 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15860 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15870 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15880 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15890 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
158a0 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 6e 6f 4e  private bool noN
158b0 65 74 46 78 34 30 3b 0d 0a 20 20 20 20 20 20 20  etFx40;..       
158c0 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c       public bool
158d0 20 4e 6f 4e 65 74 46 78 34 30 0d 0a 20 20 20 20   NoNetFx40..    
158e0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
158f0 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b             get {
15900 20 72 65 74 75 72 6e 20 6e 6f 4e 65 74 46 78 34   return noNetFx4
15910 30 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  0; }..          
15920 20 20 20 20 20 20 73 65 74 20 7b 20 6e 6f 4e 65        set { noNe
15930 74 46 78 34 30 20 3d 20 76 61 6c 75 65 3b 20 7d  tFx40 = value; }
15940 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
15950 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
15960 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15970 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15980 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15990 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
159a0 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
159b0 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 6e    private bool n
159c0 6f 56 73 32 30 30 38 3b 0d 0a 20 20 20 20 20 20  oVs2008;..      
159d0 20 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f        public boo
159e0 6c 20 4e 6f 56 73 32 30 30 38 0d 0a 20 20 20 20  l NoVs2008..    
159f0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
15a00 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b             get {
15a10 20 72 65 74 75 72 6e 20 6e 6f 56 73 32 30 30 38   return noVs2008
15a20 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
15a30 20 20 20 20 20 73 65 74 20 7b 20 6e 6f 56 73 32       set { noVs2
15a40 30 30 38 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a  008 = value; }..
15a50 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
15a60 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
15a70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15a80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15a90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15aa0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15ab0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
15ac0 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 6e 6f 56  private bool noV
15ad0 73 32 30 31 30 3b 0d 0a 20 20 20 20 20 20 20 20  s2010;..        
15ae0 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20      public bool 
15af0 4e 6f 56 73 32 30 31 30 0d 0a 20 20 20 20 20 20  NoVs2010..      
15b00 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
15b10 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72           get { r
15b20 65 74 75 72 6e 20 6e 6f 56 73 32 30 31 30 3b 20  eturn noVs2010; 
15b30 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
15b40 20 20 20 73 65 74 20 7b 20 6e 6f 56 73 32 30 31     set { noVs201
15b50 30 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20  0 = value; }..  
15b60 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
15b70 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
15b80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15b90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15ba0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15bb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
15bc0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
15bd0 69 76 61 74 65 20 62 6f 6f 6c 20 6e 6f 54 72 61  ivate bool noTra
15be0 63 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ce;..           
15bf0 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 4e 6f 54   public bool NoT
15c00 72 61 63 65 0d 0a 20 20 20 20 20 20 20 20 20 20  race..          
15c10 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
15c20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72       get { retur
15c30 6e 20 6e 6f 54 72 61 63 65 3b 20 7d 0d 0a 20 20  n noTrace; }..  
15c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65                se
15c50 74 20 7b 20 6e 6f 54 72 61 63 65 20 3d 20 76 61  t { noTrace = va
15c60 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  lue; }..        
15c70 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
15c80 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
15c90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15ca0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15cb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15cc0 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
15cd0 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
15ce0 62 6f 6f 6c 20 6e 6f 43 6f 6e 73 6f 6c 65 3b 0d  bool noConsole;.
15cf0 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
15d00 6c 69 63 20 62 6f 6f 6c 20 4e 6f 43 6f 6e 73 6f  lic bool NoConso
15d10 6c 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  le..            
15d20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
15d30 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20     get { return 
15d40 6e 6f 43 6f 6e 73 6f 6c 65 3b 20 7d 0d 0a 20 20  noConsole; }..  
15d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65                se
15d60 74 20 7b 20 6e 6f 43 6f 6e 73 6f 6c 65 20 3d 20  t { noConsole = 
15d70 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20  value; }..      
15d80 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
15d90 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
15da0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15db0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15dc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15dd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
15de0 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
15df0 65 20 62 6f 6f 6c 20 6e 6f 4c 6f 67 3b 0d 0a 20  e bool noLog;.. 
15e00 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
15e10 63 20 62 6f 6f 6c 20 4e 6f 4c 6f 67 0d 0a 20 20  c bool NoLog..  
15e20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
15e30 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74               get
15e40 20 7b 20 72 65 74 75 72 6e 20 6e 6f 4c 6f 67 3b   { return noLog;
15e50 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
15e60 20 20 20 20 73 65 74 20 7b 20 6e 6f 4c 6f 67 20      set { noLog 
15e70 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20  = value; }..    
15e80 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
15e90 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
15ea0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15eb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15ec0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15ed0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
15ee0 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
15ef0 61 74 65 20 62 6f 6f 6c 20 77 68 61 74 49 66 3b  ate bool whatIf;
15f00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
15f10 62 6c 69 63 20 62 6f 6f 6c 20 57 68 61 74 49 66  blic bool WhatIf
15f20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
15f30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
15f40 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 77 68   get { return wh
15f50 61 74 49 66 3b 20 7d 0d 0a 20 20 20 20 20 20 20  atIf; }..       
15f60 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 77           set { w
15f70 68 61 74 49 66 20 3d 20 76 61 6c 75 65 3b 20 7d  hatIf = value; }
15f80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
15f90 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
15fa0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15fb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15fc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15fd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15fe0 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
15ff0 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 76    private bool v
16000 65 72 62 6f 73 65 3b 0d 0a 20 20 20 20 20 20 20  erbose;..       
16010 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c       public bool
16020 20 56 65 72 62 6f 73 65 0d 0a 20 20 20 20 20 20   Verbose..      
16030 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
16040 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72           get { r
16050 65 74 75 72 6e 20 76 65 72 62 6f 73 65 3b 20 7d  eturn verbose; }
16060 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
16070 20 20 73 65 74 20 7b 20 76 65 72 62 6f 73 65 20    set { verbose 
16080 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20  = value; }..    
16090 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
160a0 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
160b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
160c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
160d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
160e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
160f0 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
16100 61 74 65 20 62 6f 6f 6c 20 63 6f 6e 66 69 72 6d  ate bool confirm
16110 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ;..            p
16120 75 62 6c 69 63 20 62 6f 6f 6c 20 43 6f 6e 66 69  ublic bool Confi
16130 72 6d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  rm..            
16140 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
16150 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20     get { return 
16160 63 6f 6e 66 69 72 6d 3b 20 7d 0d 0a 20 20 20 20  confirm; }..    
16170 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
16180 7b 20 63 6f 6e 66 69 72 6d 20 3d 20 76 61 6c 75  { confirm = valu
16190 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  e; }..          
161a0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
161b0 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 20 20 20   #endregion..   
161c0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
161d0 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
161e0 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
161f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16200 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16210 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16220 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
16230 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e  .        #region
16240 20 46 72 61 6d 65 77 6f 72 6b 4c 69 73 74 20 43   FrameworkList C
16250 6c 61 73 73 0d 0a 20 20 20 20 20 20 20 20 70 72  lass..        pr
16260 69 76 61 74 65 20 73 65 61 6c 65 64 20 63 6c 61  ivate sealed cla
16270 73 73 20 46 72 61 6d 65 77 6f 72 6b 4c 69 73 74  ss FrameworkList
16280 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
16290 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e           #region
162a0 20 50 75 62 6c 69 63 20 43 6f 6e 73 74 72 75 63   Public Construc
162b0 74 6f 72 73 0d 0a 20 20 20 20 20 20 20 20 20 20  tors..          
162c0 20 20 70 75 62 6c 69 63 20 46 72 61 6d 65 77 6f    public Framewo
162d0 72 6b 4c 69 73 74 28 29 0d 0a 20 20 20 20 20 20  rkList()..      
162e0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
162f0 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e           // do n
16300 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20  othing...       
16310 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
16320 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
16330 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
16340 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16350 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16360 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16370 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16380 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
16390 20 23 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20   #region Public 
163a0 4d 65 74 68 6f 64 73 0d 0a 20 20 20 20 20 20 20  Methods..       
163b0 20 20 20 20 20 70 72 69 76 61 74 65 20 52 65 67       private Reg
163c0 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79  istryKey rootKey
163d0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ;..            p
163e0 75 62 6c 69 63 20 52 65 67 69 73 74 72 79 4b 65  ublic RegistryKe
163f0 79 20 52 6f 6f 74 4b 65 79 0d 0a 20 20 20 20 20  y RootKey..     
16400 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
16410 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20            get { 
16420 72 65 74 75 72 6e 20 72 6f 6f 74 4b 65 79 3b 20  return rootKey; 
16430 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
16440 20 20 20 73 65 74 20 7b 20 72 6f 6f 74 4b 65 79     set { rootKey
16450 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20   = value; }..   
16460 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
16470 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
16480 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16490 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
164a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
164b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
164c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
164d0 76 61 74 65 20 53 74 72 69 6e 67 4c 69 73 74 20  vate StringList 
164e0 6e 61 6d 65 73 3b 0d 0a 20 20 20 20 20 20 20 20  names;..        
164f0 20 20 20 20 70 75 62 6c 69 63 20 53 74 72 69 6e      public Strin
16500 67 4c 69 73 74 20 4e 61 6d 65 73 0d 0a 20 20 20  gList Names..   
16510 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
16520 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20              get 
16530 7b 20 72 65 74 75 72 6e 20 6e 61 6d 65 73 3b 20  { return names; 
16540 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
16550 20 20 20 73 65 74 20 7b 20 6e 61 6d 65 73 20 3d     set { names =
16560 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20   value; }..     
16570 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
16580 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
16590 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
165a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
165b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
165c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
165d0 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
165e0 74 65 20 56 65 72 73 69 6f 6e 4d 61 70 20 76 65  te VersionMap ve
165f0 72 73 69 6f 6e 73 3b 0d 0a 20 20 20 20 20 20 20  rsions;..       
16600 20 20 20 20 20 70 75 62 6c 69 63 20 56 65 72 73       public Vers
16610 69 6f 6e 4d 61 70 20 56 65 72 73 69 6f 6e 73 0d  ionMap Versions.
16620 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
16630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16640 67 65 74 20 7b 20 72 65 74 75 72 6e 20 76 65 72  get { return ver
16650 73 69 6f 6e 73 3b 20 7d 0d 0a 20 20 20 20 20 20  sions; }..      
16660 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20            set { 
16670 76 65 72 73 69 6f 6e 73 20 3d 20 76 61 6c 75 65  versions = value
16680 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
16690 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
166a0 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
166b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
166c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
166d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
166e0 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
166f0 20 20 20 20 20 70 72 69 76 61 74 65 20 53 74 72       private Str
16700 69 6e 67 4c 69 73 74 20 70 6c 61 74 66 6f 72 6d  ingList platform
16710 4e 61 6d 65 73 3b 0d 0a 20 20 20 20 20 20 20 20  Names;..        
16720 20 20 20 20 70 75 62 6c 69 63 20 53 74 72 69 6e      public Strin
16730 67 4c 69 73 74 20 50 6c 61 74 66 6f 72 6d 4e 61  gList PlatformNa
16740 6d 65 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20  mes..           
16750 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
16760 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e      get { return
16770 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 73 3b 20   platformNames; 
16780 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
16790 20 20 20 73 65 74 20 7b 20 70 6c 61 74 66 6f 72     set { platfor
167a0 6d 4e 61 6d 65 73 20 3d 20 76 61 6c 75 65 3b 20  mNames = value; 
167b0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
167c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65  ..            #e
167d0 6e 64 72 65 67 69 6f 6e 0d 0a 20 20 20 20 20 20  ndregion..      
167e0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e    }..        #en
167f0 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
16800 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
16810 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16820 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16830 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16840 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
16850 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 56 73        #region Vs
16860 4c 69 73 74 20 43 6c 61 73 73 0d 0a 20 20 20 20  List Class..    
16870 20 20 20 20 70 72 69 76 61 74 65 20 73 65 61 6c      private seal
16880 65 64 20 63 6c 61 73 73 20 56 73 4c 69 73 74 0d  ed class VsList.
16890 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
168a0 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
168b0 50 75 62 6c 69 63 20 43 6f 6e 73 74 72 75 63 74  Public Construct
168c0 6f 72 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ors..           
168d0 20 70 75 62 6c 69 63 20 56 73 4c 69 73 74 28 29   public VsList()
168e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
168f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
16900 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d   // do nothing..
16910 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
16920 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64              #end
16930 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
16940 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
16950 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16960 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16970 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16980 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
16990 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e           #region
169a0 20 50 75 62 6c 69 63 20 50 72 6f 70 65 72 74 69   Public Properti
169b0 65 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  es..            
169c0 70 72 69 76 61 74 65 20 52 65 67 69 73 74 72 79  private Registry
169d0 4b 65 79 20 72 6f 6f 74 4b 65 79 3b 0d 0a 20 20  Key rootKey;..  
169e0 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
169f0 20 52 65 67 69 73 74 72 79 4b 65 79 20 52 6f 6f   RegistryKey Roo
16a00 74 4b 65 79 0d 0a 20 20 20 20 20 20 20 20 20 20  tKey..          
16a10 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
16a20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72       get { retur
16a30 6e 20 72 6f 6f 74 4b 65 79 3b 20 7d 0d 0a 20 20  n rootKey; }..  
16a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65                se
16a50 74 20 7b 20 72 6f 6f 74 4b 65 79 20 3d 20 76 61  t { rootKey = va
16a60 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  lue; }..        
16a70 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
16a80 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
16a90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16aa0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16ab0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16ac0 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
16ad0 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
16ae0 56 65 72 73 69 6f 6e 4c 69 73 74 20 76 65 72 73  VersionList vers
16af0 69 6f 6e 73 3b 0d 0a 20 20 20 20 20 20 20 20 20  ions;..         
16b00 20 20 20 70 75 62 6c 69 63 20 56 65 72 73 69 6f     public Versio
16b10 6e 4c 69 73 74 20 56 65 72 73 69 6f 6e 73 0d 0a  nList Versions..
16b20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
16b30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67                 g
16b40 65 74 20 7b 20 72 65 74 75 72 6e 20 76 65 72 73  et { return vers
16b50 69 6f 6e 73 3b 20 7d 0d 0a 20 20 20 20 20 20 20  ions; }..       
16b60 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 76           set { v
16b70 65 72 73 69 6f 6e 73 20 3d 20 76 61 6c 75 65 3b  ersions = value;
16b80 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
16b90 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
16ba0 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
16bb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16bc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16bd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16be0 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
16bf0 20 20 20 20 70 72 69 76 61 74 65 20 56 65 72 73      private Vers
16c00 69 6f 6e 4c 69 73 74 4d 61 70 20 66 72 61 6d 65  ionListMap frame
16c10 77 6f 72 6b 56 65 72 73 69 6f 6e 73 3b 0d 0a 20  workVersions;.. 
16c20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
16c30 63 20 56 65 72 73 69 6f 6e 4c 69 73 74 4d 61 70  c VersionListMap
16c40 20 46 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f   FrameworkVersio
16c50 6e 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ns..            
16c60 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
16c70 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20     get { return 
16c80 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e  frameworkVersion
16c90 73 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  s; }..          
16ca0 20 20 20 20 20 20 73 65 74 20 7b 20 66 72 61 6d        set { fram
16cb0 65 77 6f 72 6b 56 65 72 73 69 6f 6e 73 20 3d 20  eworkVersions = 
16cc0 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20  value; }..      
16cd0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
16ce0 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
16cf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16d00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16d10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16d20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
16d30 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
16d40 65 20 56 65 72 73 69 6f 6e 4c 69 73 74 20 69 6e  e VersionList in
16d50 73 74 61 6c 6c 65 64 56 65 72 73 69 6f 6e 73 3b  stalledVersions;
16d60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
16d70 62 6c 69 63 20 56 65 72 73 69 6f 6e 4c 69 73 74  blic VersionList
16d80 20 49 6e 73 74 61 6c 6c 65 64 56 65 72 73 69 6f   InstalledVersio
16d90 6e 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ns..            
16da0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
16db0 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20     get { return 
16dc0 69 6e 73 74 61 6c 6c 65 64 56 65 72 73 69 6f 6e  installedVersion
16dd0 73 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  s; }..          
16de0 20 20 20 20 20 20 73 65 74 20 7b 20 69 6e 73 74        set { inst
16df0 61 6c 6c 65 64 56 65 72 73 69 6f 6e 73 20 3d 20  alledVersions = 
16e00 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20  value; }..      
16e10 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
16e20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
16e30 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
16e40 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
16e50 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
16e60 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  on....        //
16e70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16e80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16e90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16ea0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16eb0 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
16ec0 20 23 72 65 67 69 6f 6e 20 50 72 69 76 61 74 65   #region Private
16ed0 20 43 6f 6e 73 74 61 6e 74 20 44 61 74 61 0d 0a   Constant Data..
16ee0 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
16ef0 63 6f 6e 73 74 20 73 74 72 69 6e 67 20 43 6f 72  const string Cor
16f00 65 46 69 6c 65 4e 61 6d 65 20 3d 20 22 53 79 73  eFileName = "Sys
16f10 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e  tem.Data.SQLite.
16f20 64 6c 6c 22 3b 0d 0a 20 20 20 20 20 20 20 20 70  dll";..        p
16f30 72 69 76 61 74 65 20 63 6f 6e 73 74 20 73 74 72  rivate const str
16f40 69 6e 67 20 4c 69 6e 71 46 69 6c 65 4e 61 6d 65  ing LinqFileName
16f50 20 3d 20 22 53 79 73 74 65 6d 2e 44 61 74 61 2e   = "System.Data.
16f60 53 51 4c 69 74 65 2e 4c 69 6e 71 2e 64 6c 6c 22  SQLite.Linq.dll"
16f70 3b 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  ;..        priva
16f80 74 65 20 63 6f 6e 73 74 20 73 74 72 69 6e 67 20  te const string 
16f90 44 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65  DesignerFileName
16fa0 20 3d 20 22 53 51 4c 69 74 65 2e 44 65 73 69 67   = "SQLite.Desig
16fb0 6e 65 72 2e 64 6c 6c 22 3b 0d 0a 20 20 20 20 20  ner.dll";..     
16fc0 20 20 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74     private const
16fd0 20 73 74 72 69 6e 67 20 50 72 6f 76 69 64 65 72   string Provider
16fe0 4e 61 6d 65 20 3d 20 22 53 51 4c 69 74 65 20 44  Name = "SQLite D
16ff0 61 74 61 20 50 72 6f 76 69 64 65 72 22 3b 0d 0a  ata Provider";..
17000 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
17010 63 6f 6e 73 74 20 73 74 72 69 6e 67 20 50 72 6f  const string Pro
17020 6a 65 63 74 4e 61 6d 65 20 3d 20 22 53 79 73 74  jectName = "Syst
17030 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 22 3b  em.Data.SQLite";
17040 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
17050 65 20 63 6f 6e 73 74 20 73 74 72 69 6e 67 20 4c  e const string L
17060 65 67 61 63 79 50 72 6f 6a 65 63 74 4e 61 6d 65  egacyProjectName
17070 20 3d 20 22 53 51 4c 69 74 65 22 3b 0d 0a 20 20   = "SQLite";..  
17080 20 20 20 20 20 20 70 72 69 76 61 74 65 20 63 6f        private co
17090 6e 73 74 20 73 74 72 69 6e 67 20 49 6e 76 61 72  nst string Invar
170a0 69 61 6e 74 4e 61 6d 65 20 3d 20 22 53 79 73 74  iantName = "Syst
170b0 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 22 3b  em.Data.SQLite";
170c0 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
170d0 65 20 63 6f 6e 73 74 20 73 74 72 69 6e 67 20 46  e const string F
170e0 61 63 74 6f 72 79 54 79 70 65 4e 61 6d 65 20 3d  actoryTypeName =
170f0 20 22 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51   "System.Data.SQ
17100 4c 69 74 65 2e 53 51 4c 69 74 65 46 61 63 74 6f  Lite.SQLiteFacto
17110 72 79 22 3b 0d 0a 20 20 20 20 20 20 20 20 70 72  ry";..        pr
17120 69 76 61 74 65 20 63 6f 6e 73 74 20 73 74 72 69  ivate const stri
17130 6e 67 20 44 65 73 63 72 69 70 74 69 6f 6e 20 3d  ng Description =
17140 20 22 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b   ".NET Framework
17150 20 44 61 74 61 20 50 72 6f 76 69 64 65 72 20 66   Data Provider f
17160 6f 72 20 53 51 4c 69 74 65 22 3b 0d 0a 0d 0a 20  or SQLite";.... 
17170 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
17180 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17190 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
171a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
171b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
171c0 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
171d0 65 20 63 6f 6e 73 74 20 73 74 72 69 6e 67 20 4e  e const string N
171e0 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61  ameAndValueForma
171f0 74 20 3d 20 22 7b 30 7d 3a 20 7b 31 7d 22 3b 0d  t = "{0}: {1}";.
17200 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
17210 20 63 6f 6e 73 74 20 73 74 72 69 6e 67 20 4c 6f   const string Lo
17220 67 46 69 6c 65 53 75 66 66 69 78 20 3d 20 22 2e  gFileSuffix = ".
17230 6c 6f 67 22 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  log";....       
17240 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
17250 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17260 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17270 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17280 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
17290 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74      private stat
172a0 69 63 20 72 65 61 64 6f 6e 6c 79 20 73 74 72 69  ic readonly stri
172b0 6e 67 20 56 73 49 64 46 6f 72 6d 61 74 20 3d 20  ng VsIdFormat = 
172c0 22 42 22 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  "B";....        
172d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
172e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
172f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17300 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17310 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
17320 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
17330 63 20 72 65 61 64 6f 6e 6c 79 20 73 74 72 69 6e  c readonly strin
17340 67 20 46 72 61 6d 65 77 6f 72 6b 4b 65 79 4e 61  g FrameworkKeyNa
17350 6d 65 20 3d 0d 0a 20 20 20 20 20 20 20 20 20 20  me =..          
17360 20 20 22 53 6f 66 74 77 61 72 65 5c 5c 4d 69 63    "Software\\Mic
17370 72 6f 73 6f 66 74 5c 5c 2e 4e 45 54 46 72 61 6d  rosoft\\.NETFram
17380 65 77 6f 72 6b 22 3b 0d 0a 0d 0a 20 20 20 20 20  ework";....     
17390 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
173a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
173b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
173c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
173d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
173e0 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
173f0 61 74 69 63 20 72 65 61 64 6f 6e 6c 79 20 73 74  atic readonly st
17400 72 69 6e 67 20 46 72 61 6d 65 77 6f 72 6b 53 64  ring FrameworkSd
17410 6b 4b 65 79 4e 61 6d 65 20 3d 0d 0a 20 20 20 20  kKeyName =..    
17420 20 20 20 20 20 20 20 20 22 53 6f 66 74 77 61 72          "Softwar
17430 65 5c 5c 4d 69 63 72 6f 73 6f 66 74 5c 5c 4d 69  e\\Microsoft\\Mi
17440 63 72 6f 73 6f 66 74 20 53 44 4b 73 5c 5c 2e 4e  crosoft SDKs\\.N
17450 45 54 46 72 61 6d 65 77 6f 72 6b 22 3b 0d 0a 0d  ETFramework";...
17460 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
17470 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17480 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17490 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
174a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
174b0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  ....        priv
174c0 61 74 65 20 73 74 61 74 69 63 20 72 65 61 64 6f  ate static reado
174d0 6e 6c 79 20 73 74 72 69 6e 67 20 57 69 6e 64 6f  nly string Windo
174e0 77 73 53 64 6b 4b 65 79 4e 61 6d 65 20 3d 0d 0a  wsSdkKeyName =..
174f0 20 20 20 20 20 20 20 20 20 20 20 20 22 53 6f 66              "Sof
17500 74 77 61 72 65 5c 5c 4d 69 63 72 6f 73 6f 66 74  tware\\Microsoft
17510 5c 5c 4d 69 63 72 6f 73 6f 66 74 20 53 44 4b 73  \\Microsoft SDKs
17520 5c 5c 57 69 6e 64 6f 77 73 22 3b 0d 0a 0d 0a 20  \\Windows";.... 
17530 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
17540 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17550 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17560 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17570 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
17580 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
17590 65 20 73 74 61 74 69 63 20 72 65 61 64 6f 6e 6c  e static readonl
175a0 79 20 73 74 72 69 6e 67 20 58 50 61 74 68 46 6f  y string XPathFo
175b0 72 41 64 64 45 6c 65 6d 65 6e 74 20 3d 0d 0a 20  rAddElement =.. 
175c0 20 20 20 20 20 20 20 20 20 20 20 22 63 6f 6e 66             "conf
175d0 69 67 75 72 61 74 69 6f 6e 2f 73 79 73 74 65 6d  iguration/system
175e0 2e 64 61 74 61 2f 44 62 50 72 6f 76 69 64 65 72  .data/DbProvider
175f0 46 61 63 74 6f 72 69 65 73 2f 61 64 64 5b 40 69  Factories/add[@i
17600 6e 76 61 72 69 61 6e 74 3d 5c 22 7b 30 7d 5c 22  nvariant=\"{0}\"
17610 5d 22 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70  ]";....        p
17620 72 69 76 61 74 65 20 73 74 61 74 69 63 20 72 65  rivate static re
17630 61 64 6f 6e 6c 79 20 73 74 72 69 6e 67 20 58 50  adonly string XP
17640 61 74 68 46 6f 72 52 65 6d 6f 76 65 45 6c 65 6d  athForRemoveElem
17650 65 6e 74 20 3d 0d 0a 20 20 20 20 20 20 20 20 20  ent =..         
17660 20 20 20 22 63 6f 6e 66 69 67 75 72 61 74 69 6f     "configuratio
17670 6e 2f 73 79 73 74 65 6d 2e 64 61 74 61 2f 44 62  n/system.data/Db
17680 50 72 6f 76 69 64 65 72 46 61 63 74 6f 72 69 65  ProviderFactorie
17690 73 2f 72 65 6d 6f 76 65 5b 40 69 6e 76 61 72 69  s/remove[@invari
176a0 61 6e 74 3d 5c 22 7b 30 7d 5c 22 5d 22 3b 0d 0a  ant=\"{0}\"]";..
176b0 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
176c0 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  on....        //
176d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
176e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
176f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17700 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17710 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
17720 20 23 72 65 67 69 6f 6e 20 50 72 69 76 61 74 65   #region Private
17730 20 44 61 74 61 0d 0a 20 20 20 20 20 20 20 20 70   Data..        p
17740 72 69 76 61 74 65 20 73 74 61 74 69 63 20 41 73  rivate static As
17750 73 65 6d 62 6c 79 20 74 68 69 73 41 73 73 65 6d  sembly thisAssem
17760 62 6c 79 20 3d 20 41 73 73 65 6d 62 6c 79 2e 47  bly = Assembly.G
17770 65 74 45 78 65 63 75 74 69 6e 67 41 73 73 65 6d  etExecutingAssem
17780 62 6c 79 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  bly();....      
17790 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
177a0 20 73 74 72 69 6e 67 20 74 72 61 63 65 43 61 74   string traceCat
177b0 65 67 6f 72 79 20 3d 20 50 61 74 68 2e 47 65 74  egory = Path.Get
177c0 46 69 6c 65 4e 61 6d 65 28 0d 0a 20 20 20 20 20  FileName(..     
177d0 20 20 20 20 20 20 20 74 68 69 73 41 73 73 65 6d         thisAssem
177e0 62 6c 79 2e 4c 6f 63 61 74 69 6f 6e 29 3b 0d 0a  bly.Location);..
177f0 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
17800 65 20 73 74 61 74 69 63 20 54 72 61 63 65 43 61  e static TraceCa
17810 6c 6c 62 61 63 6b 20 74 72 61 63 65 43 61 6c 6c  llback traceCall
17820 62 61 63 6b 20 3d 20 41 70 70 54 72 61 63 65 3b  back = AppTrace;
17830 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65  ..        #endre
17840 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
17850 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17860 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17870 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17880 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17890 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
178a0 20 20 20 23 72 65 67 69 6f 6e 20 54 72 61 63 65     #region Trace
178b0 20 48 61 6e 64 6c 69 6e 67 0d 0a 20 20 20 20 20   Handling..     
178c0 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
178d0 63 20 73 74 72 69 6e 67 20 47 65 74 4c 6f 67 46  c string GetLogF
178e0 69 6c 65 4e 61 6d 65 28 29 0d 0a 20 20 20 20 20  ileName()..     
178f0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
17900 20 20 73 74 72 69 6e 67 20 72 65 73 75 6c 74 20    string result 
17910 3d 20 50 61 74 68 2e 47 65 74 54 65 6d 70 46 69  = Path.GetTempFi
17920 6c 65 4e 61 6d 65 28 29 3b 20 2f 2a 20 74 68 72  leName(); /* thr
17930 6f 77 20 2a 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  ow */....       
17940 20 20 20 20 20 46 69 6c 65 2e 4d 6f 76 65 28 72       File.Move(r
17950 65 73 75 6c 74 2c 20 72 65 73 75 6c 74 20 2b 20  esult, result + 
17960 4c 6f 67 46 69 6c 65 53 75 66 66 69 78 29 3b 20  LogFileSuffix); 
17970 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20  /* throw */..   
17980 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 20           result 
17990 2b 3d 20 4c 6f 67 46 69 6c 65 53 75 66 66 69 78  += LogFileSuffix
179a0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
179b0 20 72 65 74 75 72 6e 20 72 65 73 75 6c 74 3b 0d   return result;.
179c0 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
179d0 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
179e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
179f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17a00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17a10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
17a20 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
17a30 20 73 74 61 74 69 63 20 76 6f 69 64 20 41 70 70   static void App
17a40 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20  Trace(..        
17a50 20 20 20 20 73 74 72 69 6e 67 20 6d 65 73 73 61      string messa
17a60 67 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ge,..           
17a70 20 73 74 72 69 6e 67 20 63 61 74 65 67 6f 72 79   string category
17a80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d  ..            ).
17a90 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
17aa0 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73          TraceOps
17ab0 2e 54 72 61 63 65 43 6f 72 65 28 53 74 72 69 6e  .TraceCore(Strin
17ac0 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
17ad0 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
17ae0 4f 70 73 2e 54 72 61 63 65 46 6f 72 6d 61 74 2c  Ops.TraceFormat,
17af0 20 54 72 61 63 65 4f 70 73 2e 4e 65 78 74 49 64   TraceOps.NextId
17b00 28 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  (),..           
17b10 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 54 69       TraceOps.Ti
17b20 6d 65 53 74 61 6d 70 28 44 61 74 65 54 69 6d 65  meStamp(DateTime
17b30 2e 55 74 63 4e 6f 77 29 2c 20 6d 65 73 73 61 67  .UtcNow), messag
17b40 65 29 2c 20 63 61 74 65 67 6f 72 79 29 3b 0d 0a  e), category);..
17b50 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
17b60 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
17b70 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
17b80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17b90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17ba0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17bb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17bc0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67  ....        #reg
17bd0 69 6f 6e 20 47 65 6e 65 72 69 63 20 53 74 72 69  ion Generic Stri
17be0 6e 67 20 48 61 6e 64 6c 69 6e 67 0d 0a 20 20 20  ng Handling..   
17bf0 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61       private sta
17c00 74 69 63 20 73 74 72 69 6e 67 20 46 6f 72 44 69  tic string ForDi
17c10 73 70 6c 61 79 28 0d 0a 20 20 20 20 20 20 20 20  splay(..        
17c20 20 20 20 20 6f 62 6a 65 63 74 20 76 61 6c 75 65      object value
17c30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d  ..            ).
17c40 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
17c50 20 20 20 20 20 20 20 20 69 66 20 28 76 61 6c 75          if (valu
17c60 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  e == null)..    
17c70 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
17c80 72 6e 20 22 3c 6e 75 6c 6c 3e 22 3b 0d 0a 0d 0a  rn "<null>";....
17c90 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
17ca0 6e 67 20 72 65 73 75 6c 74 3b 0d 0a 20 20 20 20  ng result;..    
17cb0 20 20 20 20 20 20 20 20 54 79 70 65 20 74 79 70          Type typ
17cc0 65 20 3d 20 76 61 6c 75 65 2e 47 65 74 54 79 70  e = value.GetTyp
17cd0 65 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  e();....        
17ce0 20 20 20 20 69 66 20 28 74 79 70 65 20 3d 3d 20      if (type == 
17cf0 74 79 70 65 6f 66 28 58 6d 6c 45 6c 65 6d 65 6e  typeof(XmlElemen
17d00 74 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  t))..           
17d10 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
17d20 20 20 20 20 58 6d 6c 45 6c 65 6d 65 6e 74 20 65      XmlElement e
17d30 6c 65 6d 65 6e 74 20 3d 20 28 58 6d 6c 45 6c 65  lement = (XmlEle
17d40 6d 65 6e 74 29 76 61 6c 75 65 3b 0d 0a 0d 0a 20  ment)value;.... 
17d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
17d60 65 73 75 6c 74 20 3d 20 65 6c 65 6d 65 6e 74 2e  esult = element.
17d70 4f 75 74 65 72 58 6d 6c 3b 0d 0a 20 20 20 20 20  OuterXml;..     
17d80 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
17d90 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 74        else if (t
17da0 79 70 65 20 3d 3d 20 74 79 70 65 6f 66 28 56 65  ype == typeof(Ve
17db0 72 73 69 6f 6e 29 29 0d 0a 20 20 20 20 20 20 20  rsion))..       
17dc0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
17dd0 20 20 20 20 20 20 20 20 56 65 72 73 69 6f 6e 20          Version 
17de0 76 65 72 73 69 6f 6e 20 3d 20 28 56 65 72 73 69  version = (Versi
17df0 6f 6e 29 76 61 6c 75 65 3b 0d 0a 0d 0a 20 20 20  on)value;....   
17e00 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 73               res
17e10 75 6c 74 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72  ult = String.For
17e20 6d 61 74 28 22 76 7b 30 7d 22 2c 20 76 65 72 73  mat("v{0}", vers
17e30 69 6f 6e 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ion);..         
17e40 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
17e50 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20    else..        
17e60 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
17e70 20 20 20 20 20 20 20 72 65 73 75 6c 74 20 3d 20         result = 
17e80 76 61 6c 75 65 2e 54 6f 53 74 72 69 6e 67 28 29  value.ToString()
17e90 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
17ea0 20 20 20 20 20 69 66 20 28 72 65 73 75 6c 74 2e       if (result.
17eb0 4c 65 6e 67 74 68 20 3d 3d 20 30 29 0d 0a 20 20  Length == 0)..  
17ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17ed0 20 20 72 65 74 75 72 6e 20 22 3c 65 6d 70 74 79    return "<empty
17ee0 3e 22 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  >";....         
17ef0 20 20 20 20 20 20 20 72 65 73 75 6c 74 20 3d 20         result = 
17f00 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
17f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17f20 20 20 20 20 74 79 70 65 2e 49 73 53 75 62 63 6c      type.IsSubcl
17f30 61 73 73 4f 66 28 74 79 70 65 6f 66 28 56 61 6c  assOf(typeof(Val
17f40 75 65 54 79 70 65 29 29 20 3f 20 22 7b 30 7d 22  ueType)) ? "{0}"
17f50 20 3a 20 22 5c 22 7b 30 7d 5c 22 22 2c 0d 0a 20   : "\"{0}\"",.. 
17f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17f70 20 20 20 72 65 73 75 6c 74 29 3b 0d 0a 20 20 20     result);..   
17f80 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
17f90 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
17fa0 20 72 65 73 75 6c 74 3b 0d 0a 20 20 20 20 20 20   result;..      
17fb0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e    }..        #en
17fc0 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
17fd0 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
17fe0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17ff0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18000 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18010 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
18020 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 2e 4e        #region .N
18030 45 54 20 46 72 61 6d 65 77 6f 72 6b 20 48 61 6e  ET Framework Han
18040 64 6c 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 70  dling..        p
18050 72 69 76 61 74 65 20 73 74 61 74 69 63 20 73 74  rivate static st
18060 72 69 6e 67 20 47 65 74 49 6d 61 67 65 52 75 6e  ring GetImageRun
18070 74 69 6d 65 56 65 72 73 69 6f 6e 28 0d 0a 20 20  timeVersion(..  
18080 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
18090 20 66 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20   fileName..     
180a0 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
180b0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
180c0 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20   try..          
180d0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
180e0 20 20 20 20 20 41 73 73 65 6d 62 6c 79 20 61 73       Assembly as
180f0 73 65 6d 62 6c 79 20 3d 0d 0a 20 20 20 20 20 20  sembly =..      
18100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 41 73                As
18110 73 65 6d 62 6c 79 2e 52 65 66 6c 65 63 74 69 6f  sembly.Reflectio
18120 6e 4f 6e 6c 79 4c 6f 61 64 46 72 6f 6d 28 66 69  nOnlyLoadFrom(fi
18130 6c 65 4e 61 6d 65 29 3b 20 2f 2a 20 74 68 72 6f  leName); /* thro
18140 77 20 2a 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  w */....        
18150 20 20 20 20 20 20 20 20 69 66 20 28 61 73 73 65          if (asse
18160 6d 62 6c 79 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20  mbly != null).. 
18170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18180 20 20 20 72 65 74 75 72 6e 20 61 73 73 65 6d 62     return assemb
18190 6c 79 2e 49 6d 61 67 65 52 75 6e 74 69 6d 65 56  ly.ImageRuntimeV
181a0 65 72 73 69 6f 6e 3b 0d 0a 20 20 20 20 20 20 20  ersion;..       
181b0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
181c0 20 20 20 20 63 61 74 63 68 0d 0a 20 20 20 20 20      catch..     
181d0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
181e0 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20            // do 
181f0 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20  nothing...      
18200 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
18210 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75         return nu
18220 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ll;..        }..
18230 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
18240 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69  /....        pri
18290 76 61 74 65 20 73 74 61 74 69 63 20 73 74 72 69  vate static stri
182a0 6e 67 20 47 65 74 46 72 61 6d 65 77 6f 72 6b 44  ng GetFrameworkD
182b0 69 72 65 63 74 6f 72 79 28 0d 0a 20 20 20 20 20  irectory(..     
182c0 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79 4b         RegistryK
182d0 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20  ey rootKey,..   
182e0 20 20 20 20 20 20 20 20 20 56 65 72 73 69 6f 6e           Version
182f0 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f   frameworkVersio
18300 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n,..            
18310 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20  bool whatIf,..  
18320 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76            bool v
18330 65 72 62 6f 73 65 0d 0a 20 20 20 20 20 20 20 20  erbose..        
18340 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b      )..        {
18350 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 75 73  ..            us
18360 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72  ing (MockRegistr
18370 79 4b 65 79 20 6b 65 79 20 3d 20 52 65 67 69 73  yKey key = Regis
18380 74 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75  tryHelper.OpenSu
18390 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20  bKey(..         
183a0 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b             rootK
183b0 65 79 2c 20 46 72 61 6d 65 77 6f 72 6b 4b 65 79  ey, FrameworkKey
183c0 4e 61 6d 65 2c 20 66 61 6c 73 65 2c 20 77 68 61  Name, false, wha
183d0 74 49 66 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a  tIf, verbose))..
183e0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
183f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
18400 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d  f (key == null).
18410 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
18420 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c       return null
18430 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
18440 20 20 20 20 20 6f 62 6a 65 63 74 20 76 61 6c 75       object valu
18450 65 20 3d 20 52 65 67 69 73 74 72 79 48 65 6c 70  e = RegistryHelp
18460 65 72 2e 47 65 74 56 61 6c 75 65 28 0d 0a 20 20  er.GetValue(..  
18470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18480 20 20 6b 65 79 2c 20 22 49 6e 73 74 61 6c 6c 52    key, "InstallR
18490 6f 6f 74 22 2c 20 6e 75 6c 6c 2c 20 77 68 61 74  oot", null, what
184a0 49 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d  If, verbose);...
184b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
184c0 20 69 66 20 28 21 28 76 61 6c 75 65 20 69 73 20   if (!(value is 
184d0 73 74 72 69 6e 67 29 29 0d 0a 20 20 20 20 20 20  string))..      
184e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
184f0 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20  turn null;....  
18500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
18510 74 75 72 6e 20 50 61 74 68 2e 43 6f 6d 62 69 6e  turn Path.Combin
18520 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
18530 20 20 20 20 20 20 20 20 28 73 74 72 69 6e 67 29          (string)
18540 76 61 6c 75 65 2c 20 53 74 72 69 6e 67 2e 46 6f  value, String.Fo
18550 72 6d 61 74 28 22 76 7b 30 7d 22 2c 20 66 72 61  rmat("v{0}", fra
18560 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 29 29 3b  meworkVersion));
18570 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
18580 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
18590 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
185a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
185b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d  /////////////...
185e0 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
185f0 20 73 74 61 74 69 63 20 73 74 72 69 6e 67 20 47   static string G
18600 65 74 53 64 6b 42 69 6e 61 72 79 46 69 6c 65 4e  etSdkBinaryFileN
18610 61 6d 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ame(..          
18620 20 20 52 65 67 69 73 74 72 79 4b 65 79 20 72 6f    RegistryKey ro
18630 6f 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20  otKey,..        
18640 20 20 20 20 73 74 72 69 6e 67 20 66 69 6c 65 4e      string fileN
18650 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ame,..          
18660 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a    bool whatIf,..
18670 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
18680 20 76 65 72 62 6f 73 65 0d 0a 20 20 20 20 20 20   verbose..      
18690 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
186a0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
186b0 53 74 72 69 6e 67 44 69 63 74 69 6f 6e 61 72 79  StringDictionary
186c0 20 72 65 73 75 6c 74 73 20 3d 20 6e 65 77 20 53   results = new S
186d0 74 72 69 6e 67 44 69 63 74 69 6f 6e 61 72 79 28  tringDictionary(
186e0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
186f0 20 20 73 74 72 69 6e 67 5b 5d 20 6b 65 79 4e 61    string[] keyNa
18700 6d 65 73 20 3d 20 7b 0d 0a 20 20 20 20 20 20 20  mes = {..       
18710 20 20 20 20 20 20 20 20 20 46 72 61 6d 65 77 6f           Framewo
18720 72 6b 4b 65 79 4e 61 6d 65 2c 0d 0a 20 20 20 20  rkKeyName,..    
18730 20 20 20 20 20 20 20 20 20 20 20 20 46 72 61 6d              Fram
18740 65 77 6f 72 6b 53 64 6b 4b 65 79 4e 61 6d 65 2c  eworkSdkKeyName,
18750 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
18760 20 20 57 69 6e 64 6f 77 73 53 64 6b 4b 65 79 4e    WindowsSdkKeyN
18770 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ame..           
18780 20 7d 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20   };....         
18790 20 20 20 73 74 72 69 6e 67 5b 5d 20 76 61 6c 75     string[] valu
187a0 65 4e 61 6d 65 73 20 3d 20 7b 0d 0a 20 20 20 20  eNames = {..    
187b0 20 20 20 20 20 20 20 20 20 20 20 20 22 73 64 6b              "sdk
187c0 49 6e 73 74 61 6c 6c 52 6f 6f 74 76 32 2e 30 22  InstallRootv2.0"
187d0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
187e0 20 20 20 22 49 6e 73 74 61 6c 6c 61 74 69 6f 6e     "Installation
187f0 46 6f 6c 64 65 72 22 2c 0d 0a 20 20 20 20 20 20  Folder",..      
18800 20 20 20 20 20 20 20 20 20 20 22 49 6e 73 74 61            "Insta
18810 6c 6c 61 74 69 6f 6e 46 6f 6c 64 65 72 22 0d 0a  llationFolder"..
18820 20 20 20 20 20 20 20 20 20 20 20 20 7d 3b 0d 0a              };..
18830 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
18840 6f 6c 5b 5d 20 75 73 65 53 75 62 4b 65 79 73 20  ol[] useSubKeys 
18850 3d 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  = {..           
18860 20 20 20 20 20 66 61 6c 73 65 2c 0d 0a 20 20 20       false,..   
18870 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 75               tru
18880 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
18890 20 20 20 20 74 72 75 65 0d 0a 20 20 20 20 20 20      true..      
188a0 20 20 20 20 20 20 7d 3b 0d 0a 0d 0a 20 20 20 20        };....    
188b0 20 20 20 20 20 20 20 20 66 6f 72 20 28 69 6e 74          for (int
188c0 20 69 6e 64 65 78 20 3d 20 30 3b 20 69 6e 64 65   index = 0; inde
188d0 78 20 3c 20 6b 65 79 4e 61 6d 65 73 2e 4c 65 6e  x < keyNames.Len
188e0 67 74 68 3b 20 69 6e 64 65 78 2b 2b 29 0d 0a 20  gth; index++).. 
188f0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
18900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 75 73                us
18910 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72  ing (MockRegistr
18920 79 4b 65 79 20 6b 65 79 20 3d 20 52 65 67 69 73  yKey key = Regis
18930 74 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75  tryHelper.OpenSu
18940 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20  bKey(..         
18950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
18960 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e 61 6d 65 73  ootKey, keyNames
18970 5b 69 6e 64 65 78 5d 2c 20 66 61 6c 73 65 2c 20  [index], false, 
18980 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29  whatIf, verbose)
18990 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
189a0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
189b0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6b 65            if (ke
189c0 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  y == null)..    
189d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
189e0 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 0d      continue;...
189f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
18a00 20 20 20 20 20 69 66 20 28 75 73 65 53 75 62 4b       if (useSubK
18a10 65 79 73 5b 69 6e 64 65 78 5d 29 0d 0a 20 20 20  eys[index])..   
18a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18a30 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
18a40 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 65              fore
18a50 61 63 68 20 28 73 74 72 69 6e 67 20 73 75 62 4b  ach (string subK
18a60 65 79 4e 61 6d 65 20 69 6e 20 52 65 67 69 73 74  eyName in Regist
18a70 72 79 48 65 6c 70 65 72 2e 47 65 74 53 75 62 4b  ryHelper.GetSubK
18a80 65 79 4e 61 6d 65 73 28 0d 0a 20 20 20 20 20 20  eyNames(..      
18a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18aa0 20 20 20 20 20 20 20 20 20 20 6b 65 79 2c 20 77            key, w
18ab0 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 29  hatIf, verbose))
18ac0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
18ad0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
18ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18af0 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28           using (
18b00 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20  MockRegistryKey 
18b10 73 75 62 4b 65 79 20 3d 20 52 65 67 69 73 74 72  subKey = Registr
18b20 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62 4b  yHelper.OpenSubK
18b30 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey(..           
18b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18b50 20 20 20 20 20 20 20 20 20 6b 65 79 2c 20 73 75           key, su
18b60 62 4b 65 79 4e 61 6d 65 2c 20 66 61 6c 73 65 2c  bKeyName, false,
18b70 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65   whatIf, verbose
18b80 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
18b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18ba0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
18bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18bc0 20 20 20 69 66 20 28 73 75 62 4b 65 79 20 3d 3d     if (subKey ==
18bd0 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
18be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18bf0 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74              cont
18c00 69 6e 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  inue;....       
18c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18c20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20           object 
18c30 76 61 6c 75 65 20 3d 20 52 65 67 69 73 74 72 79  value = Registry
18c40 48 65 6c 70 65 72 2e 47 65 74 56 61 6c 75 65 28  Helper.GetValue(
18c50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
18c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18c70 20 20 20 20 20 20 73 75 62 4b 65 79 2c 20 76 61        subKey, va
18c80 6c 75 65 4e 61 6d 65 73 5b 69 6e 64 65 78 5d 2c  lueNames[index],
18c90 20 6e 75 6c 6c 2c 20 77 68 61 74 49 66 2c 0d 0a   null, whatIf,..
18ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18cc0 20 20 20 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d      verbose);...
18cd0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
18ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18cf0 20 69 66 20 28 21 28 76 61 6c 75 65 20 69 73 20   if (!(value is 
18d00 73 74 72 69 6e 67 29 29 0d 0a 20 20 20 20 20 20  string))..      
18d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
18d30 6e 74 69 6e 75 65 3b 0d 0a 0d 0a 20 20 20 20 20  ntinue;....     
18d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18d50 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
18d60 67 20 70 61 74 68 20 3d 20 28 73 74 72 69 6e 67  g path = (string
18d70 29 76 61 6c 75 65 3b 0d 0a 0d 0a 20 20 20 20 20  )value;....     
18d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18d90 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21             if (!
18da0 44 69 72 65 63 74 6f 72 79 2e 45 78 69 73 74 73  Directory.Exists
18db0 28 70 61 74 68 29 29 0d 0a 20 20 20 20 20 20 20  (path))..       
18dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
18de0 74 69 6e 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  tinue;....      
18df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18e00 20 20 20 20 20 20 20 20 20 20 70 61 74 68 20 3d            path =
18e10 20 50 61 74 68 2e 43 6f 6d 62 69 6e 65 28 70 61   Path.Combine(pa
18e20 74 68 2c 20 22 62 69 6e 22 29 3b 0d 0a 0d 0a 20  th, "bin");.... 
18e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
18e50 66 20 28 21 44 69 72 65 63 74 6f 72 79 2e 45 78  f (!Directory.Ex
18e60 69 73 74 73 28 70 61 74 68 29 29 0d 0a 20 20 20  ists(path))..   
18e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18e90 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 0d 0a 20 20   continue;....  
18ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
18ec0 20 28 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f   (String.IsNullO
18ed0 72 45 6d 70 74 79 28 66 69 6c 65 4e 61 6d 65 29  rEmpty(fileName)
18ee0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
18ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18f00 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
18f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18f20 20 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74            result
18f30 73 2e 41 64 64 28 73 75 62 4b 65 79 2e 4e 61 6d  s.Add(subKey.Nam
18f40 65 2c 20 70 61 74 68 29 3b 0d 0a 20 20 20 20 20  e, path);..     
18f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
18f70 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20  ontinue;..      
18f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18f90 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
18fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70                 p
18fc0 61 74 68 20 3d 20 50 61 74 68 2e 43 6f 6d 62 69  ath = Path.Combi
18fd0 6e 65 28 70 61 74 68 2c 20 66 69 6c 65 4e 61 6d  ne(path, fileNam
18fe0 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
18ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19000 20 20 20 20 20 20 20 69 66 20 28 46 69 6c 65 2e         if (File.
19010 45 78 69 73 74 73 28 70 61 74 68 29 29 0d 0a 20  Exists(path)).. 
19020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19040 20 20 20 72 65 73 75 6c 74 73 2e 41 64 64 28 73     results.Add(s
19050 75 62 4b 65 79 2e 4e 61 6d 65 2c 20 70 61 74 68  ubKey.Name, path
19060 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
19070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19080 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
19090 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
190a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
190b0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
190c0 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20           else.. 
190d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
190e0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
190f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f 62                ob
19100 6a 65 63 74 20 76 61 6c 75 65 20 3d 20 52 65 67  ject value = Reg
19110 69 73 74 72 79 48 65 6c 70 65 72 2e 47 65 74 56  istryHelper.GetV
19120 61 6c 75 65 28 0d 0a 20 20 20 20 20 20 20 20 20  alue(..         
19130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19140 20 20 20 6b 65 79 2c 20 76 61 6c 75 65 4e 61 6d     key, valueNam
19150 65 73 5b 69 6e 64 65 78 5d 2c 20 6e 75 6c 6c 2c  es[index], null,
19160 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65   whatIf, verbose
19170 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
19180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
19190 20 28 21 28 76 61 6c 75 65 20 69 73 20 73 74 72   (!(value is str
191a0 69 6e 67 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ing))..         
191b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
191c0 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 0d 0a     continue;....
191d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
191e0 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 70          string p
191f0 61 74 68 20 3d 20 28 73 74 72 69 6e 67 29 76 61  ath = (string)va
19200 6c 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  lue;....        
19210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19220 69 66 20 28 21 44 69 72 65 63 74 6f 72 79 2e 45  if (!Directory.E
19230 78 69 73 74 73 28 70 61 74 68 29 29 0d 0a 20 20  xists(path))..  
19240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19250 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e            contin
19260 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ue;....         
19270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70                 p
19280 61 74 68 20 3d 20 50 61 74 68 2e 43 6f 6d 62 69  ath = Path.Combi
19290 6e 65 28 70 61 74 68 2c 20 22 62 69 6e 22 29 3b  ne(path, "bin");
192a0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
192b0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
192c0 21 44 69 72 65 63 74 6f 72 79 2e 45 78 69 73 74  !Directory.Exist
192d0 73 28 70 61 74 68 29 29 0d 0a 20 20 20 20 20 20  s(path))..      
192e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
192f0 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d        continue;.
19300 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
19310 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 53             if (S
19320 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d  tring.IsNullOrEm
19330 70 74 79 28 66 69 6c 65 4e 61 6d 65 29 29 0d 0a  pty(fileName))..
19340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19350 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
19360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19370 20 20 20 20 20 20 20 72 65 73 75 6c 74 73 2e 41         results.A
19380 64 64 28 6b 65 79 2e 4e 61 6d 65 2c 20 70 61 74  dd(key.Name, pat
19390 68 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  h);..           
193a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
193b0 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20   continue;..    
193c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
193d0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
193e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
193f0 20 70 61 74 68 20 3d 20 50 61 74 68 2e 43 6f 6d   path = Path.Com
19400 62 69 6e 65 28 70 61 74 68 2c 20 66 69 6c 65 4e  bine(path, fileN
19410 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ame);....       
19420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19430 20 69 66 20 28 46 69 6c 65 2e 45 78 69 73 74 73   if (File.Exists
19440 28 70 61 74 68 29 29 0d 0a 20 20 20 20 20 20 20  (path))..       
19450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19460 20 20 20 20 20 72 65 73 75 6c 74 73 2e 41 64 64       results.Add
19470 28 6b 65 79 2e 4e 61 6d 65 2c 20 70 61 74 68 29  (key.Name, path)
19480 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
19490 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
194a0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
194b0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
194c0 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
194d0 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54            // NOT
194e0 45 3a 20 49 66 20 77 65 20 66 6f 75 6e 64 20 73  E: If we found s
194f0 6f 6d 65 20 72 65 73 75 6c 74 73 2c 20 72 65 74  ome results, ret
19500 75 72 6e 20 74 68 65 20 6c 61 73 74 20 28 6c 61  urn the last (la
19510 74 65 73 74 29 20 6f 6e 65 2e 0d 0a 20 20 20 20  test) one...    
19520 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
19530 20 20 20 20 20 20 20 20 69 66 20 28 72 65 73 75          if (resu
19540 6c 74 73 2e 43 6f 75 6e 74 20 3e 20 30 29 0d 0a  lts.Count > 0)..
19550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19560 72 65 74 75 72 6e 20 72 65 73 75 6c 74 73 5b 6e  return results[n
19570 65 77 20 53 74 72 69 6e 67 4c 69 73 74 28 72 65  ew StringList(re
19580 73 75 6c 74 73 2e 4b 65 79 73 29 5b 72 65 73 75  sults.Keys)[resu
19590 6c 74 73 2e 43 6f 75 6e 74 20 2d 20 31 5d 5d 3b  lts.Count - 1]];
195a0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
195b0 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 20 20  return null;..  
195c0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
195d0 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
195e0 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
195f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19600 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a  //////////////..
19630 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f  ..        #regio
19640 6e 20 50 65 72 2d 46 72 61 6d 65 77 6f 72 6b 2f  n Per-Framework/
19650 50 6c 61 74 66 6f 72 6d 20 48 61 6e 64 6c 69 6e  Platform Handlin
19660 67 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  g..        priva
19670 74 65 20 73 74 61 74 69 63 20 76 6f 69 64 20 49  te static void I
19680 6e 69 74 69 61 6c 69 7a 65 46 72 61 6d 65 77 6f  nitializeFramewo
19690 72 6b 4c 69 73 74 28 0d 0a 20 20 20 20 20 20 20  rkList(..       
196a0 20 20 20 20 20 43 6f 6e 66 69 67 75 72 61 74 69       Configurati
196b0 6f 6e 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  on configuration
196c0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ,..            r
196d0 65 66 20 46 72 61 6d 65 77 6f 72 6b 4c 69 73 74  ef FrameworkList
196e0 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 0d 0a   frameworkList..
196f0 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
19700 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
19710 20 20 20 20 20 20 69 66 20 28 66 72 61 6d 65 77        if (framew
19720 6f 72 6b 4c 69 73 74 20 3d 3d 20 6e 75 6c 6c 29  orkList == null)
19730 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
19740 20 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 20    frameworkList 
19750 3d 20 6e 65 77 20 46 72 61 6d 65 77 6f 72 6b 4c  = new FrameworkL
19760 69 73 74 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ist();....      
19770 20 20 20 20 20 20 69 66 20 28 66 72 61 6d 65 77        if (framew
19780 6f 72 6b 4c 69 73 74 2e 52 6f 6f 74 4b 65 79 20  orkList.RootKey 
19790 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
197a0 20 20 20 20 20 20 20 20 20 20 66 72 61 6d 65 77            framew
197b0 6f 72 6b 4c 69 73 74 2e 52 6f 6f 74 4b 65 79 20  orkList.RootKey 
197c0 3d 20 52 65 67 69 73 74 72 79 2e 4c 6f 63 61 6c  = Registry.Local
197d0 4d 61 63 68 69 6e 65 3b 0d 0a 0d 0a 20 20 20 20  Machine;....    
197e0 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
197f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19800 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19810 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19820 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
19830 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 66             if (f
19840 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e 61 6d  rameworkList.Nam
19850 65 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  es == null)..   
19860 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
19870 20 20 20 20 20 20 20 20 20 20 20 20 66 72 61 6d              fram
19880 65 77 6f 72 6b 4c 69 73 74 2e 4e 61 6d 65 73 20  eworkList.Names 
19890 3d 20 6e 65 77 20 53 74 72 69 6e 67 4c 69 73 74  = new StringList
198a0 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ();....         
198b0 20 20 20 20 20 20 20 69 66 20 28 28 63 6f 6e 66         if ((conf
198c0 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c  iguration == nul
198d0 6c 29 20 7c 7c 20 21 63 6f 6e 66 69 67 75 72 61  l) || !configura
198e0 74 69 6f 6e 2e 4e 6f 44 65 73 6b 74 6f 70 29 0d  tion.NoDesktop).
198f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
19900 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4c 69       frameworkLi
19910 73 74 2e 4e 61 6d 65 73 2e 41 64 64 28 22 2e 4e  st.Names.Add(".N
19920 45 54 46 72 61 6d 65 77 6f 72 6b 22 29 3b 0d 0a  ETFramework");..
19930 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
19940 20 20 69 66 20 28 28 63 6f 6e 66 69 67 75 72 61    if ((configura
19950 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c  tion == null) ||
19960 20 21 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e   !configuration.
19970 4e 6f 43 6f 6d 70 61 63 74 29 0d 0a 20 20 20 20  NoCompact)..    
19980 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
19990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
199a0 20 20 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74     frameworkList
199b0 2e 4e 61 6d 65 73 2e 41 64 64 28 22 2e 4e 45 54  .Names.Add(".NET
199c0 43 6f 6d 70 61 63 74 46 72 61 6d 65 77 6f 72 6b  CompactFramework
199d0 22 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ");..           
199e0 20 20 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f           framewo
199f0 72 6b 4c 69 73 74 2e 4e 61 6d 65 73 2e 41 64 64  rkList.Names.Add
19a00 28 22 2e 4e 45 54 43 6f 6d 70 61 63 74 46 72 61  (".NETCompactFra
19a10 6d 65 77 6f 72 6b 22 29 3b 0d 0a 20 20 20 20 20  mework");..     
19a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66                 f
19a30 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e 61 6d  rameworkList.Nam
19a40 65 73 2e 41 64 64 28 22 2e 4e 45 54 43 6f 6d 70  es.Add(".NETComp
19a50 61 63 74 46 72 61 6d 65 77 6f 72 6b 22 29 3b 0d  actFramework");.
19a60 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
19a70 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
19a80 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
19a90 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
19aa0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19ab0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19ac0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19ad0 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
19ae0 20 20 20 20 69 66 20 28 66 72 61 6d 65 77 6f 72      if (framewor
19af0 6b 4c 69 73 74 2e 56 65 72 73 69 6f 6e 73 20 3d  kList.Versions =
19b00 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
19b10 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
19b20 20 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72          framewor
19b30 6b 4c 69 73 74 2e 56 65 72 73 69 6f 6e 73 20 3d  kList.Versions =
19b40 20 6e 65 77 20 56 65 72 73 69 6f 6e 4d 61 70 28   new VersionMap(
19b50 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
19b60 20 20 20 20 20 20 69 66 20 28 28 63 6f 6e 66 69        if ((confi
19b70 67 75 72 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c  guration == null
19b80 29 20 7c 7c 20 21 63 6f 6e 66 69 67 75 72 61 74  ) || !configurat
19b90 69 6f 6e 2e 4e 6f 44 65 73 6b 74 6f 70 29 0d 0a  ion.NoDesktop)..
19ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19bb0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
19bc0 20 20 20 20 20 20 20 56 65 72 73 69 6f 6e 4c 69         VersionLi
19bd0 73 74 20 64 65 73 6b 74 6f 70 56 65 72 73 69 6f  st desktopVersio
19be0 6e 4c 69 73 74 20 3d 20 6e 65 77 20 56 65 72 73  nList = new Vers
19bf0 69 6f 6e 4c 69 73 74 28 29 3b 0d 0a 0d 0a 20 20  ionList();....  
19c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19c10 20 20 69 66 20 28 28 63 6f 6e 66 69 67 75 72 61    if ((configura
19c20 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c  tion == null) ||
19c30 20 21 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e   !configuration.
19c40 4e 6f 4e 65 74 46 78 32 30 29 0d 0a 20 20 20 20  NoNetFx20)..    
19c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19c60 20 20 20 20 64 65 73 6b 74 6f 70 56 65 72 73 69      desktopVersi
19c70 6f 6e 4c 69 73 74 2e 41 64 64 28 6e 65 77 20 56  onList.Add(new V
19c80 65 72 73 69 6f 6e 28 32 2c 20 30 2c 20 35 30 37  ersion(2, 0, 507
19c90 32 37 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  27));....       
19ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
19cb0 28 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20  ((configuration 
19cc0 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 21 63 6f 6e  == null) || !con
19cd0 66 69 67 75 72 61 74 69 6f 6e 2e 4e 6f 4e 65 74  figuration.NoNet
19ce0 46 78 34 30 29 0d 0a 20 20 20 20 20 20 20 20 20  Fx40)..         
19cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
19d00 65 73 6b 74 6f 70 56 65 72 73 69 6f 6e 4c 69 73  esktopVersionLis
19d10 74 2e 41 64 64 28 6e 65 77 20 56 65 72 73 69 6f  t.Add(new Versio
19d20 6e 28 34 2c 20 30 2c 20 33 30 33 31 39 29 29 3b  n(4, 0, 30319));
19d30 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
19d40 20 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72          framewor
19d50 6b 4c 69 73 74 2e 56 65 72 73 69 6f 6e 73 2e 41  kList.Versions.A
19d60 64 64 28 22 2e 4e 45 54 46 72 61 6d 65 77 6f 72  dd(".NETFramewor
19d70 6b 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  k",..           
19d80 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65 73               des
19d90 6b 74 6f 70 56 65 72 73 69 6f 6e 4c 69 73 74 29  ktopVersionList)
19da0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
19db0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
19dc0 20 20 20 20 20 20 20 20 69 66 20 28 28 63 6f 6e          if ((con
19dd0 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20 6e 75  figuration == nu
19de0 6c 6c 29 20 7c 7c 20 21 63 6f 6e 66 69 67 75 72  ll) || !configur
19df0 61 74 69 6f 6e 2e 4e 6f 43 6f 6d 70 61 63 74 29  ation.NoCompact)
19e00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
19e10 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
19e20 20 20 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f           framewo
19e30 72 6b 4c 69 73 74 2e 56 65 72 73 69 6f 6e 73 2e  rkList.Versions.
19e40 41 64 64 28 22 2e 4e 45 54 43 6f 6d 70 61 63 74  Add(".NETCompact
19e50 46 72 61 6d 65 77 6f 72 6b 22 2c 0d 0a 20 20 20  Framework",..   
19e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19e70 20 20 20 20 20 6e 65 77 20 56 65 72 73 69 6f 6e       new Version
19e80 4c 69 73 74 28 6e 65 77 20 56 65 72 73 69 6f 6e  List(new Version
19e90 5b 5d 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  [] {..          
19ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 65                ne
19eb0 77 20 56 65 72 73 69 6f 6e 28 32 2c 20 30 2c 20  w Version(2, 0, 
19ec0 30 2c 20 30 29 2c 20 6e 65 77 20 56 65 72 73 69  0, 0), new Versi
19ed0 6f 6e 28 33 2c 20 35 2c 20 30 2c 20 30 29 0d 0a  on(3, 5, 0, 0)..
19ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19ef0 20 20 20 20 7d 29 29 3b 0d 0a 20 20 20 20 20 20      }));..      
19f00 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
19f10 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
19f20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
19f30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19f40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19f50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19f60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
19f70 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
19f80 28 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 50  (frameworkList.P
19f90 6c 61 74 66 6f 72 6d 4e 61 6d 65 73 20 3d 3d 20  latformNames == 
19fa0 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
19fb0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
19fc0 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4c        frameworkL
19fd0 69 73 74 2e 50 6c 61 74 66 6f 72 6d 4e 61 6d 65  ist.PlatformName
19fe0 73 20 3d 20 6e 65 77 20 53 74 72 69 6e 67 4c 69  s = new StringLi
19ff0 73 74 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  st();....       
1a000 20 20 20 20 20 20 20 20 20 69 66 20 28 28 63 6f           if ((co
1a010 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20 6e  nfiguration == n
1a020 75 6c 6c 29 20 7c 7c 20 21 63 6f 6e 66 69 67 75  ull) || !configu
1a030 72 61 74 69 6f 6e 2e 4e 6f 44 65 73 6b 74 6f 70  ration.NoDesktop
1a040 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
1a050 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b         framework
1a060 4c 69 73 74 2e 50 6c 61 74 66 6f 72 6d 4e 61 6d  List.PlatformNam
1a070 65 73 2e 41 64 64 28 6e 75 6c 6c 29 3b 0d 0a 0d  es.Add(null);...
1a080 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1a090 20 69 66 20 28 28 63 6f 6e 66 69 67 75 72 61 74   if ((configurat
1a0a0 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20  ion == null) || 
1a0b0 21 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 4e  !configuration.N
1a0c0 6f 43 6f 6d 70 61 63 74 29 0d 0a 20 20 20 20 20  oCompact)..     
1a0d0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
1a0e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a0f0 20 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e    frameworkList.
1a100 50 6c 61 74 66 6f 72 6d 4e 61 6d 65 73 2e 41 64  PlatformNames.Ad
1a110 64 28 22 50 6f 63 6b 65 74 50 43 22 29 3b 0d 0a  d("PocketPC");..
1a120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a130 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73      frameworkLis
1a140 74 2e 50 6c 61 74 66 6f 72 6d 4e 61 6d 65 73 2e  t.PlatformNames.
1a150 41 64 64 28 22 53 6d 61 72 74 70 68 6f 6e 65 22  Add("Smartphone"
1a160 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
1a170 20 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72          framewor
1a180 6b 4c 69 73 74 2e 50 6c 61 74 66 6f 72 6d 4e 61  kList.PlatformNa
1a190 6d 65 73 2e 41 64 64 28 22 57 69 6e 64 6f 77 73  mes.Add("Windows
1a1a0 43 45 22 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  CE");..         
1a1b0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
1a1c0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
1a1d0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f   }....        //
1a1e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a1f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a200 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a210 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a220 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
1a230 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
1a240 62 6f 6f 6c 20 48 61 76 65 46 72 61 6d 65 77 6f  bool HaveFramewo
1a250 72 6b 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  rk(..           
1a260 20 52 65 67 69 73 74 72 79 4b 65 79 20 72 6f 6f   RegistryKey roo
1a270 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20  tKey,..         
1a280 20 20 20 73 74 72 69 6e 67 20 66 72 61 6d 65 77     string framew
1a290 6f 72 6b 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20  orkName,..      
1a2a0 20 20 20 20 20 20 56 65 72 73 69 6f 6e 20 66 72        Version fr
1a2b0 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 0d  ameworkVersion,.
1a2c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72  .            str
1a2d0 69 6e 67 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65  ing platformName
1a2e0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
1a2f0 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20  ool whatIf,..   
1a300 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65           bool ve
1a310 72 62 6f 73 65 0d 0a 20 20 20 20 20 20 20 20 20  rbose..         
1a320 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d     )..        {.
1a330 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72  .            str
1a340 69 6e 67 20 66 6f 72 6d 61 74 20 3d 20 21 53 74  ing format = !St
1a350 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70  ring.IsNullOrEmp
1a360 74 79 28 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 29  ty(platformName)
1a370 20 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   ?..            
1a380 20 20 20 20 22 53 6f 66 74 77 61 72 65 5c 5c 4d      "Software\\M
1a390 69 63 72 6f 73 6f 66 74 5c 5c 7b 30 7d 5c 5c 76  icrosoft\\{0}\\v
1a3a0 7b 31 7d 5c 5c 7b 32 7d 22 20 3a 0d 0a 20 20 20  {1}\\{2}" :..   
1a3b0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 53 6f               "So
1a3c0 66 74 77 61 72 65 5c 5c 4d 69 63 72 6f 73 6f 66  ftware\\Microsof
1a3d0 74 5c 5c 7b 30 7d 5c 5c 76 7b 31 7d 22 3b 0d 0a  t\\{0}\\v{1}";..
1a3e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
1a3f0 72 69 6e 67 20 6b 65 79 4e 61 6d 65 20 3d 20 53  ring keyName = S
1a400 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
1a410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66                 f
1a420 6f 72 6d 61 74 2c 20 66 72 61 6d 65 77 6f 72 6b  ormat, framework
1a430 4e 61 6d 65 2c 20 66 72 61 6d 65 77 6f 72 6b 56  Name, frameworkV
1a440 65 72 73 69 6f 6e 2c 20 70 6c 61 74 66 6f 72 6d  ersion, platform
1a450 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  Name);....      
1a460 20 20 20 20 20 20 75 73 69 6e 67 20 28 4d 6f 63        using (Moc
1a470 6b 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65 79  kRegistryKey key
1a480 20 3d 20 52 65 67 69 73 74 72 79 48 65 6c 70 65   = RegistryHelpe
1a490 72 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20  r.OpenSubKey(.. 
1a4a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a4b0 20 20 20 72 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e     rootKey, keyN
1a4c0 61 6d 65 2c 20 66 61 6c 73 65 2c 20 77 68 61 74  ame, false, what
1a4d0 49 66 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a 20  If, verbose)).. 
1a4e0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
1a4f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
1a500 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a   (key == null)..
1a510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a520 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
1a530 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
1a540 20 20 20 20 20 69 66 20 28 70 6c 61 74 66 6f 72       if (platfor
1a550 6d 4e 61 6d 65 20 21 3d 20 6e 75 6c 6c 29 20 2f  mName != null) /
1a560 2f 20 4e 4f 54 45 3a 20 53 6b 69 70 20 6e 6f 6e  / NOTE: Skip non
1a570 2d 64 65 73 6b 74 6f 70 2e 0d 0a 20 20 20 20 20  -desktop...     
1a580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
1a590 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 0d 0a 20  eturn true;.... 
1a5a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
1a5b0 74 72 69 6e 67 20 64 69 72 65 63 74 6f 72 79 20  tring directory 
1a5c0 3d 20 47 65 74 46 72 61 6d 65 77 6f 72 6b 44 69  = GetFrameworkDi
1a5d0 72 65 63 74 6f 72 79 28 0d 0a 20 20 20 20 20 20  rectory(..      
1a5e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f                ro
1a5f0 6f 74 4b 65 79 2c 20 66 72 61 6d 65 77 6f 72 6b  otKey, framework
1a600 56 65 72 73 69 6f 6e 2c 20 77 68 61 74 49 66 2c  Version, whatIf,
1a610 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20   verbose);....  
1a620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
1a630 20 28 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f   (String.IsNullO
1a640 72 45 6d 70 74 79 28 64 69 72 65 63 74 6f 72 79  rEmpty(directory
1a650 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
1a660 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
1a670 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  alse;....       
1a680 20 20 20 20 20 20 20 20 20 69 66 20 28 21 44 69           if (!Di
1a690 72 65 63 74 6f 72 79 2e 45 78 69 73 74 73 28 64  rectory.Exists(d
1a6a0 69 72 65 63 74 6f 72 79 29 29 0d 0a 20 20 20 20  irectory))..    
1a6b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a6c0 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d  return false;...
1a6d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1a6e0 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20   return true;.. 
1a6f0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
1a700 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
1a710 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
1a720 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a730 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a740 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a750 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
1a760 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
1a770 61 74 69 63 20 62 6f 6f 6c 20 46 6f 72 45 61 63  atic bool ForEac
1a780 68 46 72 61 6d 65 77 6f 72 6b 43 6f 6e 66 69 67  hFrameworkConfig
1a790 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 46  (..            F
1a7a0 72 61 6d 65 77 6f 72 6b 4c 69 73 74 20 66 72 61  rameworkList fra
1a7b0 6d 65 77 6f 72 6b 4c 69 73 74 2c 0d 0a 20 20 20  meworkList,..   
1a7c0 20 20 20 20 20 20 20 20 20 46 72 61 6d 65 77 6f           Framewo
1a7d0 72 6b 43 6f 6e 66 69 67 43 61 6c 6c 62 61 63 6b  rkConfigCallback
1a7e0 20 63 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20   callback,..    
1a7f0 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 69          string i
1a800 6e 76 61 72 69 61 6e 74 2c 0d 0a 20 20 20 20 20  nvariant,..     
1a810 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6e 61         string na
1a820 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me,..           
1a830 20 73 74 72 69 6e 67 20 64 65 73 63 72 69 70 74   string descript
1a840 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ion,..          
1a850 20 20 73 74 72 69 6e 67 20 74 79 70 65 4e 61 6d    string typeNam
1a860 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
1a870 41 73 73 65 6d 62 6c 79 4e 61 6d 65 20 61 73 73  AssemblyName ass
1a880 65 6d 62 6c 79 4e 61 6d 65 2c 0d 0a 20 20 20 20  emblyName,..    
1a890 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 63          object c
1a8a0 6c 69 65 6e 74 44 61 74 61 2c 0d 0a 20 20 20 20  lientData,..    
1a8b0 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61          bool wha
1a8c0 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf,..          
1a8d0 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d    bool verbose,.
1a8e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66  .            ref
1a8f0 20 62 6f 6f 6c 20 73 61 76 65 64 2c 0d 0a 20 20   bool saved,..  
1a900 20 20 20 20 20 20 20 20 20 20 72 65 66 20 73 74            ref st
1a910 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20 20  ring error..    
1a920 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
1a930 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
1a940 20 20 69 66 20 28 66 72 61 6d 65 77 6f 72 6b 4c    if (frameworkL
1a950 69 73 74 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ist == null)..  
1a960 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1a970 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
1a980 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 66 72  or = "invalid fr
1a990 61 6d 65 77 6f 72 6b 20 6c 69 73 74 22 3b 0d 0a  amework list";..
1a9a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a9b0 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20  return false;.. 
1a9c0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
1a9d0 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69              Regi
1a9e0 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 20  stryKey rootKey 
1a9f0 3d 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e  = frameworkList.
1aa00 52 6f 6f 74 4b 65 79 3b 0d 0a 0d 0a 20 20 20 20  RootKey;....    
1aa10 20 20 20 20 20 20 20 20 69 66 20 28 72 6f 6f 74          if (root
1aa20 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  Key == null)..  
1aa30 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1aa40 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
1aa50 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 72 6f  or = "invalid ro
1aa60 6f 74 20 6b 65 79 22 3b 0d 0a 20 20 20 20 20 20  ot key";..      
1aa70 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
1aa80 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
1aa90 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
1aaa0 20 20 20 20 20 20 69 66 20 28 21 4f 62 6a 65 63        if (!Objec
1aab0 74 2e 52 65 66 65 72 65 6e 63 65 45 71 75 61 6c  t.ReferenceEqual
1aac0 73 28 72 6f 6f 74 4b 65 79 2c 20 52 65 67 69 73  s(rootKey, Regis
1aad0 74 72 79 2e 43 75 72 72 65 6e 74 55 73 65 72 29  try.CurrentUser)
1aae0 20 26 26 0d 0a 20 20 20 20 20 20 20 20 20 20 20   &&..           
1aaf0 20 20 20 20 20 21 4f 62 6a 65 63 74 2e 52 65 66       !Object.Ref
1ab00 65 72 65 6e 63 65 45 71 75 61 6c 73 28 72 6f 6f  erenceEquals(roo
1ab10 74 4b 65 79 2c 20 52 65 67 69 73 74 72 79 2e 4c  tKey, Registry.L
1ab20 6f 63 61 6c 4d 61 63 68 69 6e 65 29 29 0d 0a 20  ocalMachine)).. 
1ab30 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
1ab40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
1ab50 72 6f 72 20 3d 20 22 72 6f 6f 74 20 6b 65 79 20  ror = "root key 
1ab60 6d 75 73 74 20 62 65 20 70 65 72 2d 75 73 65 72  must be per-user
1ab70 20 6f 72 20 70 65 72 2d 6d 61 63 68 69 6e 65 22   or per-machine"
1ab80 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
1ab90 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
1aba0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
1abb0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
1abc0 66 20 28 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74  f (frameworkList
1abd0 2e 4e 61 6d 65 73 20 3d 3d 20 6e 75 6c 6c 29 0d  .Names == null).
1abe0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
1abf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ac00 65 72 72 6f 72 20 3d 20 22 6e 6f 20 66 72 61 6d  error = "no fram
1ac10 65 77 6f 72 6b 20 6e 61 6d 65 73 20 66 6f 75 6e  ework names foun
1ac20 64 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  d";..           
1ac30 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
1ac40 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
1ac50 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
1ac60 20 69 66 20 28 66 72 61 6d 65 77 6f 72 6b 4c 69   if (frameworkLi
1ac70 73 74 2e 56 65 72 73 69 6f 6e 73 20 3d 3d 20 6e  st.Versions == n
1ac80 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
1ac90 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
1aca0 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 6e 6f       error = "no
1acb0 20 66 72 61 6d 65 77 6f 72 6b 20 76 65 72 73 69   framework versi
1acc0 6f 6e 73 20 66 6f 75 6e 64 22 3b 0d 0a 20 20 20  ons found";..   
1acd0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
1ace0 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  urn false;..    
1acf0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
1ad00 20 20 20 20 20 20 20 20 20 69 66 20 28 66 72 61           if (fra
1ad10 6d 65 77 6f 72 6b 4c 69 73 74 2e 50 6c 61 74 66  meworkList.Platf
1ad20 6f 72 6d 4e 61 6d 65 73 20 3d 3d 20 6e 75 6c 6c  ormNames == null
1ad30 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
1ad40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1ad50 20 20 65 72 72 6f 72 20 3d 20 22 6e 6f 20 70 6c    error = "no pl
1ad60 61 74 66 6f 72 6d 20 6e 61 6d 65 73 20 66 6f 75  atform names fou
1ad70 6e 64 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  nd";..          
1ad80 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
1ad90 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se;..           
1ada0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
1adb0 20 20 69 66 20 28 66 72 61 6d 65 77 6f 72 6b 4c    if (frameworkL
1adc0 69 73 74 2e 4e 61 6d 65 73 2e 43 6f 75 6e 74 20  ist.Names.Count 
1add0 21 3d 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74  != frameworkList
1ade0 2e 50 6c 61 74 66 6f 72 6d 4e 61 6d 65 73 2e 43  .PlatformNames.C
1adf0 6f 75 6e 74 29 0d 0a 20 20 20 20 20 20 20 20 20  ount)..         
1ae00 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
1ae10 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 53 74        error = St
1ae20 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22 66 72 61  ring.Format("fra
1ae30 6d 65 77 6f 72 6b 20 6e 61 6d 65 20 63 6f 75 6e  mework name coun
1ae40 74 20 7b 30 7d 20 64 6f 65 73 20 6e 6f 74 20 22  t {0} does not "
1ae50 20 2b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   +..            
1ae60 20 20 20 20 20 20 20 20 22 6d 61 74 63 68 20 70          "match p
1ae70 6c 61 74 66 6f 72 6d 20 6e 61 6d 65 20 63 6f 75  latform name cou
1ae80 6e 74 20 7b 31 7d 22 2c 20 66 72 61 6d 65 77 6f  nt {1}", framewo
1ae90 72 6b 4c 69 73 74 2e 4e 61 6d 65 73 2e 43 6f 75  rkList.Names.Cou
1aea0 6e 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  nt,..           
1aeb0 20 20 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f           framewo
1aec0 72 6b 4c 69 73 74 2e 50 6c 61 74 66 6f 72 6d 4e  rkList.PlatformN
1aed0 61 6d 65 73 2e 43 6f 75 6e 74 29 3b 0d 0a 0d 0a  ames.Count);....
1aee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aef0 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20  return false;.. 
1af00 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
1af10 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 20              for 
1af20 28 69 6e 74 20 69 6e 64 65 78 20 3d 20 30 3b 20  (int index = 0; 
1af30 69 6e 64 65 78 20 3c 20 66 72 61 6d 65 77 6f 72  index < framewor
1af40 6b 4c 69 73 74 2e 4e 61 6d 65 73 2e 43 6f 75 6e  kList.Names.Coun
1af50 74 3b 20 69 6e 64 65 78 2b 2b 29 0d 0a 20 20 20  t; index++)..   
1af60 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
1af70 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
1af80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1af90 2f 2f 20 4e 4f 54 45 3a 20 47 72 61 62 20 74 68  // NOTE: Grab th
1afa0 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 66 72  e name of the fr
1afb0 61 6d 65 77 6f 72 6b 20 28 65 2e 67 2e 20 22 2e  amework (e.g. ".
1afc0 4e 45 54 46 72 61 6d 65 77 6f 72 6b 22 29 0d 0a  NETFramework")..
1afd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1afe0 2f 2f 20 20 20 20 20 20 20 61 6e 64 20 74 68 65  //       and the
1aff0 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 70 6c 61   name of the pla
1b000 74 66 6f 72 6d 20 28 65 2e 67 2e 20 22 57 69 6e  tform (e.g. "Win
1b010 64 6f 77 73 43 45 22 29 2e 0d 0a 20 20 20 20 20  dowsCE")...     
1b020 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
1b030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
1b040 74 72 69 6e 67 20 66 72 61 6d 65 77 6f 72 6b 4e  tring frameworkN
1b050 61 6d 65 20 3d 20 66 72 61 6d 65 77 6f 72 6b 4c  ame = frameworkL
1b060 69 73 74 2e 4e 61 6d 65 73 5b 69 6e 64 65 78 5d  ist.Names[index]
1b070 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
1b080 20 20 20 73 74 72 69 6e 67 20 70 6c 61 74 66 6f     string platfo
1b090 72 6d 4e 61 6d 65 20 3d 20 66 72 61 6d 65 77 6f  rmName = framewo
1b0a0 72 6b 4c 69 73 74 2e 50 6c 61 74 66 6f 72 6d 4e  rkList.PlatformN
1b0b0 61 6d 65 73 5b 69 6e 64 65 78 5d 3b 0d 0a 0d 0a  ames[index];....
1b0c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b0d0 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
1b0e0 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 53 6b 69      // NOTE: Ski
1b0f0 70 20 61 6c 6c 20 6e 6f 6e 2d 64 65 73 6b 74 6f  p all non-deskto
1b100 70 20 66 72 61 6d 65 77 6f 72 6b 73 20 28 69 2e  p frameworks (i.
1b110 65 2e 20 69 66 20 74 68 65 20 70 6c 61 74 66 6f  e. if the platfo
1b120 72 6d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  rm..            
1b130 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6e 61 6d      //       nam
1b140 65 20 69 73 20 6e 6f 74 20 6e 75 6c 6c 29 2e 0d  e is not null)..
1b150 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1b160 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
1b170 20 20 20 20 20 69 66 20 28 70 6c 61 74 66 6f 72       if (platfor
1b180 6d 4e 61 6d 65 20 21 3d 20 6e 75 6c 6c 29 0d 0a  mName != null)..
1b190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b1a0 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 0d      continue;...
1b1b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1b1c0 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
1b1d0 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 47 72       // NOTE: Gr
1b1e0 61 62 20 74 68 65 20 73 75 70 70 6f 72 74 65 64  ab the supported
1b1f0 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 74 68 69   versions of thi
1b200 73 20 70 61 72 74 69 63 75 6c 61 72 0d 0a 20 20  s particular..  
1b210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
1b220 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b         framework
1b230 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1b240 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
1b250 20 20 20 20 20 20 20 56 65 72 73 69 6f 6e 4c 69         VersionLi
1b260 73 74 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73  st frameworkVers
1b270 69 6f 6e 4c 69 73 74 3b 0d 0a 0d 0a 20 20 20 20  ionList;....    
1b280 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
1b290 21 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 56  !frameworkList.V
1b2a0 65 72 73 69 6f 6e 73 2e 54 72 79 47 65 74 56 61  ersions.TryGetVa
1b2b0 6c 75 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  lue(..          
1b2c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 72                fr
1b2d0 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 20 6f 75 74  ameworkName, out
1b2e0 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f   frameworkVersio
1b2f0 6e 4c 69 73 74 29 20 7c 7c 0d 0a 20 20 20 20 20  nList) ||..     
1b300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28                 (
1b310 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e  frameworkVersion
1b320 4c 69 73 74 20 3d 3d 20 6e 75 6c 6c 29 29 0d 0a  List == null))..
1b330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b340 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
1b350 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b         continue;
1b360 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1b370 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
1b380 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 28         foreach (
1b390 56 65 72 73 69 6f 6e 20 66 72 61 6d 65 77 6f 72  Version framewor
1b3a0 6b 56 65 72 73 69 6f 6e 20 69 6e 20 66 72 61 6d  kVersion in fram
1b3b0 65 77 6f 72 6b 56 65 72 73 69 6f 6e 4c 69 73 74  eworkVersionList
1b3c0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
1b3d0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
1b3e0 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f            TraceO
1b3f0 70 73 2e 54 72 61 63 65 28 0d 0a 20 20 20 20 20  ps.Trace(..     
1b400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b410 20 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79     TracePriority
1b420 2e 4c 6f 77 65 72 2c 20 74 72 61 63 65 43 61 6c  .Lower, traceCal
1b430 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f  lback, String.Fo
1b440 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
1b450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
1b460 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 20 3d 20  frameworkName = 
1b470 7b 30 7d 2c 20 66 72 61 6d 65 77 6f 72 6b 56 65  {0}, frameworkVe
1b480 72 73 69 6f 6e 20 3d 20 7b 31 7d 2c 20 22 20 2b  rsion = {1}, " +
1b490 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1b4a0 20 20 20 20 20 20 20 20 20 20 22 70 6c 61 74 66            "platf
1b4b0 6f 72 6d 4e 61 6d 65 20 3d 20 7b 32 7d 22 2c 20  ormName = {2}", 
1b4c0 46 6f 72 44 69 73 70 6c 61 79 28 66 72 61 6d 65  ForDisplay(frame
1b4d0 77 6f 72 6b 4e 61 6d 65 29 2c 0d 0a 20 20 20 20  workName),..    
1b4e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b4f0 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 66      ForDisplay(f
1b500 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 29  rameworkVersion)
1b510 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
1b520 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69             ForDi
1b530 73 70 6c 61 79 28 70 6c 61 74 66 6f 72 6d 4e 61  splay(platformNa
1b540 6d 65 29 29 2c 20 74 72 61 63 65 43 61 74 65 67  me)), traceCateg
1b550 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
1b560 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
1b570 28 21 48 61 76 65 46 72 61 6d 65 77 6f 72 6b 28  (!HaveFramework(
1b580 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1b590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f                ro
1b5a0 6f 74 4b 65 79 2c 20 66 72 61 6d 65 77 6f 72 6b  otKey, framework
1b5b0 4e 61 6d 65 2c 20 66 72 61 6d 65 77 6f 72 6b 56  Name, frameworkV
1b5c0 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20  ersion,..       
1b5d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b5e0 20 20 20 20 20 70 6c 61 74 66 6f 72 6d 4e 61 6d       platformNam
1b5f0 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f  e, whatIf, verbo
1b600 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  se))..          
1b610 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1b620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b630 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 54 72       TraceOps.Tr
1b640 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ace(..          
1b650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b660 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e    TracePriority.
1b670 4c 6f 77 2c 20 74 72 61 63 65 43 61 6c 6c 62 61  Low, traceCallba
1b680 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ck,..           
1b690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b6a0 20 22 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b   ".NET Framework
1b6b0 20 6e 6f 74 20 66 6f 75 6e 64 2c 20 73 6b 69 70   not found, skip
1b6c0 70 69 6e 67 2e 2e 2e 22 2c 0d 0a 20 20 20 20 20  ping...",..     
1b6d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b6e0 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
1b6f0 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
1b700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b710 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20    continue;..   
1b720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b730 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
1b740 20 20 20 20 20 20 20 20 20 20 69 66 20 28 63 61            if (ca
1b750 6c 6c 62 61 63 6b 20 3d 3d 20 6e 75 6c 6c 29 0d  llback == null).
1b760 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1b770 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75           continu
1b780 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
1b790 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
1b7a0 20 64 69 72 65 63 74 6f 72 79 20 3d 20 47 65 74   directory = Get
1b7b0 46 72 61 6d 65 77 6f 72 6b 44 69 72 65 63 74 6f  FrameworkDirecto
1b7c0 72 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ry(..           
1b7d0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f               roo
1b7e0 74 4b 65 79 2c 20 66 72 61 6d 65 77 6f 72 6b 56  tKey, frameworkV
1b7f0 65 72 73 69 6f 6e 2c 20 77 68 61 74 49 66 2c 20  ersion, whatIf, 
1b800 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20  verbose);....   
1b810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b820 20 69 66 20 28 53 74 72 69 6e 67 2e 49 73 4e 75   if (String.IsNu
1b830 6c 6c 4f 72 45 6d 70 74 79 28 64 69 72 65 63 74  llOrEmpty(direct
1b840 6f 72 79 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ory))..         
1b850 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
1b860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b870 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 54        TraceOps.T
1b880 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20  race(..         
1b890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b8a0 20 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79     TracePriority
1b8b0 2e 4c 6f 77 2c 20 74 72 61 63 65 43 61 6c 6c 62  .Low, traceCallb
1b8c0 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d  ack, String.Form
1b8d0 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
1b8e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b8f0 20 22 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b   ".NET Framework
1b900 20 7b 30 7d 20 64 69 72 65 63 74 6f 72 79 20 69   {0} directory i
1b910 73 20 69 6e 76 61 6c 69 64 2c 20 22 20 2b 0d 0a  s invalid, " +..
1b920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b930 20 20 20 20 20 20 20 20 20 20 20 20 22 73 6b 69              "ski
1b940 70 70 69 6e 67 2e 2e 2e 22 2c 20 46 6f 72 44 69  pping...", ForDi
1b950 73 70 6c 61 79 28 66 72 61 6d 65 77 6f 72 6b 56  splay(frameworkV
1b960 65 72 73 69 6f 6e 29 29 2c 0d 0a 20 20 20 20 20  ersion)),..     
1b970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b980 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
1b990 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
1b9a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b9b0 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20    continue;..   
1b9c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b9d0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
1b9e0 20 20 20 20 20 20 20 20 20 20 64 69 72 65 63 74            direct
1b9f0 6f 72 79 20 3d 20 50 61 74 68 2e 43 6f 6d 62 69  ory = Path.Combi
1ba00 6e 65 28 64 69 72 65 63 74 6f 72 79 2c 20 22 43  ne(directory, "C
1ba10 6f 6e 66 69 67 22 29 3b 0d 0a 0d 0a 20 20 20 20  onfig");....    
1ba20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ba30 69 66 20 28 21 44 69 72 65 63 74 6f 72 79 2e 45  if (!Directory.E
1ba40 78 69 73 74 73 28 64 69 72 65 63 74 6f 72 79 29  xists(directory)
1ba50 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
1ba60 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
1ba70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ba80 20 20 54 72 61 63 65 4f 70 73 2e 54 72 61 63 65    TraceOps.Trace
1ba90 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
1baa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
1bab0 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77  racePriority.Low
1bac0 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c  , traceCallback,
1bad0 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
1bae0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1baf0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2e 4e               ".N
1bb00 45 54 20 46 72 61 6d 65 77 6f 72 6b 20 7b 30 7d  ET Framework {0}
1bb10 20 64 69 72 65 63 74 6f 72 79 20 7b 31 7d 20 64   directory {1} d
1bb20 6f 65 73 20 6e 6f 74 20 65 78 69 73 74 2c 20 22  oes not exist, "
1bb30 20 2b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   +..            
1bb40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bb50 22 73 6b 69 70 70 69 6e 67 2e 2e 2e 22 2c 20 46  "skipping...", F
1bb60 6f 72 44 69 73 70 6c 61 79 28 66 72 61 6d 65 77  orDisplay(framew
1bb70 6f 72 6b 56 65 72 73 69 6f 6e 29 2c 0d 0a 20 20  orkVersion),..  
1bb80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bb90 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73            ForDis
1bba0 70 6c 61 79 28 64 69 72 65 63 74 6f 72 79 29 29  play(directory))
1bbb0 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29  , traceCategory)
1bbc0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
1bbd0 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
1bbe0 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20  tinue;..        
1bbf0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
1bc00 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1bc10 20 20 20 20 20 73 74 72 69 6e 67 20 66 69 6c 65       string file
1bc20 4e 61 6d 65 20 3d 20 50 61 74 68 2e 43 6f 6d 62  Name = Path.Comb
1bc30 69 6e 65 28 64 69 72 65 63 74 6f 72 79 2c 20 22  ine(directory, "
1bc40 6d 61 63 68 69 6e 65 2e 63 6f 6e 66 69 67 22 29  machine.config")
1bc50 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
1bc60 20 20 20 20 20 20 20 20 20 69 66 20 28 21 46 69           if (!Fi
1bc70 6c 65 2e 45 78 69 73 74 73 28 66 69 6c 65 4e 61  le.Exists(fileNa
1bc80 6d 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  me))..          
1bc90 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1bca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bcb0 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 54 72       TraceOps.Tr
1bcc0 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ace(..          
1bcd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bce0 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e    TracePriority.
1bcf0 4c 6f 77 2c 20 74 72 61 63 65 43 61 6c 6c 62 61  Low, traceCallba
1bd00 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ck, String.Forma
1bd10 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
1bd20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bd30 22 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b 20  ".NET Framework 
1bd40 7b 30 7d 20 66 69 6c 65 20 7b 31 7d 20 64 6f 65  {0} file {1} doe
1bd50 73 20 6e 6f 74 20 65 78 69 73 74 2c 20 22 20 2b  s not exist, " +
1bd60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1bd70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 73                "s
1bd80 6b 69 70 70 69 6e 67 2e 2e 2e 22 2c 20 46 6f 72  kipping...", For
1bd90 44 69 73 70 6c 61 79 28 66 72 61 6d 65 77 6f 72  Display(framewor
1bda0 6b 56 65 72 73 69 6f 6e 29 2c 0d 0a 20 20 20 20  kVersion),..    
1bdb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bdc0 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c          ForDispl
1bdd0 61 79 28 66 69 6c 65 4e 61 6d 65 29 29 2c 20 74  ay(fileName)), t
1bde0 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
1bdf0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1be00 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e            contin
1be10 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
1be20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
1be30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1be40 20 20 62 6f 6f 6c 20 6c 6f 63 61 6c 53 61 76 65    bool localSave
1be50 64 20 3d 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20  d = false;....  
1be60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1be70 20 20 69 66 20 28 21 63 61 6c 6c 62 61 63 6b 28    if (!callback(
1be80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1be90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 69                fi
1bea0 6c 65 4e 61 6d 65 2c 20 69 6e 76 61 72 69 61 6e  leName, invarian
1beb0 74 2c 20 6e 61 6d 65 2c 20 64 65 73 63 72 69 70  t, name, descrip
1bec0 74 69 6f 6e 2c 20 74 79 70 65 4e 61 6d 65 2c 0d  tion, typeName,.
1bed0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1bee0 20 20 20 20 20 20 20 20 20 20 20 20 20 61 73 73               ass
1bef0 65 6d 62 6c 79 4e 61 6d 65 2c 20 63 6c 69 65 6e  emblyName, clien
1bf00 74 44 61 74 61 2c 20 77 68 61 74 49 66 2c 20 76  tData, whatIf, v
1bf10 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20  erbose,..       
1bf20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bf30 20 20 20 20 20 72 65 66 20 6c 6f 63 61 6c 53 61       ref localSa
1bf40 76 65 64 2c 20 72 65 66 20 65 72 72 6f 72 29 29  ved, ref error))
1bf50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1bf60 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1bf70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bf80 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
1bf90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bfa0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
1bfb0 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d             else.
1bfc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1bfd0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1bfe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bff0 69 66 20 28 6c 6f 63 61 6c 53 61 76 65 64 20 26  if (localSaved &
1c000 26 20 21 73 61 76 65 64 29 0d 0a 20 20 20 20 20  & !saved)..     
1c010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c020 20 20 20 20 20 20 20 73 61 76 65 64 20 3d 20 74         saved = t
1c030 72 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  rue;....        
1c040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c050 69 66 20 28 76 65 72 62 6f 73 65 29 0d 0a 20 20  if (verbose)..  
1c060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c070 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f            TraceO
1c080 70 73 2e 54 72 61 63 65 28 0d 0a 20 20 20 20 20  ps.Trace(..     
1c090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c0a0 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
1c0b0 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73 74 2c  Priority.Lowest,
1c0c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1c0d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c0e0 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c    traceCallback,
1c0f0 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
1c100 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1c110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c120 20 22 6c 6f 63 61 6c 53 61 76 65 64 20 3d 20 7b   "localSaved = {
1c130 30 7d 2c 20 73 61 76 65 64 20 3d 20 7b 31 7d 22  0}, saved = {1}"
1c140 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
1c150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c160 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 6c 6f     ForDisplay(lo
1c170 63 61 6c 53 61 76 65 64 29 2c 20 46 6f 72 44 69  calSaved), ForDi
1c180 73 70 6c 61 79 28 73 61 76 65 64 29 29 2c 0d 0a  splay(saved)),..
1c190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c1a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c1b0 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
1c1c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1c1d0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
1c1e0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
1c1f0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
1c200 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74          return t
1c210 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  rue;..        }.
1c220 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
1c230 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c240 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c250 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c260 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c270 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72  //....        pr
1c280 69 76 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f  ivate static boo
1c290 6c 20 46 6f 72 45 61 63 68 46 72 61 6d 65 77 6f  l ForEachFramewo
1c2a0 72 6b 52 65 67 69 73 74 72 79 28 0d 0a 20 20 20  rkRegistry(..   
1c2b0 20 20 20 20 20 20 20 20 20 46 72 61 6d 65 77 6f           Framewo
1c2c0 72 6b 4c 69 73 74 20 66 72 61 6d 65 77 6f 72 6b  rkList framework
1c2d0 4c 69 73 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  List,..         
1c2e0 20 20 20 46 72 61 6d 65 77 6f 72 6b 52 65 67 69     FrameworkRegi
1c2f0 73 74 72 79 43 61 6c 6c 62 61 63 6b 20 63 61 6c  stryCallback cal
1c300 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20  lback,..        
1c310 20 20 20 20 6f 62 6a 65 63 74 20 63 6c 69 65 6e      object clien
1c320 74 44 61 74 61 2c 0d 0a 20 20 20 20 20 20 20 20  tData,..        
1c330 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c      bool whatIf,
1c340 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
1c350 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20  ol verbose,..   
1c360 20 20 20 20 20 20 20 20 20 72 65 66 20 73 74 72           ref str
1c370 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20 20 20  ing error..     
1c380 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
1c390 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
1c3a0 20 69 66 20 28 66 72 61 6d 65 77 6f 72 6b 4c 69   if (frameworkLi
1c3b0 73 74 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  st == null)..   
1c3c0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
1c3d0 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
1c3e0 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 66 72 61  r = "invalid fra
1c3f0 6d 65 77 6f 72 6b 20 6c 69 73 74 22 3b 0d 0a 20  mework list";.. 
1c400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
1c410 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
1c420 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
1c430 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73             Regis
1c440 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 20 3d  tryKey rootKey =
1c450 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 52   frameworkList.R
1c460 6f 6f 74 4b 65 79 3b 0d 0a 0d 0a 20 20 20 20 20  ootKey;....     
1c470 20 20 20 20 20 20 20 69 66 20 28 72 6f 6f 74 4b         if (rootK
1c480 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ey == null)..   
1c490 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
1c4a0 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
1c4b0 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 72 6f 6f  r = "invalid roo
1c4c0 74 20 6b 65 79 22 3b 0d 0a 20 20 20 20 20 20 20  t key";..       
1c4d0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
1c4e0 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
1c4f0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
1c500 20 20 20 20 20 69 66 20 28 21 4f 62 6a 65 63 74       if (!Object
1c510 2e 52 65 66 65 72 65 6e 63 65 45 71 75 61 6c 73  .ReferenceEquals
1c520 28 72 6f 6f 74 4b 65 79 2c 20 52 65 67 69 73 74  (rootKey, Regist
1c530 72 79 2e 43 75 72 72 65 6e 74 55 73 65 72 29 20  ry.CurrentUser) 
1c540 26 26 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  &&..            
1c550 20 20 20 20 21 4f 62 6a 65 63 74 2e 52 65 66 65      !Object.Refe
1c560 72 65 6e 63 65 45 71 75 61 6c 73 28 72 6f 6f 74  renceEquals(root
1c570 4b 65 79 2c 20 52 65 67 69 73 74 72 79 2e 4c 6f  Key, Registry.Lo
1c580 63 61 6c 4d 61 63 68 69 6e 65 29 29 0d 0a 20 20  calMachine))..  
1c590 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1c5a0 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
1c5b0 6f 72 20 3d 20 22 72 6f 6f 74 20 6b 65 79 20 6d  or = "root key m
1c5c0 75 73 74 20 62 65 20 70 65 72 2d 75 73 65 72 20  ust be per-user 
1c5d0 6f 72 20 70 65 72 2d 6d 61 63 68 69 6e 65 22 3b  or per-machine";
1c5e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1c5f0 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
1c600 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
1c610 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
1c620 20 28 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e   (frameworkList.
1c630 4e 61 6d 65 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  Names == null)..
1c640 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
1c650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
1c660 72 72 6f 72 20 3d 20 22 6e 6f 20 66 72 61 6d 65  rror = "no frame
1c670 77 6f 72 6b 20 6e 61 6d 65 73 20 66 6f 75 6e 64  work names found
1c680 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ";..            
1c690 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
1c6a0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
1c6b0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1c6c0 69 66 20 28 66 72 61 6d 65 77 6f 72 6b 4c 69 73  if (frameworkLis
1c6d0 74 2e 56 65 72 73 69 6f 6e 73 20 3d 3d 20 6e 75  t.Versions == nu
1c6e0 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
1c6f0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1c700 20 20 20 20 65 72 72 6f 72 20 3d 20 22 6e 6f 20      error = "no 
1c710 66 72 61 6d 65 77 6f 72 6b 20 76 65 72 73 69 6f  framework versio
1c720 6e 73 20 66 6f 75 6e 64 22 3b 0d 0a 20 20 20 20  ns found";..    
1c730 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
1c740 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
1c750 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
1c760 20 20 20 20 20 20 20 20 69 66 20 28 66 72 61 6d          if (fram
1c770 65 77 6f 72 6b 4c 69 73 74 2e 50 6c 61 74 66 6f  eworkList.Platfo
1c780 72 6d 4e 61 6d 65 73 20 3d 3d 20 6e 75 6c 6c 29  rmNames == null)
1c790 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
1c7a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1c7b0 20 65 72 72 6f 72 20 3d 20 22 6e 6f 20 70 6c 61   error = "no pla
1c7c0 74 66 6f 72 6d 20 6e 61 6d 65 73 20 66 6f 75 6e  tform names foun
1c7d0 64 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  d";..           
1c7e0 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
1c7f0 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
1c800 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
1c810 20 69 66 20 28 66 72 61 6d 65 77 6f 72 6b 4c 69   if (frameworkLi
1c820 73 74 2e 4e 61 6d 65 73 2e 43 6f 75 6e 74 20 21  st.Names.Count !
1c830 3d 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e  = frameworkList.
1c840 50 6c 61 74 66 6f 72 6d 4e 61 6d 65 73 2e 43 6f  PlatformNames.Co
1c850 75 6e 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20  unt)..          
1c860 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
1c870 20 20 20 20 20 65 72 72 6f 72 20 3d 20 53 74 72       error = Str
1c880 69 6e 67 2e 46 6f 72 6d 61 74 28 22 66 72 61 6d  ing.Format("fram
1c890 65 77 6f 72 6b 20 6e 61 6d 65 20 63 6f 75 6e 74  ework name count
1c8a0 20 7b 30 7d 20 64 6f 65 73 20 6e 6f 74 20 22 20   {0} does not " 
1c8b0 2b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  +..             
1c8c0 20 20 20 20 20 20 20 22 6d 61 74 63 68 20 70 6c         "match pl
1c8d0 61 74 66 6f 72 6d 20 6e 61 6d 65 20 63 6f 75 6e  atform name coun
1c8e0 74 20 7b 31 7d 22 2c 20 66 72 61 6d 65 77 6f 72  t {1}", framewor
1c8f0 6b 4c 69 73 74 2e 4e 61 6d 65 73 2e 43 6f 75 6e  kList.Names.Coun
1c900 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t,..            
1c910 20 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72          framewor
1c920 6b 4c 69 73 74 2e 50 6c 61 74 66 6f 72 6d 4e 61  kList.PlatformNa
1c930 6d 65 73 2e 43 6f 75 6e 74 29 3b 0d 0a 0d 0a 20  mes.Count);.... 
1c940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
1c950 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
1c960 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
1c970 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 20 28             for (
1c980 69 6e 74 20 69 6e 64 65 78 20 3d 20 30 3b 20 69  int index = 0; i
1c990 6e 64 65 78 20 3c 20 66 72 61 6d 65 77 6f 72 6b  ndex < framework
1c9a0 4c 69 73 74 2e 4e 61 6d 65 73 2e 43 6f 75 6e 74  List.Names.Count
1c9b0 3b 20 69 6e 64 65 78 2b 2b 29 0d 0a 20 20 20 20  ; index++)..    
1c9c0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
1c9d0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
1c9e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1c9f0 2f 20 4e 4f 54 45 3a 20 47 72 61 62 20 74 68 65  / NOTE: Grab the
1ca00 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 66 72 61   name of the fra
1ca10 6d 65 77 6f 72 6b 20 28 65 2e 67 2e 20 22 2e 4e  mework (e.g. ".N
1ca20 45 54 46 72 61 6d 65 77 6f 72 6b 22 29 0d 0a 20  ETFramework").. 
1ca30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1ca40 2f 20 20 20 20 20 20 20 61 6e 64 20 74 68 65 20  /       and the 
1ca50 6e 61 6d 65 20 6f 66 20 74 68 65 20 70 6c 61 74  name of the plat
1ca60 66 6f 72 6d 20 28 65 2e 67 2e 20 22 57 69 6e 64  form (e.g. "Wind
1ca70 6f 77 73 43 45 22 29 2e 0d 0a 20 20 20 20 20 20  owsCE")...      
1ca80 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
1ca90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
1caa0 72 69 6e 67 20 66 72 61 6d 65 77 6f 72 6b 4e 61  ring frameworkNa
1cab0 6d 65 20 3d 20 66 72 61 6d 65 77 6f 72 6b 4c 69  me = frameworkLi
1cac0 73 74 2e 4e 61 6d 65 73 5b 69 6e 64 65 78 5d 3b  st.Names[index];
1cad0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1cae0 20 20 73 74 72 69 6e 67 20 70 6c 61 74 66 6f 72    string platfor
1caf0 6d 4e 61 6d 65 20 3d 20 66 72 61 6d 65 77 6f 72  mName = framewor
1cb00 6b 4c 69 73 74 2e 50 6c 61 74 66 6f 72 6d 4e 61  kList.PlatformNa
1cb10 6d 65 73 5b 69 6e 64 65 78 5d 3b 0d 0a 0d 0a 20  mes[index];.... 
1cb20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1cb30 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
1cb40 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 47 72 61 62     // NOTE: Grab
1cb50 20 74 68 65 20 73 75 70 70 6f 72 74 65 64 20 76   the supported v
1cb60 65 72 73 69 6f 6e 73 20 6f 66 20 74 68 69 73 20  ersions of this 
1cb70 70 61 72 74 69 63 75 6c 61 72 0d 0a 20 20 20 20  particular..    
1cb80 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
1cb90 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 2e 0d       framework..
1cba0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1cbb0 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
1cbc0 20 20 20 20 20 56 65 72 73 69 6f 6e 4c 69 73 74       VersionList
1cbd0 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f   frameworkVersio
1cbe0 6e 4c 69 73 74 3b 0d 0a 0d 0a 20 20 20 20 20 20  nList;....      
1cbf0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21 66            if (!f
1cc00 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 56 65 72  rameworkList.Ver
1cc10 73 69 6f 6e 73 2e 54 72 79 47 65 74 56 61 6c 75  sions.TryGetValu
1cc20 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
1cc30 20 20 20 20 20 20 20 20 20 20 20 20 66 72 61 6d              fram
1cc40 65 77 6f 72 6b 4e 61 6d 65 2c 20 6f 75 74 20 66  eworkName, out f
1cc50 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 4c  rameworkVersionL
1cc60 69 73 74 29 20 7c 7c 0d 0a 20 20 20 20 20 20 20  ist) ||..       
1cc70 20 20 20 20 20 20 20 20 20 20 20 20 20 28 66 72               (fr
1cc80 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 4c 69  ameworkVersionLi
1cc90 73 74 20 3d 3d 20 6e 75 6c 6c 29 29 0d 0a 20 20  st == null))..  
1cca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
1ccb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1ccc0 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a       continue;..
1ccd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cce0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
1ccf0 20 20 20 20 20 66 6f 72 65 61 63 68 20 28 56 65       foreach (Ve
1cd00 72 73 69 6f 6e 20 66 72 61 6d 65 77 6f 72 6b 56  rsion frameworkV
1cd10 65 72 73 69 6f 6e 20 69 6e 20 66 72 61 6d 65 77  ersion in framew
1cd20 6f 72 6b 56 65 72 73 69 6f 6e 4c 69 73 74 29 0d  orkVersionList).
1cd30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1cd40 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1cd50 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73          TraceOps
1cd60 2e 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20  .Trace(..       
1cd70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cd80 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c   TracePriority.L
1cd90 6f 77 65 72 2c 20 74 72 61 63 65 43 61 6c 6c 62  ower, traceCallb
1cda0 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d  ack, String.Form
1cdb0 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
1cdc0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 66 72               "fr
1cdd0 61 6d 65 77 6f 72 6b 4e 61 6d 65 20 3d 20 7b 30  ameworkName = {0
1cde0 7d 2c 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73  }, frameworkVers
1cdf0 69 6f 6e 20 3d 20 7b 31 7d 2c 20 22 20 2b 0d 0a  ion = {1}, " +..
1ce00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ce10 20 20 20 20 20 20 20 20 22 70 6c 61 74 66 6f 72          "platfor
1ce20 6d 4e 61 6d 65 20 3d 20 7b 32 7d 22 2c 20 46 6f  mName = {2}", Fo
1ce30 72 44 69 73 70 6c 61 79 28 66 72 61 6d 65 77 6f  rDisplay(framewo
1ce40 72 6b 4e 61 6d 65 29 2c 0d 0a 20 20 20 20 20 20  rkName),..      
1ce50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ce60 20 20 46 6f 72 44 69 73 70 6c 61 79 28 66 72 61    ForDisplay(fra
1ce70 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 29 2c 0d  meworkVersion),.
1ce80 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1ce90 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70           ForDisp
1cea0 6c 61 79 28 70 6c 61 74 66 6f 72 6d 4e 61 6d 65  lay(platformName
1ceb0 29 29 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72  )), traceCategor
1cec0 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
1ced0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21             if (!
1cee0 48 61 76 65 46 72 61 6d 65 77 6f 72 6b 28 0d 0a  HaveFramework(..
1cef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cf00 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74              root
1cf10 4b 65 79 2c 20 66 72 61 6d 65 77 6f 72 6b 4e 61  Key, frameworkNa
1cf20 6d 65 2c 20 66 72 61 6d 65 77 6f 72 6b 56 65 72  me, frameworkVer
1cf30 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20  sion,..         
1cf40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cf50 20 20 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c     platformName,
1cf60 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65   whatIf, verbose
1cf70 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
1cf80 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
1cf90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cfa0 20 20 20 54 72 61 63 65 4f 70 73 2e 54 72 61 63     TraceOps.Trac
1cfb0 65 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e  e(TracePriority.
1cfc0 4c 6f 77 2c 20 74 72 61 63 65 43 61 6c 6c 62 61  Low, traceCallba
1cfd0 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ck,..           
1cfe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cff0 20 22 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b   ".NET Framework
1d000 20 6e 6f 74 20 66 6f 75 6e 64 2c 20 73 6b 69 70   not found, skip
1d010 70 69 6e 67 2e 2e 2e 22 2c 0d 0a 20 20 20 20 20  ping...",..     
1d020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d030 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
1d040 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
1d050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d060 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20    continue;..   
1d070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d080 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
1d090 20 20 20 20 20 20 20 20 20 20 69 66 20 28 63 61            if (ca
1d0a0 6c 6c 62 61 63 6b 20 3d 3d 20 6e 75 6c 6c 29 0d  llback == null).
1d0b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1d0c0 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75           continu
1d0d0 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
1d0e0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21 63            if (!c
1d0f0 61 6c 6c 62 61 63 6b 28 0d 0a 20 20 20 20 20 20  allback(..      
1d100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d110 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 66        rootKey, f
1d120 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 20 66 72  rameworkName, fr
1d130 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 0d  ameworkVersion,.
1d140 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1d150 20 20 20 20 20 20 20 20 20 20 20 20 20 70 6c 61               pla
1d160 74 66 6f 72 6d 4e 61 6d 65 2c 20 63 6c 69 65 6e  tformName, clien
1d170 74 44 61 74 61 2c 20 77 68 61 74 49 66 2c 20 76  tData, whatIf, v
1d180 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20  erbose,..       
1d190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d1a0 20 20 20 20 20 72 65 66 20 65 72 72 6f 72 29 29       ref error))
1d1b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1d1c0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1d1d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d1e0 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
1d1f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d200 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
1d210 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
1d220 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
1d230 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72         return tr
1d240 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ue;..        }..
1d250 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
1d260 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  on....        //
1d270 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d280 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d290 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d2a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d2b0 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
1d2c0 20 23 72 65 67 69 6f 6e 20 50 65 72 2d 56 69 73   #region Per-Vis
1d2d0 75 61 6c 20 53 74 75 64 69 6f 20 56 65 72 73 69  ual Studio Versi
1d2e0 6f 6e 20 48 61 6e 64 6c 69 6e 67 0d 0a 20 20 20  on Handling..   
1d2f0 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61       private sta
1d300 74 69 63 20 76 6f 69 64 20 49 6e 69 74 69 61 6c  tic void Initial
1d310 69 7a 65 56 73 4c 69 73 74 28 0d 0a 20 20 20 20  izeVsList(..    
1d320 20 20 20 20 20 20 20 20 43 6f 6e 66 69 67 75 72          Configur
1d330 61 74 69 6f 6e 20 63 6f 6e 66 69 67 75 72 61 74  ation configurat
1d340 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ion,..          
1d350 20 20 72 65 66 20 56 73 4c 69 73 74 20 76 73 4c    ref VsList vsL
1d360 69 73 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ist..           
1d370 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20   )..        {.. 
1d380 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76             if (v
1d390 73 4c 69 73 74 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  sList == null)..
1d3a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d3b0 76 73 4c 69 73 74 20 3d 20 6e 65 77 20 56 73 4c  vsList = new VsL
1d3c0 69 73 74 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ist();....      
1d3d0 20 20 20 20 20 20 69 66 20 28 76 73 4c 69 73 74        if (vsList
1d3e0 2e 52 6f 6f 74 4b 65 79 20 3d 3d 20 6e 75 6c 6c  .RootKey == null
1d3f0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
1d400 20 20 20 76 73 4c 69 73 74 2e 52 6f 6f 74 4b 65     vsList.RootKe
1d410 79 20 3d 20 52 65 67 69 73 74 72 79 2e 4c 6f 63  y = Registry.Loc
1d420 61 6c 4d 61 63 68 69 6e 65 3b 0d 0a 0d 0a 20 20  alMachine;....  
1d430 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76 73            if (vs
1d440 4c 69 73 74 2e 56 65 72 73 69 6f 6e 73 20 3d 3d  List.Versions ==
1d450 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
1d460 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1d470 20 20 20 20 20 20 20 76 73 4c 69 73 74 2e 56 65         vsList.Ve
1d480 72 73 69 6f 6e 73 20 3d 20 6e 65 77 20 56 65 72  rsions = new Ver
1d490 73 69 6f 6e 4c 69 73 74 28 29 3b 0d 0a 0d 0a 20  sionList();.... 
1d4a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1d4b0 2f 20 76 73 4c 69 73 74 2e 56 65 72 73 69 6f 6e  / vsList.Version
1d4c0 73 2e 41 64 64 28 6e 65 77 20 56 65 72 73 69 6f  s.Add(new Versio
1d4d0 6e 28 38 2c 20 30 29 29 3b 20 2f 2f 20 56 69 73  n(8, 0)); // Vis
1d4e0 75 61 6c 20 53 74 75 64 69 6f 20 32 30 30 35 0d  ual Studio 2005.
1d4f0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1d500 20 20 20 69 66 20 28 28 63 6f 6e 66 69 67 75 72     if ((configur
1d510 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20 7c  ation == null) |
1d520 7c 20 21 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  | !configuration
1d530 2e 4e 6f 56 73 32 30 30 38 29 0d 0a 20 20 20 20  .NoVs2008)..    
1d540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d550 76 73 4c 69 73 74 2e 56 65 72 73 69 6f 6e 73 2e  vsList.Versions.
1d560 41 64 64 28 6e 65 77 20 56 65 72 73 69 6f 6e 28  Add(new Version(
1d570 39 2c 20 30 29 29 3b 20 2f 2f 20 56 69 73 75 61  9, 0)); // Visua
1d580 6c 20 53 74 75 64 69 6f 20 32 30 30 38 0d 0a 0d  l Studio 2008...
1d590 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1d5a0 20 69 66 20 28 28 63 6f 6e 66 69 67 75 72 61 74   if ((configurat
1d5b0 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20  ion == null) || 
1d5c0 21 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 4e  !configuration.N
1d5d0 6f 56 73 32 30 31 30 29 0d 0a 20 20 20 20 20 20  oVs2010)..      
1d5e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76 73                vs
1d5f0 4c 69 73 74 2e 56 65 72 73 69 6f 6e 73 2e 41 64  List.Versions.Ad
1d600 64 28 6e 65 77 20 56 65 72 73 69 6f 6e 28 31 30  d(new Version(10
1d610 2c 20 30 29 29 3b 2f 2f 20 56 69 73 75 61 6c 20  , 0));// Visual 
1d620 53 74 75 64 69 6f 20 32 30 31 30 0d 0a 20 20 20  Studio 2010..   
1d630 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
1d640 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76 73            if (vs
1d650 4c 69 73 74 2e 46 72 61 6d 65 77 6f 72 6b 56 65  List.FrameworkVe
1d660 72 73 69 6f 6e 73 20 3d 3d 20 6e 75 6c 6c 29 0d  rsions == null).
1d670 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
1d680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d690 76 73 4c 69 73 74 2e 46 72 61 6d 65 77 6f 72 6b  vsList.Framework
1d6a0 56 65 72 73 69 6f 6e 73 20 3d 20 6e 65 77 20 56  Versions = new V
1d6b0 65 72 73 69 6f 6e 4c 69 73 74 4d 61 70 28 29 3b  ersionListMap();
1d6c0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1d6d0 20 20 20 20 2f 2f 20 76 73 4c 69 73 74 2e 46 72      // vsList.Fr
1d6e0 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 73 2e  ameworkVersions.
1d6f0 41 64 64 28 6e 65 77 20 56 65 72 73 69 6f 6e 28  Add(new Version(
1d700 38 2c 20 30 29 2c 0d 0a 20 20 20 20 20 20 20 20  8, 0),..        
1d710 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 6e          //     n
1d720 65 77 20 56 65 72 73 69 6f 6e 4c 69 73 74 28 6e  ew VersionList(n
1d730 65 77 20 56 65 72 73 69 6f 6e 5b 5d 20 7b 0d 0a  ew Version[] {..
1d740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d750 2f 2f 20 20 20 20 20 20 20 20 20 6e 65 77 20 56  //         new V
1d760 65 72 73 69 6f 6e 28 32 2c 20 30 2c 20 35 30 37  ersion(2, 0, 507
1d770 32 37 29 20 7d 29 29 3b 0d 0a 0d 0a 20 20 20 20  27) }));....    
1d780 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
1d790 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d  (configuration =
1d7a0 3d 20 6e 75 6c 6c 29 20 7c 7c 20 21 63 6f 6e 66  = null) || !conf
1d7b0 69 67 75 72 61 74 69 6f 6e 2e 4e 6f 56 73 32 30  iguration.NoVs20
1d7c0 30 38 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  08)..           
1d7d0 20 20 20 20 20 20 20 20 20 76 73 4c 69 73 74 2e           vsList.
1d7e0 46 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e  FrameworkVersion
1d7f0 73 2e 41 64 64 28 6e 65 77 20 56 65 72 73 69 6f  s.Add(new Versio
1d800 6e 28 39 2c 20 30 29 2c 0d 0a 20 20 20 20 20 20  n(9, 0),..      
1d810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d820 20 20 6e 65 77 20 56 65 72 73 69 6f 6e 4c 69 73    new VersionLis
1d830 74 28 6e 65 77 20 56 65 72 73 69 6f 6e 5b 5d 20  t(new Version[] 
1d840 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
1d850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e                 n
1d860 65 77 20 56 65 72 73 69 6f 6e 28 32 2c 20 30 2c  ew Version(2, 0,
1d870 20 35 30 37 32 37 29 20 7d 29 29 3b 0d 0a 0d 0a   50727) }));....
1d880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d890 69 66 20 28 28 63 6f 6e 66 69 67 75 72 61 74 69  if ((configurati
1d8a0 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 21  on == null) || !
1d8b0 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 4e 6f  configuration.No
1d8c0 56 73 32 30 31 30 29 0d 0a 20 20 20 20 20 20 20  Vs2010)..       
1d8d0 20 20 20 20 20 20 20 20 20 20 20 20 20 76 73 4c               vsL
1d8e0 69 73 74 2e 46 72 61 6d 65 77 6f 72 6b 56 65 72  ist.FrameworkVer
1d8f0 73 69 6f 6e 73 2e 41 64 64 28 6e 65 77 20 56 65  sions.Add(new Ve
1d900 72 73 69 6f 6e 28 31 30 2c 20 30 29 2c 0d 0a 20  rsion(10, 0),.. 
1d910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d920 20 20 20 20 20 20 20 6e 65 77 20 56 65 72 73 69         new Versi
1d930 6f 6e 4c 69 73 74 28 6e 65 77 20 56 65 72 73 69  onList(new Versi
1d940 6f 6e 5b 5d 20 7b 0d 0a 20 20 20 20 20 20 20 20  on[] {..        
1d950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d960 20 20 20 20 6e 65 77 20 56 65 72 73 69 6f 6e 28      new Version(
1d970 32 2c 20 30 2c 20 35 30 37 32 37 29 2c 0d 0a 20  2, 0, 50727),.. 
1d980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e                 n
1d9a0 65 77 20 56 65 72 73 69 6f 6e 28 34 2c 20 30 2c  ew Version(4, 0,
1d9b0 20 33 30 33 31 39 29 20 7d 29 29 3b 0d 0a 20 20   30319) }));..  
1d9c0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
1d9d0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
1d9e0 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
1d9f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1da00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1da10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1da20 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
1da30 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61       private sta
1da40 74 69 63 20 62 6f 6f 6c 20 48 61 76 65 56 73 56  tic bool HaveVsV
1da50 65 72 73 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20  ersion(..       
1da60 20 20 20 20 20 52 65 67 69 73 74 72 79 4b 65 79       RegistryKey
1da70 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 20 20   rootKey,..     
1da80 20 20 20 20 20 20 20 56 65 72 73 69 6f 6e 20 76         Version v
1da90 73 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20  sVersion,..     
1daa0 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74         bool what
1dab0 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  If,..           
1dac0 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 0d 0a 20   bool verbose.. 
1dad0 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
1dae0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1daf0 20 20 20 20 20 69 66 20 28 76 73 56 65 72 73 69       if (vsVersi
1db00 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  on == null)..   
1db10 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
1db20 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20  urn false;....  
1db30 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
1db40 20 66 6f 72 6d 61 74 20 3d 20 22 53 6f 66 74 77   format = "Softw
1db50 61 72 65 5c 5c 4d 69 63 72 6f 73 6f 66 74 5c 5c  are\\Microsoft\\
1db60 56 69 73 75 61 6c 53 74 75 64 69 6f 5c 5c 7b 30  VisualStudio\\{0
1db70 7d 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }";..           
1db80 20 73 74 72 69 6e 67 20 6b 65 79 4e 61 6d 65 20   string keyName 
1db90 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  = String.Format(
1dba0 66 6f 72 6d 61 74 2c 20 76 73 56 65 72 73 69 6f  format, vsVersio
1dbb0 6e 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  n);....         
1dbc0 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65     using (MockRe
1dbd0 67 69 73 74 72 79 4b 65 79 20 6b 65 79 20 3d 20  gistryKey key = 
1dbe0 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 4f  RegistryHelper.O
1dbf0 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20  penSubKey(..    
1dc00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dc10 72 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e 61 6d 65  rootKey, keyName
1dc20 2c 20 66 61 6c 73 65 2c 20 77 68 61 74 49 66 2c  , false, whatIf,
1dc30 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20   verbose))..    
1dc40 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
1dc50 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6b             if (k
1dc60 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ey == null)..   
1dc70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dc80 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
1dc90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1dca0 20 20 6f 62 6a 65 63 74 20 76 61 6c 75 65 20 3d    object value =
1dcb0 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e   RegistryHelper.
1dcc0 47 65 74 56 61 6c 75 65 28 0d 0a 20 20 20 20 20  GetValue(..     
1dcd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b                 k
1dce0 65 79 2c 20 22 49 6e 73 74 61 6c 6c 44 69 72 22  ey, "InstallDir"
1dcf0 2c 20 6e 75 6c 6c 2c 20 77 68 61 74 49 66 2c 20  , null, whatIf, 
1dd00 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20  verbose);....   
1dd10 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
1dd20 28 21 28 76 61 6c 75 65 20 69 73 20 73 74 72 69  (!(value is stri
1dd30 6e 67 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ng))..          
1dd40 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
1dd50 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20   false;....     
1dd60 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
1dd70 67 20 64 69 72 65 63 74 6f 72 79 20 3d 20 28 73  g directory = (s
1dd80 74 72 69 6e 67 29 76 61 6c 75 65 3b 0d 0a 0d 0a  tring)value;....
1dd90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dda0 69 66 20 28 53 74 72 69 6e 67 2e 49 73 4e 75 6c  if (String.IsNul
1ddb0 6c 4f 72 45 6d 70 74 79 28 64 69 72 65 63 74 6f  lOrEmpty(directo
1ddc0 72 79 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ry))..          
1ddd0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
1dde0 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20   false;....     
1ddf0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21             if (!
1de00 44 69 72 65 63 74 6f 72 79 2e 45 78 69 73 74 73  Directory.Exists
1de10 28 64 69 72 65 63 74 6f 72 79 29 29 0d 0a 20 20  (directory))..  
1de20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1de30 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
1de40 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1de50 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d     return true;.
1de60 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
1de70 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
1de80 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
1de90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1dea0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1deb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1dec0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
1ded0 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
1dee0 73 74 61 74 69 63 20 62 6f 6f 6c 20 46 6f 72 45  static bool ForE
1def0 61 63 68 56 73 56 65 72 73 69 6f 6e 52 65 67 69  achVsVersionRegi
1df00 73 74 72 79 28 0d 0a 20 20 20 20 20 20 20 20 20  stry(..         
1df10 20 20 20 56 73 4c 69 73 74 20 76 73 4c 69 73 74     VsList vsList
1df20 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 56  ,..            V
1df30 69 73 75 61 6c 53 74 75 64 69 6f 52 65 67 69 73  isualStudioRegis
1df40 74 72 79 43 61 6c 6c 62 61 63 6b 20 63 61 6c 6c  tryCallback call
1df50 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20  back,..         
1df60 20 20 20 50 61 63 6b 61 67 65 20 70 61 63 6b 61     Package packa
1df70 67 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ge,..           
1df80 20 6f 62 6a 65 63 74 20 63 6c 69 65 6e 74 44 61   object clientDa
1df90 74 61 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ta,..           
1dfa0 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20   bool whatIf,.. 
1dfb0 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
1dfc0 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20  verbose,..      
1dfd0 20 20 20 20 20 20 72 65 66 20 73 74 72 69 6e 67        ref string
1dfe0 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20   error..        
1dff0 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b      )..        {
1e000 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
1e010 20 28 76 73 4c 69 73 74 20 3d 3d 20 6e 75 6c 6c   (vsList == null
1e020 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
1e030 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1e040 20 20 65 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c    error = "inval
1e050 69 64 20 56 53 20 6c 69 73 74 22 3b 0d 0a 20 20  id VS list";..  
1e060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
1e070 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
1e080 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
1e090 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74            Regist
1e0a0 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 20 3d 20  ryKey rootKey = 
1e0b0 76 73 4c 69 73 74 2e 52 6f 6f 74 4b 65 79 3b 0d  vsList.RootKey;.
1e0c0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
1e0d0 66 20 28 72 6f 6f 74 4b 65 79 20 3d 3d 20 6e 75  f (rootKey == nu
1e0e0 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
1e0f0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1e100 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69 6e 76      error = "inv
1e110 61 6c 69 64 20 72 6f 6f 74 20 6b 65 79 22 3b 0d  alid root key";.
1e120 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1e130 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
1e140 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
1e150 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
1e160 28 21 4f 62 6a 65 63 74 2e 52 65 66 65 72 65 6e  (!Object.Referen
1e170 63 65 45 71 75 61 6c 73 28 72 6f 6f 74 4b 65 79  ceEquals(rootKey
1e180 2c 20 52 65 67 69 73 74 72 79 2e 43 75 72 72 65  , Registry.Curre
1e190 6e 74 55 73 65 72 29 20 26 26 0d 0a 20 20 20 20  ntUser) &&..    
1e1a0 20 20 20 20 20 20 20 20 20 20 20 20 21 4f 62 6a              !Obj
1e1b0 65 63 74 2e 52 65 66 65 72 65 6e 63 65 45 71 75  ect.ReferenceEqu
1e1c0 61 6c 73 28 72 6f 6f 74 4b 65 79 2c 20 52 65 67  als(rootKey, Reg
1e1d0 69 73 74 72 79 2e 4c 6f 63 61 6c 4d 61 63 68 69  istry.LocalMachi
1e1e0 6e 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ne))..          
1e1f0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
1e200 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 72 6f       error = "ro
1e210 6f 74 20 6b 65 79 20 6d 75 73 74 20 62 65 20 70  ot key must be p
1e220 65 72 2d 75 73 65 72 20 6f 72 20 70 65 72 2d 6d  er-user or per-m
1e230 61 63 68 69 6e 65 22 3b 0d 0a 20 20 20 20 20 20  achine";..      
1e240 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
1e250 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
1e260 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
1e270 20 20 20 20 20 20 69 66 20 28 76 73 4c 69 73 74        if (vsList
1e280 2e 56 65 72 73 69 6f 6e 73 20 3d 3d 20 6e 75 6c  .Versions == nul
1e290 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
1e2a0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
1e2b0 20 20 20 65 72 72 6f 72 20 3d 20 22 6e 6f 20 56     error = "no V
1e2c0 53 20 76 65 72 73 69 6f 6e 73 20 66 6f 75 6e 64  S versions found
1e2d0 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ";..            
1e2e0 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
1e2f0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
1e300 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1e310 66 6f 72 65 61 63 68 20 28 56 65 72 73 69 6f 6e  foreach (Version
1e320 20 76 73 56 65 72 73 69 6f 6e 20 69 6e 20 76 73   vsVersion in vs
1e330 4c 69 73 74 2e 56 65 72 73 69 6f 6e 73 29 0d 0a  List.Versions)..
1e340 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
1e350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
1e360 72 61 63 65 4f 70 73 2e 54 72 61 63 65 28 0d 0a  raceOps.Trace(..
1e370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e380 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69 74      TracePriorit
1e390 79 2e 4c 6f 77 65 72 2c 20 74 72 61 63 65 43 61  y.Lower, traceCa
1e3a0 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46  llback, String.F
1e3b0 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
1e3c0 20 20 20 20 20 20 20 20 20 20 20 20 22 76 73 56              "vsV
1e3d0 65 72 73 69 6f 6e 20 3d 20 7b 30 7d 22 2c 20 46  ersion = {0}", F
1e3e0 6f 72 44 69 73 70 6c 61 79 28 76 73 56 65 72 73  orDisplay(vsVers
1e3f0 69 6f 6e 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  ion)),..        
1e400 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
1e410 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
1e420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
1e430 66 20 28 21 48 61 76 65 56 73 56 65 72 73 69 6f  f (!HaveVsVersio
1e440 6e 28 72 6f 6f 74 4b 65 79 2c 20 76 73 56 65 72  n(rootKey, vsVer
1e450 73 69 6f 6e 2c 20 77 68 61 74 49 66 2c 20 76 65  sion, whatIf, ve
1e460 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20  rbose))..       
1e470 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
1e480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e490 54 72 61 63 65 4f 70 73 2e 54 72 61 63 65 28 54  TraceOps.Trace(T
1e4a0 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77  racePriority.Low
1e4b0 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c  , traceCallback,
1e4c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1e4d0 20 20 20 20 20 20 20 20 20 20 22 56 69 73 75 61            "Visua
1e4e0 6c 20 53 74 75 64 69 6f 20 76 65 72 73 69 6f 6e  l Studio version
1e4f0 20 6e 6f 74 20 66 6f 75 6e 64 2c 20 73 6b 69 70   not found, skip
1e500 70 69 6e 67 2e 2e 2e 22 2c 0d 0a 20 20 20 20 20  ping...",..     
1e510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e520 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
1e530 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
1e540 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e            contin
1e550 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
1e560 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
1e570 20 20 20 20 20 20 20 20 20 20 69 66 20 28 63 61            if (ca
1e580 6c 6c 62 61 63 6b 20 3d 3d 20 6e 75 6c 6c 29 0d  llback == null).
1e590 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1e5a0 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a       continue;..
1e5b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1e5c0 20 20 69 66 20 28 21 63 61 6c 6c 62 61 63 6b 28    if (!callback(
1e5d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1e5e0 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65            rootKe
1e5f0 79 2c 20 76 73 56 65 72 73 69 6f 6e 2c 20 70 61  y, vsVersion, pa
1e600 63 6b 61 67 65 2c 20 63 6c 69 65 6e 74 44 61 74  ckage, clientDat
1e610 61 2c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20  a, whatIf,..    
1e620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e630 20 20 20 20 76 65 72 62 6f 73 65 2c 20 72 65 66      verbose, ref
1e640 20 65 72 72 6f 72 29 29 0d 0a 20 20 20 20 20 20   error))..      
1e650 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1e660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e670 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
1e680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e690 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
1e6a0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1e6b0 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20  return true;..  
1e6c0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
1e6d0 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
1e6e0 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
1e6f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e700 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e710 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e720 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
1e730 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f  ..        #regio
1e740 6e 20 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20  n Configuration 
1e750 46 69 6c 65 20 48 61 6e 64 6c 69 6e 67 0d 0a 20  File Handling.. 
1e760 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
1e770 74 61 74 69 63 20 62 6f 6f 6c 20 41 64 64 44 62  tatic bool AddDb
1e780 50 72 6f 76 69 64 65 72 46 61 63 74 6f 72 79 28  ProviderFactory(
1e790 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
1e7a0 72 69 6e 67 20 66 69 6c 65 4e 61 6d 65 2c 0d 0a  ring fileName,..
1e7b0 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
1e7c0 6e 67 20 69 6e 76 61 72 69 61 6e 74 2c 0d 0a 20  ng invariant,.. 
1e7d0 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
1e7e0 67 20 6e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20  g name,..       
1e7f0 20 20 20 20 20 73 74 72 69 6e 67 20 64 65 73 63       string desc
1e800 72 69 70 74 69 6f 6e 2c 0d 0a 20 20 20 20 20 20  ription,..      
1e810 20 20 20 20 20 20 73 74 72 69 6e 67 20 74 79 70        string typ
1e820 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20  eName,..        
1e830 20 20 20 20 41 73 73 65 6d 62 6c 79 4e 61 6d 65      AssemblyName
1e840 20 61 73 73 65 6d 62 6c 79 4e 61 6d 65 2c 0d 0a   assemblyName,..
1e850 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
1e860 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20   whatIf,..      
1e870 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f        bool verbo
1e880 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se,..           
1e890 20 72 65 66 20 62 6f 6f 6c 20 73 61 76 65 64 2c   ref bool saved,
1e8a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
1e8b0 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a  f string error..
1e8c0 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
1e8d0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
1e8e0 20 20 20 20 20 20 62 6f 6f 6c 20 64 69 72 74 79        bool dirty
1e8f0 20 3d 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20   = false;..     
1e900 20 20 20 20 20 20 20 58 6d 6c 44 6f 63 75 6d 65         XmlDocume
1e910 6e 74 20 64 6f 63 75 6d 65 6e 74 20 3d 20 6e 65  nt document = ne
1e920 77 20 58 6d 6c 44 6f 63 75 6d 65 6e 74 28 29 3b  w XmlDocument();
1e930 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1e940 64 6f 63 75 6d 65 6e 74 2e 50 72 65 73 65 72 76  document.Preserv
1e950 65 57 68 69 74 65 73 70 61 63 65 20 3d 20 74 72  eWhitespace = tr
1e960 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
1e970 20 64 6f 63 75 6d 65 6e 74 2e 4c 6f 61 64 28 66   document.Load(f
1e980 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20  ileName);....   
1e990 20 20 20 20 20 20 20 20 20 58 6d 6c 45 6c 65 6d           XmlElem
1e9a0 65 6e 74 20 65 6c 65 6d 65 6e 74 20 3d 20 64 6f  ent element = do
1e9b0 63 75 6d 65 6e 74 2e 53 65 6c 65 63 74 53 69 6e  cument.SelectSin
1e9c0 67 6c 65 4e 6f 64 65 28 53 74 72 69 6e 67 2e 46  gleNode(String.F
1e9d0 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
1e9e0 20 20 20 20 20 20 20 20 58 50 61 74 68 46 6f 72          XPathFor
1e9f0 41 64 64 45 6c 65 6d 65 6e 74 2c 20 69 6e 76 61  AddElement, inva
1ea00 72 69 61 6e 74 29 29 20 61 73 20 58 6d 6c 45 6c  riant)) as XmlEl
1ea10 65 6d 65 6e 74 3b 0d 0a 0d 0a 20 20 20 20 20 20  ement;....      
1ea20 20 20 20 20 20 20 69 66 20 28 65 6c 65 6d 65 6e        if (elemen
1ea30 74 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  t == null)..    
1ea40 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
1ea50 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
1ea60 67 5b 5d 20 65 6c 65 6d 65 6e 74 4e 61 6d 65 73  g[] elementNames
1ea70 20 3d 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20   = {..          
1ea80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 73                "s
1ea90 79 73 74 65 6d 2e 64 61 74 61 22 2c 20 22 44 62  ystem.data", "Db
1eaa0 50 72 6f 76 69 64 65 72 46 61 63 74 6f 72 69 65  ProviderFactorie
1eab0 73 22 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s"..            
1eac0 20 20 20 20 20 20 20 20 7d 3b 0d 0a 0d 0a 20 20          };....  
1ead0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 58 6d                Xm
1eae0 6c 45 6c 65 6d 65 6e 74 20 70 72 65 76 69 6f 75  lElement previou
1eaf0 73 45 6c 65 6d 65 6e 74 20 3d 0d 0a 20 20 20 20  sElement =..    
1eb00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1eb10 64 6f 63 75 6d 65 6e 74 2e 44 6f 63 75 6d 65 6e  document.Documen
1eb20 74 45 6c 65 6d 65 6e 74 3b 20 2f 2a 20 63 6f 6e  tElement; /* con
1eb30 66 69 67 75 72 61 74 69 6f 6e 20 2a 2f 0d 0a 0d  figuration */...
1eb40 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1eb50 20 66 6f 72 65 61 63 68 20 28 73 74 72 69 6e 67   foreach (string
1eb60 20 65 6c 65 6d 65 6e 74 4e 61 6d 65 20 69 6e 20   elementName in 
1eb70 65 6c 65 6d 65 6e 74 4e 61 6d 65 73 29 0d 0a 20  elementNames).. 
1eb80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
1eb90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1eba0 20 20 20 20 20 20 65 6c 65 6d 65 6e 74 20 3d 20        element = 
1ebb0 70 72 65 76 69 6f 75 73 45 6c 65 6d 65 6e 74 2e  previousElement.
1ebc0 53 65 6c 65 63 74 53 69 6e 67 6c 65 4e 6f 64 65  SelectSingleNode
1ebd0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
1ebe0 20 20 20 20 20 20 20 20 20 20 20 65 6c 65 6d 65             eleme
1ebf0 6e 74 4e 61 6d 65 29 20 61 73 20 58 6d 6c 45 6c  ntName) as XmlEl
1ec00 65 6d 65 6e 74 3b 0d 0a 0d 0a 20 20 20 20 20 20  ement;....      
1ec10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
1ec20 20 28 65 6c 65 6d 65 6e 74 20 3d 3d 20 6e 75 6c   (element == nul
1ec30 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
1ec40 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
1ec50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ec60 20 20 20 65 6c 65 6d 65 6e 74 20 3d 20 64 6f 63     element = doc
1ec70 75 6d 65 6e 74 2e 43 72 65 61 74 65 45 6c 65 6d  ument.CreateElem
1ec80 65 6e 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ent(..          
1ec90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1eca0 20 20 65 6c 65 6d 65 6e 74 4e 61 6d 65 2c 20 53    elementName, S
1ecb0 74 72 69 6e 67 2e 45 6d 70 74 79 29 3b 0d 0a 0d  tring.Empty);...
1ecc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1ecd0 20 20 20 20 20 20 20 20 20 70 72 65 76 69 6f 75           previou
1ece0 73 45 6c 65 6d 65 6e 74 2e 41 70 70 65 6e 64 43  sElement.AppendC
1ecf0 68 69 6c 64 28 65 6c 65 6d 65 6e 74 29 3b 0d 0a  hild(element);..
1ed00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ed10 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
1ed20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 72 65               pre
1ed30 76 69 6f 75 73 45 6c 65 6d 65 6e 74 20 3d 20 65  viousElement = e
1ed40 6c 65 6d 65 6e 74 3b 0d 0a 20 20 20 20 20 20 20  lement;..       
1ed50 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
1ed60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c                el
1ed70 65 6d 65 6e 74 20 3d 20 64 6f 63 75 6d 65 6e 74  ement = document
1ed80 2e 43 72 65 61 74 65 45 6c 65 6d 65 6e 74 28 0d  .CreateElement(.
1ed90 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1eda0 20 20 20 20 20 22 61 64 64 22 2c 20 53 74 72 69       "add", Stri
1edb0 6e 67 2e 45 6d 70 74 79 29 3b 0d 0a 0d 0a 20 20  ng.Empty);....  
1edc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 72                pr
1edd0 65 76 69 6f 75 73 45 6c 65 6d 65 6e 74 2e 41 70  eviousElement.Ap
1ede0 70 65 6e 64 43 68 69 6c 64 28 65 6c 65 6d 65 6e  pendChild(elemen
1edf0 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  t);....         
1ee00 20 20 20 20 20 20 20 64 69 72 74 79 20 3d 20 74         dirty = t
1ee10 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  rue;..          
1ee20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
1ee30 20 20 20 69 66 20 28 21 53 74 72 69 6e 67 2e 45     if (!String.E
1ee40 71 75 61 6c 73 28 65 6c 65 6d 65 6e 74 2e 47 65  quals(element.Ge
1ee50 74 41 74 74 72 69 62 75 74 65 28 22 6e 61 6d 65  tAttribute("name
1ee60 22 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  "),..           
1ee70 20 20 20 20 20 20 20 20 20 6e 61 6d 65 2c 20 53           name, S
1ee80 74 72 69 6e 67 43 6f 6d 70 61 72 69 73 6f 6e 2e  tringComparison.
1ee90 49 6e 76 61 72 69 61 6e 74 43 75 6c 74 75 72 65  InvariantCulture
1eea0 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
1eeb0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
1eec0 20 20 20 65 6c 65 6d 65 6e 74 2e 53 65 74 41 74     element.SetAt
1eed0 74 72 69 62 75 74 65 28 22 6e 61 6d 65 22 2c 20  tribute("name", 
1eee0 6e 61 6d 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  name);..        
1eef0 20 20 20 20 20 20 20 20 64 69 72 74 79 20 3d 20          dirty = 
1ef00 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  true;..         
1ef10 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
1ef20 20 20 20 20 69 66 20 28 21 53 74 72 69 6e 67 2e      if (!String.
1ef30 45 71 75 61 6c 73 28 65 6c 65 6d 65 6e 74 2e 47  Equals(element.G
1ef40 65 74 41 74 74 72 69 62 75 74 65 28 22 69 6e 76  etAttribute("inv
1ef50 61 72 69 61 6e 74 22 29 2c 0d 0a 20 20 20 20 20  ariant"),..     
1ef60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
1ef70 6e 76 61 72 69 61 6e 74 2c 20 53 74 72 69 6e 67  nvariant, String
1ef80 43 6f 6d 70 61 72 69 73 6f 6e 2e 49 6e 76 61 72  Comparison.Invar
1ef90 69 61 6e 74 43 75 6c 74 75 72 65 29 29 0d 0a 20  iantCulture)).. 
1efa0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
1efb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c                el
1efc0 65 6d 65 6e 74 2e 53 65 74 41 74 74 72 69 62 75  ement.SetAttribu
1efd0 74 65 28 22 69 6e 76 61 72 69 61 6e 74 22 2c 20  te("invariant", 
1efe0 69 6e 76 61 72 69 61 6e 74 29 3b 0d 0a 20 20 20  invariant);..   
1eff0 20 20 20 20 20 20 20 20 20 20 20 20 20 64 69 72               dir
1f000 74 79 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20  ty = true;..    
1f010 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
1f020 20 20 20 20 20 20 20 20 20 69 66 20 28 21 53 74           if (!St
1f030 72 69 6e 67 2e 45 71 75 61 6c 73 28 65 6c 65 6d  ring.Equals(elem
1f040 65 6e 74 2e 47 65 74 41 74 74 72 69 62 75 74 65  ent.GetAttribute
1f050 28 22 64 65 73 63 72 69 70 74 69 6f 6e 22 29 2c  ("description"),
1f060 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1f070 20 20 20 20 20 20 64 65 73 63 72 69 70 74 69 6f        descriptio
1f080 6e 2c 20 53 74 72 69 6e 67 43 6f 6d 70 61 72 69  n, StringCompari
1f090 73 6f 6e 2e 49 6e 76 61 72 69 61 6e 74 43 75 6c  son.InvariantCul
1f0a0 74 75 72 65 29 29 0d 0a 20 20 20 20 20 20 20 20  ture))..        
1f0b0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1f0c0 20 20 20 20 20 20 20 65 6c 65 6d 65 6e 74 2e 53         element.S
1f0d0 65 74 41 74 74 72 69 62 75 74 65 28 22 64 65 73  etAttribute("des
1f0e0 63 72 69 70 74 69 6f 6e 22 2c 20 64 65 73 63 72  cription", descr
1f0f0 69 70 74 69 6f 6e 29 3b 0d 0a 20 20 20 20 20 20  iption);..      
1f100 20 20 20 20 20 20 20 20 20 20 64 69 72 74 79 20            dirty 
1f110 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20  = true;..       
1f120 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
1f130 20 20 20 20 20 20 73 74 72 69 6e 67 20 66 75 6c        string ful
1f140 6c 54 79 70 65 4e 61 6d 65 20 3d 20 53 74 72 69  lTypeName = Stri
1f150 6e 67 2e 46 6f 72 6d 61 74 28 22 7b 30 7d 2c 20  ng.Format("{0}, 
1f160 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  {1}",..         
1f170 20 20 20 20 20 20 20 74 79 70 65 4e 61 6d 65 2c         typeName,
1f180 20 61 73 73 65 6d 62 6c 79 4e 61 6d 65 29 3b 0d   assemblyName);.
1f190 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
1f1a0 66 20 28 21 53 74 72 69 6e 67 2e 45 71 75 61 6c  f (!String.Equal
1f1b0 73 28 65 6c 65 6d 65 6e 74 2e 47 65 74 41 74 74  s(element.GetAtt
1f1c0 72 69 62 75 74 65 28 22 74 79 70 65 22 29 2c 0d  ribute("type"),.
1f1d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1f1e0 20 20 20 20 20 66 75 6c 6c 54 79 70 65 4e 61 6d       fullTypeNam
1f1f0 65 2c 20 53 74 72 69 6e 67 43 6f 6d 70 61 72 69  e, StringCompari
1f200 73 6f 6e 2e 49 6e 76 61 72 69 61 6e 74 43 75 6c  son.InvariantCul
1f210 74 75 72 65 29 29 0d 0a 20 20 20 20 20 20 20 20  ture))..        
1f220 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1f230 20 20 20 20 20 20 20 65 6c 65 6d 65 6e 74 2e 53         element.S
1f240 65 74 41 74 74 72 69 62 75 74 65 28 22 74 79 70  etAttribute("typ
1f250 65 22 2c 20 66 75 6c 6c 54 79 70 65 4e 61 6d 65  e", fullTypeName
1f260 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
1f270 20 20 20 20 64 69 72 74 79 20 3d 20 74 72 75 65      dirty = true
1f280 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
1f290 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1f2a0 69 66 20 28 64 69 72 74 79 20 7c 7c 20 77 68 61  if (dirty || wha
1f2b0 74 49 66 29 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf)..          
1f2c0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
1f2d0 20 20 20 20 20 69 66 20 28 76 65 72 62 6f 73 65       if (verbose
1f2e0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
1f2f0 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e         TraceOps.
1f300 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20  Trace(..        
1f310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f320 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 48 69  TracePriority.Hi
1f330 67 68 65 73 74 2c 20 74 72 61 63 65 43 61 6c 6c  ghest, traceCall
1f340 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72  back, String.For
1f350 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
1f360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 65                "e
1f370 6c 65 6d 65 6e 74 20 3d 20 7b 30 7d 22 2c 20 46  lement = {0}", F
1f380 6f 72 44 69 73 70 6c 61 79 28 65 6c 65 6d 65 6e  orDisplay(elemen
1f390 74 29 29 2c 20 74 72 61 63 65 43 61 74 65 67 6f  t)), traceCatego
1f3a0 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
1f3b0 20 20 20 20 20 20 20 20 69 66 20 28 21 77 68 61          if (!wha
1f3c0 74 49 66 29 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf)..          
1f3d0 20 20 20 20 20 20 20 20 20 20 64 6f 63 75 6d 65            docume
1f3e0 6e 74 2e 53 61 76 65 28 66 69 6c 65 4e 61 6d 65  nt.Save(fileName
1f3f0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
1f400 20 20 20 20 20 20 73 61 76 65 64 20 3d 20 74 72        saved = tr
1f410 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
1f420 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
1f430 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a    return true;..
1f440 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
1f450 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
1f460 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f470 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f480 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f490 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
1f4a0 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
1f4b0 73 74 61 74 69 63 20 62 6f 6f 6c 20 52 65 6d 6f  static bool Remo
1f4c0 76 65 44 62 50 72 6f 76 69 64 65 72 46 61 63 74  veDbProviderFact
1f4d0 6f 72 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ory(..          
1f4e0 20 20 73 74 72 69 6e 67 20 66 69 6c 65 4e 61 6d    string fileNam
1f4f0 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
1f500 73 74 72 69 6e 67 20 69 6e 76 61 72 69 61 6e 74  string invariant
1f510 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
1f520 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20  ool whatIf,..   
1f530 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65           bool ve
1f540 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 20  rbose,..        
1f550 20 20 20 20 72 65 66 20 62 6f 6f 6c 20 73 61 76      ref bool sav
1f560 65 64 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ed,..           
1f570 20 72 65 66 20 73 74 72 69 6e 67 20 65 72 72 6f   ref string erro
1f580 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29  r..            )
1f590 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
1f5a0 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 64 69           bool di
1f5b0 72 74 79 20 3d 20 66 61 6c 73 65 3b 0d 0a 20 20  rty = false;..  
1f5c0 20 20 20 20 20 20 20 20 20 20 58 6d 6c 44 6f 63            XmlDoc
1f5d0 75 6d 65 6e 74 20 64 6f 63 75 6d 65 6e 74 20 3d  ument document =
1f5e0 20 6e 65 77 20 58 6d 6c 44 6f 63 75 6d 65 6e 74   new XmlDocument
1f5f0 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ();....         
1f600 20 20 20 64 6f 63 75 6d 65 6e 74 2e 50 72 65 73     document.Pres
1f610 65 72 76 65 57 68 69 74 65 73 70 61 63 65 20 3d  erveWhitespace =
1f620 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20   true;..        
1f630 20 20 20 20 64 6f 63 75 6d 65 6e 74 2e 4c 6f 61      document.Loa
1f640 64 28 66 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a  d(fileName);....
1f650 20 20 20 20 20 20 20 20 20 20 20 20 58 6d 6c 45              XmlE
1f660 6c 65 6d 65 6e 74 20 65 6c 65 6d 65 6e 74 20 3d  lement element =
1f670 20 64 6f 63 75 6d 65 6e 74 2e 53 65 6c 65 63 74   document.Select
1f680 53 69 6e 67 6c 65 4e 6f 64 65 28 53 74 72 69 6e  SingleNode(Strin
1f690 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
1f6a0 20 20 20 20 20 20 20 20 20 20 20 58 50 61 74 68             XPath
1f6b0 46 6f 72 41 64 64 45 6c 65 6d 65 6e 74 2c 20 69  ForAddElement, i
1f6c0 6e 76 61 72 69 61 6e 74 29 29 20 61 73 20 58 6d  nvariant)) as Xm
1f6d0 6c 45 6c 65 6d 65 6e 74 3b 0d 0a 0d 0a 20 20 20  lElement;....   
1f6e0 20 20 20 20 20 20 20 20 20 69 66 20 28 65 6c 65           if (ele
1f6f0 6d 65 6e 74 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20  ment != null).. 
1f700 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
1f710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c                el
1f720 65 6d 65 6e 74 2e 50 61 72 65 6e 74 4e 6f 64 65  ement.ParentNode
1f730 2e 52 65 6d 6f 76 65 43 68 69 6c 64 28 65 6c 65  .RemoveChild(ele
1f740 6d 65 6e 74 29 3b 0d 0a 20 20 20 20 20 20 20 20  ment);..        
1f750 20 20 20 20 20 20 20 20 64 69 72 74 79 20 3d 20          dirty = 
1f760 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  true;..         
1f770 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
1f780 20 20 20 20 65 6c 65 6d 65 6e 74 20 3d 20 64 6f      element = do
1f790 63 75 6d 65 6e 74 2e 53 65 6c 65 63 74 53 69 6e  cument.SelectSin
1f7a0 67 6c 65 4e 6f 64 65 28 53 74 72 69 6e 67 2e 46  gleNode(String.F
1f7b0 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
1f7c0 20 20 20 20 20 20 20 20 58 50 61 74 68 46 6f 72          XPathFor
1f7d0 52 65 6d 6f 76 65 45 6c 65 6d 65 6e 74 2c 20 69  RemoveElement, i
1f7e0 6e 76 61 72 69 61 6e 74 29 29 20 61 73 20 58 6d  nvariant)) as Xm
1f7f0 6c 45 6c 65 6d 65 6e 74 3b 0d 0a 0d 0a 20 20 20  lElement;....   
1f800 20 20 20 20 20 20 20 20 20 69 66 20 28 65 6c 65           if (ele
1f810 6d 65 6e 74 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20  ment != null).. 
1f820 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
1f830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c                el
1f840 65 6d 65 6e 74 2e 50 61 72 65 6e 74 4e 6f 64 65  ement.ParentNode
1f850 2e 52 65 6d 6f 76 65 43 68 69 6c 64 28 65 6c 65  .RemoveChild(ele
1f860 6d 65 6e 74 29 3b 0d 0a 20 20 20 20 20 20 20 20  ment);..        
1f870 20 20 20 20 20 20 20 20 64 69 72 74 79 20 3d 20          dirty = 
1f880 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  true;..         
1f890 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
1f8a0 20 20 20 20 69 66 20 28 64 69 72 74 79 20 7c 7c      if (dirty ||
1f8b0 20 77 68 61 74 49 66 29 0d 0a 20 20 20 20 20 20   whatIf)..      
1f8c0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1f8d0 20 20 20 20 20 20 20 20 20 69 66 20 28 76 65 72           if (ver
1f8e0 62 6f 73 65 29 0d 0a 20 20 20 20 20 20 20 20 20  bose)..         
1f8f0 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
1f900 4f 70 73 2e 54 72 61 63 65 28 0d 0a 20 20 20 20  Ops.Trace(..    
1f910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f920 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69 74      TracePriorit
1f930 79 2e 48 69 67 68 65 73 74 2c 20 74 72 61 63 65  y.Highest, trace
1f940 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67  Callback, String
1f950 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
1f960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f970 20 20 22 65 6c 65 6d 65 6e 74 20 3d 20 7b 30 7d    "element = {0}
1f980 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 65 6c  ", ForDisplay(el
1f990 65 6d 65 6e 74 29 29 2c 20 74 72 61 63 65 43 61  ement)), traceCa
1f9a0 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
1f9b0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
1f9c0 21 77 68 61 74 49 66 29 0d 0a 20 20 20 20 20 20  !whatIf)..      
1f9d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 6f                do
1f9e0 63 75 6d 65 6e 74 2e 53 61 76 65 28 66 69 6c 65  cument.Save(file
1f9f0 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  Name);....      
1fa00 20 20 20 20 20 20 20 20 20 20 73 61 76 65 64 20            saved 
1fa10 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20  = true;..       
1fa20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
1fa30 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75        return tru
1fa40 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d  e;..        }...
1fa50 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
1fa60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fa70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fa80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fa90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1faa0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  ....        priv
1fab0 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f 6c 20  ate static bool 
1fac0 50 72 6f 63 65 73 73 44 62 50 72 6f 76 69 64 65  ProcessDbProvide
1fad0 72 46 61 63 74 6f 72 79 28 0d 0a 20 20 20 20 20  rFactory(..     
1fae0 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 66 69         string fi
1faf0 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20  leName,..       
1fb00 20 20 20 20 20 73 74 72 69 6e 67 20 69 6e 76 61       string inva
1fb10 72 69 61 6e 74 2c 0d 0a 20 20 20 20 20 20 20 20  riant,..        
1fb20 20 20 20 20 73 74 72 69 6e 67 20 6e 61 6d 65 2c      string name,
1fb30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
1fb40 72 69 6e 67 20 64 65 73 63 72 69 70 74 69 6f 6e  ring description
1fb50 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  ,..            s
1fb60 74 72 69 6e 67 20 74 79 70 65 4e 61 6d 65 2c 0d  tring typeName,.
1fb70 0a 20 20 20 20 20 20 20 20 20 20 20 20 41 73 73  .            Ass
1fb80 65 6d 62 6c 79 4e 61 6d 65 20 61 73 73 65 6d 62  emblyName assemb
1fb90 6c 79 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20  lyName,..       
1fba0 20 20 20 20 20 6f 62 6a 65 63 74 20 63 6c 69 65       object clie
1fbb0 6e 74 44 61 74 61 2c 0d 0a 20 20 20 20 20 20 20  ntData,..       
1fbc0 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66       bool whatIf
1fbd0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
1fbe0 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20  ool verbose,..  
1fbf0 20 20 20 20 20 20 20 20 20 20 72 65 66 20 62 6f            ref bo
1fc00 6f 6c 20 73 61 76 65 64 2c 0d 0a 20 20 20 20 20  ol saved,..     
1fc10 20 20 20 20 20 20 20 72 65 66 20 73 74 72 69 6e         ref strin
1fc20 67 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20  g error..       
1fc30 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
1fc40 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 41  {..            A
1fc50 6e 79 50 61 69 72 3c 73 74 72 69 6e 67 2c 20 62  nyPair<string, b
1fc60 6f 6f 6c 3e 20 70 61 69 72 20 3d 20 63 6c 69 65  ool> pair = clie
1fc70 6e 74 44 61 74 61 20 61 73 20 41 6e 79 50 61 69  ntData as AnyPai
1fc80 72 3c 73 74 72 69 6e 67 2c 20 62 6f 6f 6c 3e 3b  r<string, bool>;
1fc90 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1fca0 69 66 20 28 70 61 69 72 20 3d 3d 20 6e 75 6c 6c  if (pair == null
1fcb0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
1fcc0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1fcd0 20 20 65 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c    error = "inval
1fce0 69 64 20 66 72 61 6d 65 77 6f 72 6b 20 63 6f 6e  id framework con
1fcf0 66 69 67 20 63 61 6c 6c 62 61 63 6b 20 64 61 74  fig callback dat
1fd00 61 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  a";..           
1fd10 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
1fd20 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
1fd30 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
1fd40 20 69 66 20 28 70 61 69 72 2e 59 29 0d 0a 20 20   if (pair.Y)..  
1fd50 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1fd60 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
1fd70 75 72 6e 20 52 65 6d 6f 76 65 44 62 50 72 6f 76  urn RemoveDbProv
1fd80 69 64 65 72 46 61 63 74 6f 72 79 28 0d 0a 20 20  iderFactory(..  
1fd90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fda0 20 20 66 69 6c 65 4e 61 6d 65 2c 20 69 6e 76 61    fileName, inva
1fdb0 72 69 61 6e 74 2c 20 77 68 61 74 49 66 2c 20 76  riant, whatIf, v
1fdc0 65 72 62 6f 73 65 2c 20 72 65 66 20 73 61 76 65  erbose, ref save
1fdd0 64 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d,..            
1fde0 20 20 20 20 20 20 20 20 72 65 66 20 65 72 72 6f          ref erro
1fdf0 72 29 20 26 26 0d 0a 20 20 20 20 20 20 20 20 20  r) &&..         
1fe00 20 20 20 20 20 20 20 41 64 64 44 62 50 72 6f 76         AddDbProv
1fe10 69 64 65 72 46 61 63 74 6f 72 79 28 0d 0a 20 20  iderFactory(..  
1fe20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fe30 20 20 66 69 6c 65 4e 61 6d 65 2c 20 69 6e 76 61    fileName, inva
1fe40 72 69 61 6e 74 2c 20 6e 61 6d 65 2c 20 64 65 73  riant, name, des
1fe50 63 72 69 70 74 69 6f 6e 2c 20 74 79 70 65 4e 61  cription, typeNa
1fe60 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me,..           
1fe70 20 20 20 20 20 20 20 20 20 61 73 73 65 6d 62 6c           assembl
1fe80 79 4e 61 6d 65 2c 20 77 68 61 74 49 66 2c 20 76  yName, whatIf, v
1fe90 65 72 62 6f 73 65 2c 20 72 65 66 20 73 61 76 65  erbose, ref save
1fea0 64 2c 20 72 65 66 20 65 72 72 6f 72 29 3b 0d 0a  d, ref error);..
1feb0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
1fec0 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d             else.
1fed0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
1fee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fef0 72 65 74 75 72 6e 20 52 65 6d 6f 76 65 44 62 50  return RemoveDbP
1ff00 72 6f 76 69 64 65 72 46 61 63 74 6f 72 79 28 0d  roviderFactory(.
1ff10 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1ff20 20 20 20 20 20 66 69 6c 65 4e 61 6d 65 2c 20 69       fileName, i
1ff30 6e 76 61 72 69 61 6e 74 2c 20 77 68 61 74 49 66  nvariant, whatIf
1ff40 2c 20 76 65 72 62 6f 73 65 2c 20 72 65 66 20 73  , verbose, ref s
1ff50 61 76 65 64 2c 0d 0a 20 20 20 20 20 20 20 20 20  aved,..         
1ff60 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20 65             ref e
1ff70 72 72 6f 72 29 3b 0d 0a 20 20 20 20 20 20 20 20  rror);..        
1ff80 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d      }..        }
1ff90 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65  ..        #endre
1ffa0 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
1ffb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ffc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ffd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ffe0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1fff0 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
20000 20 20 20 23 72 65 67 69 6f 6e 20 41 73 73 65 6d     #region Assem
20010 62 6c 79 20 46 6f 6c 64 65 72 73 20 48 61 6e 64  bly Folders Hand
20020 6c 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 70 72  ling..        pr
20030 69 76 61 74 65 20 73 74 61 74 69 63 20 73 74 72  ivate static str
20040 69 6e 67 20 47 65 74 41 73 73 65 6d 62 6c 79 46  ing GetAssemblyF
20050 6f 6c 64 65 72 73 4b 65 79 4e 61 6d 65 28 0d 0a  oldersKeyName(..
20060 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
20070 6e 67 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65  ng frameworkName
20080 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 56  ,..            V
20090 65 72 73 69 6f 6e 20 66 72 61 6d 65 77 6f 72 6b  ersion framework
200a0 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20  Version,..      
200b0 20 20 20 20 20 20 73 74 72 69 6e 67 20 70 6c 61        string pla
200c0 74 66 6f 72 6d 4e 61 6d 65 0d 0a 20 20 20 20 20  tformName..     
200d0 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
200e0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
200f0 20 73 74 72 69 6e 67 20 66 6f 72 6d 61 74 20 3d   string format =
20100 20 21 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f   !String.IsNullO
20110 72 45 6d 70 74 79 28 70 6c 61 74 66 6f 72 6d 4e  rEmpty(platformN
20120 61 6d 65 29 20 3f 0d 0a 20 20 20 20 20 20 20 20  ame) ?..        
20130 20 20 20 20 20 20 20 20 22 53 6f 66 74 77 61 72          "Softwar
20140 65 5c 5c 4d 69 63 72 6f 73 6f 66 74 5c 5c 7b 30  e\\Microsoft\\{0
20150 7d 5c 5c 76 7b 31 7d 5c 5c 7b 32 7d 5c 5c 41 73  }\\v{1}\\{2}\\As
20160 73 65 6d 62 6c 79 46 6f 6c 64 65 72 73 45 78 22  semblyFoldersEx"
20170 20 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   :..            
20180 20 20 20 20 22 53 6f 66 74 77 61 72 65 5c 5c 4d      "Software\\M
20190 69 63 72 6f 73 6f 66 74 5c 5c 7b 30 7d 5c 5c 76  icrosoft\\{0}\\v
201a0 7b 31 7d 5c 5c 41 73 73 65 6d 62 6c 79 46 6f 6c  {1}\\AssemblyFol
201b0 64 65 72 73 45 78 22 3b 0d 0a 0d 0a 20 20 20 20  dersEx";....    
201c0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 53          return S
201d0 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 66 6f 72  tring.Format(for
201e0 6d 61 74 2c 20 66 72 61 6d 65 77 6f 72 6b 4e 61  mat, frameworkNa
201f0 6d 65 2c 20 66 72 61 6d 65 77 6f 72 6b 56 65 72  me, frameworkVer
20200 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20  sion,..         
20210 20 20 20 20 20 20 20 70 6c 61 74 66 6f 72 6d 4e         platformN
20220 61 6d 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d  ame);..        }
20230 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
20240 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20250 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20260 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20270 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20280 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70  ///....        p
20290 72 69 76 61 74 65 20 73 74 61 74 69 63 20 62 6f  rivate static bo
202a0 6f 6c 20 41 64 64 54 6f 41 73 73 65 6d 62 6c 79  ol AddToAssembly
202b0 46 6f 6c 64 65 72 73 28 0d 0a 20 20 20 20 20 20  Folders(..      
202c0 20 20 20 20 20 20 52 65 67 69 73 74 72 79 4b 65        RegistryKe
202d0 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 20  y rootKey,..    
202e0 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 66          string f
202f0 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 0d 0a 20  rameworkName,.. 
20300 20 20 20 20 20 20 20 20 20 20 20 56 65 72 73 69             Versi
20310 6f 6e 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73  on frameworkVers
20320 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ion,..          
20330 20 20 73 74 72 69 6e 67 20 70 6c 61 74 66 6f 72    string platfor
20340 6d 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20  mName,..        
20350 20 20 20 20 73 74 72 69 6e 67 20 73 75 62 4b 65      string subKe
20360 79 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20  yName,..        
20370 20 20 20 20 73 74 72 69 6e 67 20 64 69 72 65 63      string direc
20380 74 6f 72 79 2c 0d 0a 20 20 20 20 20 20 20 20 20  tory,..         
20390 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d     bool whatIf,.
203a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
203b0 6c 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20  l verbose,..    
203c0 20 20 20 20 20 20 20 20 72 65 66 20 73 74 72 69          ref stri
203d0 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20  ng error..      
203e0 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
203f0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
20400 73 74 72 69 6e 67 20 6b 65 79 4e 61 6d 65 20 3d  string keyName =
20410 20 47 65 74 41 73 73 65 6d 62 6c 79 46 6f 6c 64   GetAssemblyFold
20420 65 72 73 4b 65 79 4e 61 6d 65 28 0d 0a 20 20 20  ersKeyName(..   
20430 20 20 20 20 20 20 20 20 20 20 20 20 20 66 72 61               fra
20440 6d 65 77 6f 72 6b 4e 61 6d 65 2c 20 66 72 61 6d  meworkName, fram
20450 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 20 70 6c  eworkVersion, pl
20460 61 74 66 6f 72 6d 4e 61 6d 65 29 3b 0d 0a 0d 0a  atformName);....
20470 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e              usin
20480 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b  g (MockRegistryK
20490 65 79 20 6b 65 79 20 3d 20 52 65 67 69 73 74 72  ey key = Registr
204a0 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62 4b  yHelper.OpenSubK
204b0 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey(..           
204c0 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79           rootKey
204d0 2c 20 6b 65 79 4e 61 6d 65 2c 20 74 72 75 65 2c  , keyName, true,
204e0 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65   whatIf, verbose
204f0 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
20500 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
20510 20 20 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75     if (key == nu
20520 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
20530 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
20540 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
20550 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  r = String.Forma
20560 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
20570 20 20 20 20 20 20 20 20 20 20 20 20 22 63 6f 75              "cou
20580 6c 64 20 6e 6f 74 20 6f 70 65 6e 20 72 65 67 69  ld not open regi
20590 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 7b  stry key: {0}\\{
205a0 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  1}",..          
205b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f                ro
205c0 6f 74 4b 65 79 2c 20 6b 65 79 4e 61 6d 65 29 3b  otKey, keyName);
205d0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
205e0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
205f0 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
20600 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
20610 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e              usin
20620 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b  g (MockRegistryK
20630 65 79 20 73 75 62 4b 65 79 20 3d 20 52 65 67 69  ey subKey = Regi
20640 73 74 72 79 48 65 6c 70 65 72 2e 43 72 65 61 74  stryHelper.Creat
20650 65 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20  eSubKey(..      
20660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20670 20 20 6b 65 79 2c 20 73 75 62 4b 65 79 4e 61 6d    key, subKeyNam
20680 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f  e, whatIf, verbo
20690 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  se))..          
206a0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
206b0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
206c0 28 73 75 62 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29  (subKey == null)
206d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
206e0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
206f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20700 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e   error = String.
20710 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
20720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20730 20 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20       "could not 
20740 63 72 65 61 74 65 20 72 65 67 69 73 74 72 79 20  create registry 
20750 6b 65 79 3a 20 7b 30 7d 5c 5c 7b 31 7d 22 2c 0d  key: {0}\\{1}",.
20760 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
20770 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79               key
20780 2c 20 73 75 62 4b 65 79 4e 61 6d 65 29 3b 0d 0a  , subKeyName);..
20790 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
207a0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
207b0 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
207c0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
207d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
207e0 20 20 20 20 20 20 52 65 67 69 73 74 72 79 48 65        RegistryHe
207f0 6c 70 65 72 2e 53 65 74 56 61 6c 75 65 28 0d 0a  lper.SetValue(..
20800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20810 20 20 20 20 20 20 20 20 73 75 62 4b 65 79 2c 20          subKey, 
20820 6e 75 6c 6c 2c 20 64 69 72 65 63 74 6f 72 79 2c  null, directory,
20830 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65   whatIf, verbose
20840 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
20850 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
20860 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
20870 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b      return true;
20880 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
20890 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
208a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
208b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
208c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
208d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
208e0 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
208f0 65 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 52 65  e static bool Re
20900 6d 6f 76 65 46 72 6f 6d 41 73 73 65 6d 62 6c 79  moveFromAssembly
20910 46 6f 6c 64 65 72 73 28 0d 0a 20 20 20 20 20 20  Folders(..      
20920 20 20 20 20 20 20 52 65 67 69 73 74 72 79 4b 65        RegistryKe
20930 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 20  y rootKey,..    
20940 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 66          string f
20950 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 0d 0a 20  rameworkName,.. 
20960 20 20 20 20 20 20 20 20 20 20 20 56 65 72 73 69             Versi
20970 6f 6e 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73  on frameworkVers
20980 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ion,..          
20990 20 20 73 74 72 69 6e 67 20 70 6c 61 74 66 6f 72    string platfor
209a0 6d 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20  mName,..        
209b0 20 20 20 20 73 74 72 69 6e 67 20 73 75 62 4b 65      string subKe
209c0 79 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20  yName,..        
209d0 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c      bool whatIf,
209e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
209f0 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20  ol verbose,..   
20a00 20 20 20 20 20 20 20 20 20 72 65 66 20 73 74 72           ref str
20a10 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20 20 20  ing error..     
20a20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
20a30 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
20a40 20 73 74 72 69 6e 67 20 6b 65 79 4e 61 6d 65 20   string keyName 
20a50 3d 20 47 65 74 41 73 73 65 6d 62 6c 79 46 6f 6c  = GetAssemblyFol
20a60 64 65 72 73 4b 65 79 4e 61 6d 65 28 0d 0a 20 20  dersKeyName(..  
20a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 72                fr
20a80 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 20 66 72 61  ameworkName, fra
20a90 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 20 70  meworkVersion, p
20aa0 6c 61 74 66 6f 72 6d 4e 61 6d 65 29 3b 0d 0a 0d  latformName);...
20ab0 0a 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69  .            usi
20ac0 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79  ng (MockRegistry
20ad0 4b 65 79 20 6b 65 79 20 3d 20 52 65 67 69 73 74  Key key = Regist
20ae0 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62  ryHelper.OpenSub
20af0 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  Key(..          
20b00 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65            rootKe
20b10 79 2c 20 6b 65 79 4e 61 6d 65 2c 20 66 61 6c 73  y, keyName, fals
20b20 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f  e, whatIf, verbo
20b30 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  se))..          
20b40 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
20b50 20 20 20 20 20 69 66 20 28 6b 65 79 20 3d 3d 20       if (key == 
20b60 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
20b70 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
20b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
20b90 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72  ror = String.For
20ba0 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
20bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 63                "c
20bc0 6f 75 6c 64 20 6e 6f 74 20 6f 70 65 6e 20 72 65  ould not open re
20bd0 67 69 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c  gistry key: {0}\
20be0 5c 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20  \{1}",..        
20bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20c00 72 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e 61 6d 65  rootKey, keyName
20c10 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
20c20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
20c30 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
20c40 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
20c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65                Re
20c60 67 69 73 74 72 79 48 65 6c 70 65 72 2e 44 65 6c  gistryHelper.Del
20c70 65 74 65 53 75 62 4b 65 79 28 0d 0a 20 20 20 20  eteSubKey(..    
20c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20c90 6b 65 79 2c 20 73 75 62 4b 65 79 4e 61 6d 65 2c  key, subKeyName,
20ca0 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65   whatIf, verbose
20cb0 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
20cc0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
20cd0 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20   return true;.. 
20ce0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
20cf0 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
20d00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20d10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20d20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20d30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
20d40 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
20d50 74 61 74 69 63 20 62 6f 6f 6c 20 50 72 6f 63 65  tatic bool Proce
20d60 73 73 41 73 73 65 6d 62 6c 79 46 6f 6c 64 65 72  ssAssemblyFolder
20d70 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s(..            
20d80 52 65 67 69 73 74 72 79 4b 65 79 20 72 6f 6f 74  RegistryKey root
20d90 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  Key,..          
20da0 20 20 73 74 72 69 6e 67 20 66 72 61 6d 65 77 6f    string framewo
20db0 72 6b 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20  rkName,..       
20dc0 20 20 20 20 20 56 65 72 73 69 6f 6e 20 66 72 61       Version fra
20dd0 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 0d 0a  meworkVersion,..
20de0 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
20df0 6e 67 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c  ng platformName,
20e00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6f 62  ..            ob
20e10 6a 65 63 74 20 63 6c 69 65 6e 74 44 61 74 61 2c  ject clientData,
20e20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
20e30 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20  ol whatIf,..    
20e40 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72          bool ver
20e50 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  bose,..         
20e60 20 20 20 72 65 66 20 73 74 72 69 6e 67 20 65 72     ref string er
20e70 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ror..           
20e80 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20   )..        {.. 
20e90 20 20 20 20 20 20 20 20 20 20 20 41 6e 79 50 61             AnyPa
20ea0 69 72 3c 73 74 72 69 6e 67 2c 20 62 6f 6f 6c 3e  ir<string, bool>
20eb0 20 70 61 69 72 20 3d 20 63 6c 69 65 6e 74 44 61   pair = clientDa
20ec0 74 61 20 61 73 20 41 6e 79 50 61 69 72 3c 73 74  ta as AnyPair<st
20ed0 72 69 6e 67 2c 20 62 6f 6f 6c 3e 3b 0d 0a 0d 0a  ring, bool>;....
20ee0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
20ef0 70 61 69 72 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  pair == null).. 
20f00 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
20f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
20f20 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 66  ror = "invalid f
20f30 72 61 6d 65 77 6f 72 6b 20 63 61 6c 6c 62 61 63  ramework callbac
20f40 6b 20 64 61 74 61 22 3b 0d 0a 20 20 20 20 20 20  k data";..      
20f50 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
20f60 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
20f70 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
20f80 20 20 20 20 20 20 69 66 20 28 70 61 69 72 2e 59        if (pair.Y
20f90 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
20fa0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
20fb0 20 20 72 65 74 75 72 6e 20 52 65 6d 6f 76 65 46    return RemoveF
20fc0 72 6f 6d 41 73 73 65 6d 62 6c 79 46 6f 6c 64 65  romAssemblyFolde
20fd0 72 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  rs(..           
20fe0 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79           rootKey
20ff0 2c 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c  , frameworkName,
21000 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f   frameworkVersio
21010 6e 2c 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c  n, platformName,
21020 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
21030 20 20 20 20 20 20 4c 65 67 61 63 79 50 72 6f 6a        LegacyProj
21040 65 63 74 4e 61 6d 65 2c 20 77 68 61 74 49 66 2c  ectName, whatIf,
21050 20 76 65 72 62 6f 73 65 2c 20 72 65 66 20 65 72   verbose, ref er
21060 72 6f 72 29 20 26 26 0d 0a 20 20 20 20 20 20 20  ror) &&..       
21070 20 20 20 20 20 20 20 20 20 41 64 64 54 6f 41 73           AddToAs
21080 73 65 6d 62 6c 79 46 6f 6c 64 65 72 73 28 0d 0a  semblyFolders(..
21090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
210a0 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 66 72 61      rootKey, fra
210b0 6d 65 77 6f 72 6b 4e 61 6d 65 2c 20 66 72 61 6d  meworkName, fram
210c0 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 20 70 6c  eworkVersion, pl
210d0 61 74 66 6f 72 6d 4e 61 6d 65 2c 0d 0a 20 20 20  atformName,..   
210e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
210f0 20 50 72 6f 6a 65 63 74 4e 61 6d 65 2c 20 70 61   ProjectName, pa
21100 69 72 2e 58 2c 20 77 68 61 74 49 66 2c 20 76 65  ir.X, whatIf, ve
21110 72 62 6f 73 65 2c 20 72 65 66 20 65 72 72 6f 72  rbose, ref error
21120 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
21130 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 65  }..            e
21140 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  lse..           
21150 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
21160 20 20 20 20 72 65 74 75 72 6e 20 52 65 6d 6f 76      return Remov
21170 65 46 72 6f 6d 41 73 73 65 6d 62 6c 79 46 6f 6c  eFromAssemblyFol
21180 64 65 72 73 28 0d 0a 20 20 20 20 20 20 20 20 20  ders(..         
21190 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b             rootK
211a0 65 79 2c 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d  ey, frameworkNam
211b0 65 2c 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73  e, frameworkVers
211c0 69 6f 6e 2c 20 70 6c 61 74 66 6f 72 6d 4e 61 6d  ion, platformNam
211d0 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
211e0 20 20 20 20 20 20 20 20 50 72 6f 6a 65 63 74 4e          ProjectN
211f0 61 6d 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72  ame, whatIf, ver
21200 62 6f 73 65 2c 20 72 65 66 20 65 72 72 6f 72 29  bose, ref error)
21210 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
21220 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
21230 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
21240 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
21250 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21260 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21270 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21280 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21290 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72  //....        #r
212a0 65 67 69 6f 6e 20 56 69 73 75 61 6c 20 53 74 75  egion Visual Stu
212b0 64 69 6f 20 48 61 6e 64 6c 69 6e 67 0d 0a 20 20  dio Handling..  
212c0 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
212d0 61 74 69 63 20 73 74 72 69 6e 67 20 47 65 74 56  atic string GetV
212e0 73 4b 65 79 4e 61 6d 65 28 0d 0a 20 20 20 20 20  sKeyName(..     
212f0 20 20 20 20 20 20 20 56 65 72 73 69 6f 6e 20 76         Version v
21300 73 56 65 72 73 69 6f 6e 0d 0a 20 20 20 20 20 20  sVersion..      
21310 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
21320 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
21330 69 66 20 28 76 73 56 65 72 73 69 6f 6e 20 3d 3d  if (vsVersion ==
21340 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
21350 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e          return n
21360 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ull;....        
21370 20 20 20 20 72 65 74 75 72 6e 20 53 74 72 69 6e      return Strin
21380 67 2e 46 6f 72 6d 61 74 28 22 53 6f 66 74 77 61  g.Format("Softwa
21390 72 65 5c 5c 4d 69 63 72 6f 73 6f 66 74 5c 5c 56  re\\Microsoft\\V
213a0 69 73 75 61 6c 53 74 75 64 69 6f 5c 5c 7b 30 7d  isualStudio\\{0}
213b0 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
213c0 20 20 20 20 76 73 56 65 72 73 69 6f 6e 29 3b 0d      vsVersion);.
213d0 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
213e0 20 20 20 20 20 20 2f 2f 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 0d 0a 0d  /////////////...
21430 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e  .        #region
21440 20 56 69 73 75 61 6c 20 53 74 75 64 69 6f 20 56   Visual Studio V
21450 65 72 73 69 6f 6e 20 48 61 6e 64 6c 69 6e 67 0d  ersion Handling.
21460 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
21470 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 41 64 64   static bool Add
21480 56 73 56 65 72 73 69 6f 6e 28 0d 0a 20 20 20 20  VsVersion(..    
21490 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79          Registry
214a0 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20  Key rootKey,..  
214b0 20 20 20 20 20 20 20 20 20 20 56 65 72 73 69 6f            Versio
214c0 6e 20 76 73 56 65 72 73 69 6f 6e 2c 0d 0a 20 20  n vsVersion,..  
214d0 20 20 20 20 20 20 20 20 20 20 50 61 63 6b 61 67            Packag
214e0 65 20 70 61 63 6b 61 67 65 2c 0d 0a 20 20 20 20  e package,..    
214f0 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 63          object c
21500 6c 69 65 6e 74 44 61 74 61 2c 0d 0a 20 20 20 20  lientData,..    
21510 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61          bool wha
21520 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf,..          
21530 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d    bool verbose,.
21540 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66  .            ref
21550 20 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20   string error.. 
21560 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
21570 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
21580 20 20 20 20 20 69 66 20 28 76 73 56 65 72 73 69       if (vsVersi
21590 6f 6e 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  on != null)..   
215a0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
215b0 20 20 20 20 20 20 20 20 20 20 20 20 56 73 4c 69              VsLi
215c0 73 74 20 76 73 4c 69 73 74 20 3d 20 63 6c 69 65  st vsList = clie
215d0 6e 74 44 61 74 61 20 61 73 20 56 73 4c 69 73 74  ntData as VsList
215e0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
215f0 20 20 20 20 20 69 66 20 28 76 73 4c 69 73 74 20       if (vsList 
21600 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  != null)..      
21610 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
21620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21630 20 69 66 20 28 76 73 4c 69 73 74 2e 49 6e 73 74   if (vsList.Inst
21640 61 6c 6c 65 64 56 65 72 73 69 6f 6e 73 20 3d 3d  alledVersions ==
21650 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
21660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21670 76 73 4c 69 73 74 2e 49 6e 73 74 61 6c 6c 65 64  vsList.Installed
21680 56 65 72 73 69 6f 6e 73 20 3d 20 6e 65 77 20 56  Versions = new V
21690 65 72 73 69 6f 6e 4c 69 73 74 28 29 3b 0d 0a 0d  ersionList();...
216a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
216b0 20 20 20 20 20 69 66 20 28 21 76 73 4c 69 73 74       if (!vsList
216c0 2e 49 6e 73 74 61 6c 6c 65 64 56 65 72 73 69 6f  .InstalledVersio
216d0 6e 73 2e 43 6f 6e 74 61 69 6e 73 28 76 73 56 65  ns.Contains(vsVe
216e0 72 73 69 6f 6e 29 29 0d 0a 20 20 20 20 20 20 20  rsion))..       
216f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21700 20 76 73 4c 69 73 74 2e 49 6e 73 74 61 6c 6c 65   vsList.Installe
21710 64 56 65 72 73 69 6f 6e 73 2e 41 64 64 28 76 73  dVersions.Add(vs
21720 56 65 72 73 69 6f 6e 29 3b 0d 0a 20 20 20 20 20  Version);..     
21730 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
21740 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
21750 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
21760 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20  n true;..       
21770 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64   }..        #end
21780 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
21790 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
217a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
217b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
217c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
217d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
217e0 20 20 20 20 20 23 72 65 67 69 6f 6e 20 56 69 73       #region Vis
217f0 75 61 6c 20 53 74 75 64 69 6f 20 44 61 74 61 20  ual Studio Data 
21800 53 6f 75 72 63 65 20 48 61 6e 64 6c 69 6e 67 0d  Source Handling.
21810 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
21820 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 41 64 64   static bool Add
21830 56 73 44 61 74 61 53 6f 75 72 63 65 28 0d 0a 20  VsDataSource(.. 
21840 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73             Regis
21850 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d  tryKey rootKey,.
21860 0a 20 20 20 20 20 20 20 20 20 20 20 20 56 65 72  .            Ver
21870 73 69 6f 6e 20 76 73 56 65 72 73 69 6f 6e 2c 0d  sion vsVersion,.
21880 0a 20 20 20 20 20 20 20 20 20 20 20 20 50 61 63  .            Pac
21890 6b 61 67 65 20 70 61 63 6b 61 67 65 2c 0d 0a 20  kage package,.. 
218a0 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
218b0 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20  whatIf,..       
218c0 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73       bool verbos
218d0 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
218e0 72 65 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72  ref string error
218f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d  ..            ).
21900 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
21910 20 20 20 20 20 20 20 20 69 66 20 28 76 73 56 65          if (vsVe
21920 72 73 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  rsion == null)..
21930 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
21940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
21950 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64 20  rror = "invalid 
21960 56 53 20 76 65 72 73 69 6f 6e 22 3b 0d 0a 20 20  VS version";..  
21970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
21980 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
21990 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
219a0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 70 61            if (pa
219b0 63 6b 61 67 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  ckage == null)..
219c0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
219d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
219e0 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64 20  rror = "invalid 
219f0 56 53 20 70 61 63 6b 61 67 65 22 3b 0d 0a 20 20  VS package";..  
21a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
21a10 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
21a20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
21a30 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
21a40 20 6b 65 79 4e 61 6d 65 20 3d 20 47 65 74 56 73   keyName = GetVs
21a50 4b 65 79 4e 61 6d 65 28 76 73 56 65 72 73 69 6f  KeyName(vsVersio
21a60 6e 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  n);....         
21a70 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65     using (MockRe
21a80 67 69 73 74 72 79 4b 65 79 20 6b 65 79 20 3d 20  gistryKey key = 
21a90 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 4f  RegistryHelper.O
21aa0 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20  penSubKey(..    
21ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21ac0 72 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e 61 6d 65  rootKey, keyName
21ad0 2c 20 66 61 6c 73 65 2c 20 77 68 61 74 49 66 2c  , false, whatIf,
21ae0 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20   verbose))..    
21af0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
21b00 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6b             if (k
21b10 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ey == null)..   
21b20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
21b30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21b40 20 20 20 20 65 72 72 6f 72 20 3d 20 53 74 72 69      error = Stri
21b50 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
21b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21b70 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20 6f      "could not o
21b80 70 65 6e 20 72 65 67 69 73 74 72 79 20 6b 65 79  pen registry key
21b90 3a 20 7b 30 7d 5c 5c 7b 31 7d 22 2c 0d 0a 20 20  : {0}\\{1}",..  
21ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21bb0 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 6b        rootKey, k
21bc0 65 79 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20  eyName);....    
21bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21be0 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20  return false;.. 
21bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
21c00 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
21c10 20 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52      using (MockR
21c20 65 67 69 73 74 72 79 4b 65 79 20 73 75 62 4b 65  egistryKey subKe
21c30 79 20 3d 20 52 65 67 69 73 74 72 79 48 65 6c 70  y = RegistryHelp
21c40 65 72 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a  er.OpenSubKey(..
21c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21c60 20 20 20 20 20 20 20 20 6b 65 79 2c 20 22 44 61          key, "Da
21c70 74 61 53 6f 75 72 63 65 73 22 2c 20 74 72 75 65  taSources", true
21c80 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73  , whatIf, verbos
21c90 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e))..           
21ca0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
21cb0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
21cc0 73 75 62 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d  subKey == null).
21cd0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
21ce0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
21cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21d00 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46  error = String.F
21d10 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
21d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21d30 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20 6f      "could not o
21d40 70 65 6e 20 72 65 67 69 73 74 72 79 20 6b 65 79  pen registry key
21d50 3a 20 7b 30 7d 5c 5c 44 61 74 61 53 6f 75 72 63  : {0}\\DataSourc
21d60 65 73 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  es",..          
21d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21d80 20 20 6b 65 79 29 3b 0d 0a 0d 0a 20 20 20 20 20    key);....     
21d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21da0 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
21db0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
21dc0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
21dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 75                 u
21de0 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74  sing (MockRegist
21df0 72 79 4b 65 79 20 64 61 74 61 53 6f 75 72 63 65  ryKey dataSource
21e00 4b 65 79 20 3d 0d 0a 20 20 20 20 20 20 20 20 20  Key =..         
21e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21e20 20 20 20 52 65 67 69 73 74 72 79 48 65 6c 70 65     RegistryHelpe
21e30 72 2e 43 72 65 61 74 65 53 75 62 4b 65 79 28 73  r.CreateSubKey(s
21e40 75 62 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20  ubKey,..        
21e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21e60 20 20 20 20 70 61 63 6b 61 67 65 2e 44 61 74 61      package.Data
21e70 53 6f 75 72 63 65 49 64 2e 54 6f 53 74 72 69 6e  SourceId.ToStrin
21e80 67 28 56 73 49 64 46 6f 72 6d 61 74 29 2c 0d 0a  g(VsIdFormat),..
21e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21ea0 20 20 20 20 20 20 20 20 20 20 20 20 77 68 61 74              what
21eb0 49 66 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a 20  If, verbose)).. 
21ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21ed0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
21ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
21ef0 20 28 64 61 74 61 53 6f 75 72 63 65 4b 65 79 20   (dataSourceKey 
21f00 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
21f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21f20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
21f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21f40 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e   error = String.
21f50 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
21f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21f70 20 20 20 20 20 20 20 20 20 22 63 6f 75 6c 64 20           "could 
21f80 6e 6f 74 20 63 72 65 61 74 65 20 72 65 67 69 73  not create regis
21f90 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 7b 31  try key: {0}\\{1
21fa0 7d 22 2c 20 6b 65 79 2c 0d 0a 20 20 20 20 20 20  }", key,..      
21fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21fc0 20 20 20 20 20 20 20 20 20 20 70 61 63 6b 61 67            packag
21fd0 65 2e 44 61 74 61 53 6f 75 72 63 65 49 64 2e 54  e.DataSourceId.T
21fe0 6f 53 74 72 69 6e 67 28 56 73 49 64 46 6f 72 6d  oString(VsIdForm
21ff0 61 74 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  at));....       
22000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22010 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
22020 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
22030 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
22040 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
22050 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72           Registr
22060 79 48 65 6c 70 65 72 2e 53 65 74 56 61 6c 75 65  yHelper.SetValue
22070 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
22080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
22090 61 74 61 53 6f 75 72 63 65 4b 65 79 2c 20 6e 75  ataSourceKey, nu
220a0 6c 6c 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ll, String.Forma
220b0 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
220c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
220d0 22 7b 30 7d 20 44 61 74 61 62 61 73 65 20 46 69  "{0} Database Fi
220e0 6c 65 22 2c 20 50 72 6f 6a 65 63 74 4e 61 6d 65  le", ProjectName
220f0 29 2c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20  ), whatIf,..    
22100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22110 20 20 20 20 20 20 20 20 76 65 72 62 6f 73 65 29          verbose)
22120 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
22130 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67               Reg
22140 69 73 74 72 79 48 65 6c 70 65 72 2e 43 72 65 61  istryHelper.Crea
22150 74 65 53 75 62 4b 65 79 28 64 61 74 61 53 6f 75  teSubKey(dataSou
22160 72 63 65 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20  rceKey,..       
22170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22180 20 20 20 20 20 53 74 72 69 6e 67 2e 46 6f 72 6d       String.Form
22190 61 74 28 22 53 75 70 70 6f 72 74 69 6e 67 50 72  at("SupportingPr
221a0 6f 76 69 64 65 72 73 5c 5c 7b 30 7d 22 2c 0d 0a  oviders\\{0}",..
221b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
221c0 20 20 20 20 20 20 20 20 20 20 20 20 70 61 63 6b              pack
221d0 61 67 65 2e 44 61 74 61 50 72 6f 76 69 64 65 72  age.DataProvider
221e0 49 64 2e 54 6f 53 74 72 69 6e 67 28 56 73 49 64  Id.ToString(VsId
221f0 46 6f 72 6d 61 74 29 29 2c 0d 0a 20 20 20 20 20  Format)),..     
22200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22210 20 20 20 20 20 20 20 77 68 61 74 49 66 2c 20 76         whatIf, v
22220 65 72 62 6f 73 65 29 3b 0d 0a 20 20 20 20 20 20  erbose);..      
22230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
22240 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
22250 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
22260 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
22270 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20   return true;.. 
22280 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
22290 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
222a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
222b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
222c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
222d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
222e0 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
222f0 74 61 74 69 63 20 62 6f 6f 6c 20 52 65 6d 6f 76  tatic bool Remov
22300 65 56 73 44 61 74 61 53 6f 75 72 63 65 28 0d 0a  eVsDataSource(..
22310 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69              Regi
22320 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c  stryKey rootKey,
22330 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 56 65  ..            Ve
22340 72 73 69 6f 6e 20 76 73 56 65 72 73 69 6f 6e 2c  rsion vsVersion,
22350 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 50 61  ..            Pa
22360 63 6b 61 67 65 20 70 61 63 6b 61 67 65 2c 0d 0a  ckage package,..
22370 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
22380 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20   whatIf,..      
22390 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f        bool verbo
223a0 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se,..           
223b0 20 72 65 66 20 73 74 72 69 6e 67 20 65 72 72 6f   ref string erro
223c0 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29  r..            )
223d0 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
223e0 20 20 20 20 20 20 20 20 20 69 66 20 28 76 73 56           if (vsV
223f0 65 72 73 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 0d  ersion == null).
22400 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
22410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22420 65 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64  error = "invalid
22430 20 56 53 20 76 65 72 73 69 6f 6e 22 3b 0d 0a 20   VS version";.. 
22440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
22450 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
22460 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
22470 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 70             if (p
22480 61 63 6b 61 67 65 20 3d 3d 20 6e 75 6c 6c 29 0d  ackage == null).
22490 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
224a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
224b0 65 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64  error = "invalid
224c0 20 56 53 20 70 61 63 6b 61 67 65 22 3b 0d 0a 20   VS package";.. 
224d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
224e0 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
224f0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
22500 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
22510 67 20 6b 65 79 4e 61 6d 65 20 3d 20 47 65 74 56  g keyName = GetV
22520 73 4b 65 79 4e 61 6d 65 28 76 73 56 65 72 73 69  sKeyName(vsVersi
22530 6f 6e 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  on);....        
22540 20 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52      using (MockR
22550 65 67 69 73 74 72 79 4b 65 79 20 6b 65 79 20 3d  egistryKey key =
22560 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e   RegistryHelper.
22570 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20  OpenSubKey(..   
22580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22590 20 72 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e 61 6d   rootKey, keyNam
225a0 65 2c 20 66 61 6c 73 65 2c 20 77 68 61 74 49 66  e, false, whatIf
225b0 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20  , verbose))..   
225c0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
225d0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
225e0 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  key == null)..  
225f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
22600 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
22610 20 20 20 20 20 65 72 72 6f 72 20 3d 20 53 74 72       error = Str
22620 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
22630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22640 20 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20       "could not 
22650 6f 70 65 6e 20 72 65 67 69 73 74 72 79 20 6b 65  open registry ke
22660 79 3a 20 7b 30 7d 5c 5c 7b 31 7d 22 2c 0d 0a 20  y: {0}\\{1}",.. 
22670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22680 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20         rootKey, 
22690 6b 65 79 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20  keyName);....   
226a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
226b0 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
226c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
226d0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
226e0 20 20 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b       using (Mock
226f0 52 65 67 69 73 74 72 79 4b 65 79 20 73 75 62 4b  RegistryKey subK
22700 65 79 20 3d 20 52 65 67 69 73 74 72 79 48 65 6c  ey = RegistryHel
22710 70 65 72 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d  per.OpenSubKey(.
22720 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
22730 20 20 20 20 20 20 20 20 20 6b 65 79 2c 20 22 44           key, "D
22740 61 74 61 53 6f 75 72 63 65 73 22 2c 20 74 72 75  ataSources", tru
22750 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f  e, whatIf, verbo
22760 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  se))..          
22770 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
22780 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
22790 28 73 75 62 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29  (subKey == null)
227a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
227b0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
227c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
227d0 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e   error = String.
227e0 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
227f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22800 20 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20       "could not 
22810 6f 70 65 6e 20 72 65 67 69 73 74 72 79 20 6b 65  open registry ke
22820 79 3a 20 7b 30 7d 5c 5c 44 61 74 61 53 6f 75 72  y: {0}\\DataSour
22830 63 65 73 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  ces",..         
22840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22850 20 20 20 6b 65 79 29 3b 0d 0a 0d 0a 20 20 20 20     key);....    
22860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22870 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
22880 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
22890 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
228a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
228b0 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 44  RegistryHelper.D
228c0 65 6c 65 74 65 53 75 62 4b 65 79 54 72 65 65 28  eleteSubKeyTree(
228d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
228e0 20 20 20 20 20 20 20 20 20 20 73 75 62 4b 65 79            subKey
228f0 2c 20 70 61 63 6b 61 67 65 2e 44 61 74 61 53 6f  , package.DataSo
22900 75 72 63 65 49 64 2e 54 6f 53 74 72 69 6e 67 28  urceId.ToString(
22910 56 73 49 64 46 6f 72 6d 61 74 29 2c 0d 0a 20 20  VsIdFormat),..  
22920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22930 20 20 20 20 20 20 77 68 61 74 49 66 2c 20 76 65        whatIf, ve
22940 72 62 6f 73 65 29 3b 0d 0a 20 20 20 20 20 20 20  rbose);..       
22950 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
22960 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
22970 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
22980 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d  true;..        }
22990 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
229a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
229b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
229c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
229d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
229e0 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70  ///....        p
229f0 72 69 76 61 74 65 20 73 74 61 74 69 63 20 62 6f  rivate static bo
22a00 6f 6c 20 50 72 6f 63 65 73 73 56 73 44 61 74 61  ol ProcessVsData
22a10 53 6f 75 72 63 65 28 0d 0a 20 20 20 20 20 20 20  Source(..       
22a20 20 20 20 20 20 52 65 67 69 73 74 72 79 4b 65 79       RegistryKey
22a30 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 20 20   rootKey,..     
22a40 20 20 20 20 20 20 20 56 65 72 73 69 6f 6e 20 76         Version v
22a50 73 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20  sVersion,..     
22a60 20 20 20 20 20 20 20 50 61 63 6b 61 67 65 20 70         Package p
22a70 61 63 6b 61 67 65 2c 0d 0a 20 20 20 20 20 20 20  ackage,..       
22a80 20 20 20 20 20 6f 62 6a 65 63 74 20 63 6c 69 65       object clie
22a90 6e 74 44 61 74 61 2c 0d 0a 20 20 20 20 20 20 20  ntData,..       
22aa0 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66       bool whatIf
22ab0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
22ac0 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20  ool verbose,..  
22ad0 20 20 20 20 20 20 20 20 20 20 72 65 66 20 73 74            ref st
22ae0 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20 20  ring error..    
22af0 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
22b00 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
22b10 20 20 69 66 20 28 70 61 63 6b 61 67 65 20 3d 3d    if (package ==
22b20 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
22b30 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
22b40 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22         error = "
22b50 69 6e 76 61 6c 69 64 20 56 53 20 70 61 63 6b 61  invalid VS packa
22b60 67 65 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ge";..          
22b70 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
22b80 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se;..           
22b90 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
22ba0 20 20 41 6e 79 50 61 69 72 3c 73 74 72 69 6e 67    AnyPair<string
22bb0 2c 20 62 6f 6f 6c 3e 20 70 61 69 72 20 3d 20 63  , bool> pair = c
22bc0 6c 69 65 6e 74 44 61 74 61 20 61 73 20 41 6e 79  lientData as Any
22bd0 50 61 69 72 3c 73 74 72 69 6e 67 2c 20 62 6f 6f  Pair<string, boo
22be0 6c 3e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  l>;....         
22bf0 20 20 20 69 66 20 28 70 61 69 72 20 3d 3d 20 6e     if (pair == n
22c00 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
22c10 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
22c20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69 6e       error = "in
22c30 76 61 6c 69 64 20 56 53 20 63 61 6c 6c 62 61 63  valid VS callbac
22c40 6b 20 64 61 74 61 22 3b 0d 0a 20 20 20 20 20 20  k data";..      
22c50 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
22c60 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
22c70 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
22c80 20 20 20 20 20 20 69 66 20 28 70 61 69 72 2e 59        if (pair.Y
22c90 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
22ca0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
22cb0 20 20 72 65 74 75 72 6e 20 41 64 64 56 73 44 61    return AddVsDa
22cc0 74 61 53 6f 75 72 63 65 28 0d 0a 20 20 20 20 20  taSource(..     
22cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
22ce0 6f 6f 74 4b 65 79 2c 20 76 73 56 65 72 73 69 6f  ootKey, vsVersio
22cf0 6e 2c 20 70 61 63 6b 61 67 65 2c 20 77 68 61 74  n, package, what
22d00 49 66 2c 20 76 65 72 62 6f 73 65 2c 20 72 65 66  If, verbose, ref
22d10 20 65 72 72 6f 72 29 3b 0d 0a 20 20 20 20 20 20   error);..      
22d20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
22d30 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20       else..     
22d40 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
22d50 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
22d60 20 52 65 6d 6f 76 65 56 73 44 61 74 61 53 6f 75   RemoveVsDataSou
22d70 72 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  rce(..          
22d80 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65            rootKe
22d90 79 2c 20 76 73 56 65 72 73 69 6f 6e 2c 20 70 61  y, vsVersion, pa
22da0 63 6b 61 67 65 2c 20 77 68 61 74 49 66 2c 20 76  ckage, whatIf, v
22db0 65 72 62 6f 73 65 2c 20 72 65 66 20 65 72 72 6f  erbose, ref erro
22dc0 72 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  r);..           
22dd0 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20   }..        }.. 
22de0 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
22df0 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  n....        ///
22e00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22e10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22e20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22e30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22e40 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
22e50 23 72 65 67 69 6f 6e 20 56 69 73 75 61 6c 20 53  #region Visual S
22e60 74 75 64 69 6f 20 44 61 74 61 20 50 72 6f 76 69  tudio Data Provi
22e70 64 65 72 20 48 61 6e 64 6c 69 6e 67 0d 0a 20 20  der Handling..  
22e80 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
22e90 61 74 69 63 20 62 6f 6f 6c 20 41 64 64 56 73 44  atic bool AddVsD
22ea0 61 74 61 50 72 6f 76 69 64 65 72 28 0d 0a 20 20  ataProvider(..  
22eb0 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74            Regist
22ec0 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a  ryKey rootKey,..
22ed0 20 20 20 20 20 20 20 20 20 20 20 20 56 65 72 73              Vers
22ee0 69 6f 6e 20 76 73 56 65 72 73 69 6f 6e 2c 0d 0a  ion vsVersion,..
22ef0 20 20 20 20 20 20 20 20 20 20 20 20 50 61 63 6b              Pack
22f00 61 67 65 20 70 61 63 6b 61 67 65 2c 0d 0a 20 20  age package,..  
22f10 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
22f20 20 66 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20 20   fileName,..    
22f30 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61          bool wha
22f40 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf,..          
22f50 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d    bool verbose,.
22f60 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66  .            ref
22f70 20 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20   string error.. 
22f80 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
22f90 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
22fa0 20 20 20 20 20 69 66 20 28 76 73 56 65 72 73 69       if (vsVersi
22fb0 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  on == null)..   
22fc0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
22fd0 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
22fe0 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 56 53 20  r = "invalid VS 
22ff0 76 65 72 73 69 6f 6e 22 3b 0d 0a 20 20 20 20 20  version";..     
23000 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
23010 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
23020 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
23030 20 20 20 20 20 20 20 69 66 20 28 70 61 63 6b 61         if (packa
23040 67 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ge == null)..   
23050 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
23060 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
23070 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 56 53 20  r = "invalid VS 
23080 70 61 63 6b 61 67 65 22 3b 0d 0a 20 20 20 20 20  package";..     
23090 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
230a0 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
230b0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
230c0 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6b 65         string ke
230d0 79 4e 61 6d 65 20 3d 20 47 65 74 56 73 4b 65 79  yName = GetVsKey
230e0 4e 61 6d 65 28 76 73 56 65 72 73 69 6f 6e 29 3b  Name(vsVersion);
230f0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
23100 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73  using (MockRegis
23110 74 72 79 4b 65 79 20 6b 65 79 20 3d 20 52 65 67  tryKey key = Reg
23120 69 73 74 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e  istryHelper.Open
23130 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20  SubKey(..       
23140 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f               roo
23150 74 4b 65 79 2c 20 6b 65 79 4e 61 6d 65 2c 20 66  tKey, keyName, f
23160 61 6c 73 65 2c 20 77 68 61 74 49 66 2c 20 76 65  alse, whatIf, ve
23170 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20  rbose))..       
23180 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
23190 20 20 20 20 20 20 20 20 69 66 20 28 6b 65 79 20          if (key 
231a0 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
231b0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
231c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
231d0 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e   error = String.
231e0 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
231f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23200 20 22 63 6f 75 6c 64 20 6e 6f 74 20 6f 70 65 6e   "could not open
23210 20 72 65 67 69 73 74 72 79 20 6b 65 79 3a 20 7b   registry key: {
23220 30 7d 5c 5c 7b 31 7d 22 2c 0d 0a 20 20 20 20 20  0}\\{1}",..     
23230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23240 20 20 20 72 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e     rootKey, keyN
23250 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ame);....       
23260 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
23270 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  urn false;..    
23280 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
23290 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
232a0 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69   using (MockRegi
232b0 73 74 72 79 4b 65 79 20 73 75 62 4b 65 79 20 3d  stryKey subKey =
232c0 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e   RegistryHelper.
232d0 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20  OpenSubKey(..   
232e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
232f0 20 20 20 20 20 6b 65 79 2c 20 22 44 61 74 61 50       key, "DataP
23300 72 6f 76 69 64 65 72 73 22 2c 20 74 72 75 65 2c  roviders", true,
23310 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65   whatIf, verbose
23320 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
23330 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
23340 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73             if (s
23350 75 62 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  ubKey == null)..
23360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23370 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
23380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
23390 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f  rror = String.Fo
233a0 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
233b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
233c0 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20 6f 70     "could not op
233d0 65 6e 20 72 65 67 69 73 74 72 79 20 6b 65 79 3a  en registry key:
233e0 20 7b 30 7d 5c 5c 44 61 74 61 50 72 6f 76 69 64   {0}\\DataProvid
233f0 65 72 73 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  ers",..         
23400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23410 20 20 20 6b 65 79 29 3b 0d 0a 0d 0a 20 20 20 20     key);....    
23420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23430 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
23440 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
23450 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
23460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23470 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73  using (MockRegis
23480 74 72 79 4b 65 79 20 64 61 74 61 50 72 6f 76 69  tryKey dataProvi
23490 64 65 72 4b 65 79 20 3d 0d 0a 20 20 20 20 20 20  derKey =..      
234a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
234b0 20 20 20 20 20 20 52 65 67 69 73 74 72 79 48 65        RegistryHe
234c0 6c 70 65 72 2e 43 72 65 61 74 65 53 75 62 4b 65  lper.CreateSubKe
234d0 79 28 73 75 62 4b 65 79 2c 0d 0a 20 20 20 20 20  y(subKey,..     
234e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
234f0 20 20 20 20 20 20 20 70 61 63 6b 61 67 65 2e 44         package.D
23500 61 74 61 50 72 6f 76 69 64 65 72 49 64 2e 54 6f  ataProviderId.To
23510 53 74 72 69 6e 67 28 56 73 49 64 46 6f 72 6d 61  String(VsIdForma
23520 74 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  t),..           
23530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23540 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65   whatIf, verbose
23550 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
23560 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
23570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23580 20 20 20 69 66 20 28 64 61 74 61 50 72 6f 76 69     if (dataProvi
23590 64 65 72 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d  derKey == null).
235a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
235b0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
235c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
235d0 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
235e0 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
235f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23610 22 63 6f 75 6c 64 20 6e 6f 74 20 63 72 65 61 74  "could not creat
23620 65 20 72 65 67 69 73 74 72 79 20 6b 65 79 3a 20  e registry key: 
23630 7b 30 7d 5c 5c 7b 31 7d 22 2c 20 6b 65 79 2c 0d  {0}\\{1}", key,.
23640 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
23650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23660 20 70 61 63 6b 61 67 65 2e 44 61 74 61 50 72 6f   package.DataPro
23670 76 69 64 65 72 49 64 2e 54 6f 53 74 72 69 6e 67  viderId.ToString
23680 28 56 73 49 64 46 6f 72 6d 61 74 29 29 3b 0d 0a  (VsIdFormat));..
23690 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
236a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
236b0 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
236c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
236d0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
236e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
236f0 20 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72    RegistryHelper
23700 2e 53 65 74 56 61 6c 75 65 28 0d 0a 20 20 20 20  .SetValue(..    
23710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23720 20 20 20 20 20 20 20 20 64 61 74 61 50 72 6f 76          dataProv
23730 69 64 65 72 4b 65 79 2c 20 6e 75 6c 6c 2c 20 44  iderKey, null, D
23740 65 73 63 72 69 70 74 69 6f 6e 2c 20 77 68 61 74  escription, what
23750 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  If,..           
23760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23770 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20   verbose);....  
23780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23790 20 20 20 20 20 20 52 65 67 69 73 74 72 79 48 65        RegistryHe
237a0 6c 70 65 72 2e 53 65 74 56 61 6c 75 65 28 0d 0a  lper.SetValue(..
237b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
237c0 20 20 20 20 20 20 20 20 20 20 20 20 64 61 74 61              data
237d0 50 72 6f 76 69 64 65 72 4b 65 79 2c 20 22 49 6e  ProviderKey, "In
237e0 76 61 72 69 61 6e 74 4e 61 6d 65 22 2c 20 49 6e  variantName", In
237f0 76 61 72 69 61 6e 74 4e 61 6d 65 2c 0d 0a 20 20  variantName,..  
23800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23810 20 20 20 20 20 20 20 20 20 20 77 68 61 74 49 66            whatIf
23820 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20  , verbose);.... 
23830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23840 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79 48         RegistryH
23850 65 6c 70 65 72 2e 53 65 74 56 61 6c 75 65 28 0d  elper.SetValue(.
23860 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
23870 20 20 20 20 20 20 20 20 20 20 20 20 20 64 61 74               dat
23880 61 50 72 6f 76 69 64 65 72 4b 65 79 2c 20 22 54  aProviderKey, "T
23890 65 63 68 6e 6f 6c 6f 67 79 22 2c 0d 0a 20 20 20  echnology",..   
238a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
238b0 20 20 20 20 20 20 20 20 20 70 61 63 6b 61 67 65           package
238c0 2e 41 64 6f 4e 65 74 54 65 63 68 6e 6f 6c 6f 67  .AdoNetTechnolog
238d0 79 49 64 2e 54 6f 53 74 72 69 6e 67 28 56 73 49  yId.ToString(VsI
238e0 64 46 6f 72 6d 61 74 29 2c 0d 0a 20 20 20 20 20  dFormat),..     
238f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23900 20 20 20 20 20 20 20 77 68 61 74 49 66 2c 20 76         whatIf, v
23910 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20  erbose);....    
23920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23930 20 20 20 20 52 65 67 69 73 74 72 79 48 65 6c 70      RegistryHelp
23940 65 72 2e 53 65 74 56 61 6c 75 65 28 0d 0a 20 20  er.SetValue(..  
23950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23960 20 20 20 20 20 20 20 20 20 20 64 61 74 61 50 72            dataPr
23970 6f 76 69 64 65 72 4b 65 79 2c 20 22 43 6f 64 65  oviderKey, "Code
23980 42 61 73 65 22 2c 20 66 69 6c 65 4e 61 6d 65 2c  Base", fileName,
23990 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20   whatIf,..      
239a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
239b0 20 20 20 20 20 20 76 65 72 62 6f 73 65 29 3b 0d        verbose);.
239c0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
239d0 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73             Regis
239e0 74 72 79 48 65 6c 70 65 72 2e 53 65 74 56 61 6c  tryHelper.SetVal
239f0 75 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue(..           
23a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23a10 20 64 61 74 61 50 72 6f 76 69 64 65 72 4b 65 79   dataProviderKey
23a20 2c 20 22 46 61 63 74 6f 72 79 53 65 72 76 69 63  , "FactoryServic
23a30 65 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e",..           
23a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23a50 20 70 61 63 6b 61 67 65 2e 53 65 72 76 69 63 65   package.Service
23a60 49 64 2e 54 6f 53 74 72 69 6e 67 28 56 73 49 64  Id.ToString(VsId
23a70 46 6f 72 6d 61 74 29 2c 20 77 68 61 74 49 66 2c  Format), whatIf,
23a80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
23a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76 65                ve
23aa0 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  rbose);....     
23ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23ac0 20 20 20 52 65 67 69 73 74 72 79 48 65 6c 70 65     RegistryHelpe
23ad0 72 2e 43 72 65 61 74 65 53 75 62 4b 65 79 28 64  r.CreateSubKey(d
23ae0 61 74 61 50 72 6f 76 69 64 65 72 4b 65 79 2c 0d  ataProviderKey,.
23af0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
23b00 20 20 20 20 20 20 20 20 20 20 20 20 20 22 53 75               "Su
23b10 70 70 6f 72 74 65 64 4f 62 6a 65 63 74 73 5c 5c  pportedObjects\\
23b20 44 61 74 61 43 6f 6e 6e 65 63 74 69 6f 6e 55 49  DataConnectionUI
23b30 43 6f 6e 74 72 6f 6c 22 2c 0d 0a 20 20 20 20 20  Control",..     
23b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23b50 20 20 20 20 20 20 20 77 68 61 74 49 66 2c 20 76         whatIf, v
23b60 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20  erbose);....    
23b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23b80 20 20 20 20 52 65 67 69 73 74 72 79 48 65 6c 70      RegistryHelp
23b90 65 72 2e 43 72 65 61 74 65 53 75 62 4b 65 79 28  er.CreateSubKey(
23ba0 64 61 74 61 50 72 6f 76 69 64 65 72 4b 65 79 2c  dataProviderKey,
23bb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
23bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 53                "S
23bd0 75 70 70 6f 72 74 65 64 4f 62 6a 65 63 74 73 5c  upportedObjects\
23be0 5c 44 61 74 61 43 6f 6e 6e 65 63 74 69 6f 6e 50  \DataConnectionP
23bf0 72 6f 70 65 72 74 69 65 73 22 2c 0d 0a 20 20 20  roperties",..   
23c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23c10 20 20 20 20 20 20 20 20 20 77 68 61 74 49 66 2c           whatIf,
23c20 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20   verbose);....  
23c30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23c40 20 20 20 20 20 20 52 65 67 69 73 74 72 79 48 65        RegistryHe
23c50 6c 70 65 72 2e 43 72 65 61 74 65 53 75 62 4b 65  lper.CreateSubKe
23c60 79 28 64 61 74 61 50 72 6f 76 69 64 65 72 4b 65  y(dataProviderKe
23c70 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y,..            
23c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23c90 22 53 75 70 70 6f 72 74 65 64 4f 62 6a 65 63 74  "SupportedObject
23ca0 73 5c 5c 44 61 74 61 43 6f 6e 6e 65 63 74 69 6f  s\\DataConnectio
23cb0 6e 53 75 70 70 6f 72 74 22 2c 20 77 68 61 74 49  nSupport", whatI
23cc0 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f,..            
23cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23ce0 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20  verbose);....   
23cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23d00 20 20 20 20 20 52 65 67 69 73 74 72 79 48 65 6c       RegistryHel
23d10 70 65 72 2e 43 72 65 61 74 65 53 75 62 4b 65 79  per.CreateSubKey
23d20 28 64 61 74 61 50 72 6f 76 69 64 65 72 4b 65 79  (dataProviderKey
23d30 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
23d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
23d50 53 75 70 70 6f 72 74 65 64 4f 62 6a 65 63 74 73  SupportedObjects
23d60 5c 5c 44 61 74 61 4f 62 6a 65 63 74 53 75 70 70  \\DataObjectSupp
23d70 6f 72 74 22 2c 20 77 68 61 74 49 66 2c 0d 0a 20  ort", whatIf,.. 
23d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23d90 20 20 20 20 20 20 20 20 20 20 20 76 65 72 62 6f             verbo
23da0 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  se);....        
23db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23dc0 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 43  RegistryHelper.C
23dd0 72 65 61 74 65 53 75 62 4b 65 79 28 64 61 74 61  reateSubKey(data
23de0 50 72 6f 76 69 64 65 72 4b 65 79 2c 0d 0a 20 20  ProviderKey,..  
23df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23e00 20 20 20 20 20 20 20 20 20 20 22 53 75 70 70 6f            "Suppo
23e10 72 74 65 64 4f 62 6a 65 63 74 73 5c 5c 44 61 74  rtedObjects\\Dat
23e20 61 56 69 65 77 53 75 70 70 6f 72 74 22 2c 20 77  aViewSupport", w
23e30 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20  hatIf,..        
23e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23e50 20 20 20 20 76 65 72 62 6f 73 65 29 3b 0d 0a 20      verbose);.. 
23e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23e70 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
23e80 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
23e90 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
23ea0 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75        return tru
23eb0 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d  e;..        }...
23ec0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
23ed0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23ee0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23ef0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23f00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23f10 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  ....        priv
23f20 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f 6c 20  ate static bool 
23f30 52 65 6d 6f 76 65 56 73 44 61 74 61 50 72 6f 76  RemoveVsDataProv
23f40 69 64 65 72 28 0d 0a 20 20 20 20 20 20 20 20 20  ider(..         
23f50 20 20 20 52 65 67 69 73 74 72 79 4b 65 79 20 72     RegistryKey r
23f60 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20  ootKey,..       
23f70 20 20 20 20 20 56 65 72 73 69 6f 6e 20 76 73 56       Version vsV
23f80 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20  ersion,..       
23f90 20 20 20 20 20 50 61 63 6b 61 67 65 20 70 61 63       Package pac
23fa0 6b 61 67 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  kage,..         
23fb0 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d     bool whatIf,.
23fc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
23fd0 6c 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20  l verbose,..    
23fe0 20 20 20 20 20 20 20 20 72 65 66 20 73 74 72 69          ref stri
23ff0 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20  ng error..      
24000 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
24010 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
24020 69 66 20 28 76 73 56 65 72 73 69 6f 6e 20 3d 3d  if (vsVersion ==
24030 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
24040 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
24050 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22         error = "
24060 69 6e 76 61 6c 69 64 20 56 53 20 76 65 72 73 69  invalid VS versi
24070 6f 6e 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  on";..          
24080 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
24090 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se;..           
240a0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
240b0 20 20 73 74 72 69 6e 67 20 6b 65 79 4e 61 6d 65    string keyName
240c0 20 3d 20 47 65 74 56 73 4b 65 79 4e 61 6d 65 28   = GetVsKeyName(
240d0 76 73 56 65 72 73 69 6f 6e 29 3b 0d 0a 0d 0a 20  vsVersion);.... 
240e0 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67             using
240f0 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65   (MockRegistryKe
24100 79 20 6b 65 79 20 3d 20 52 65 67 69 73 74 72 79  y key = Registry
24110 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62 4b 65  Helper.OpenSubKe
24120 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
24130 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c          rootKey,
24140 20 6b 65 79 4e 61 6d 65 2c 20 66 61 6c 73 65 2c   keyName, false,
24150 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65   whatIf, verbose
24160 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
24170 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
24180 20 20 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75     if (key == nu
24190 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
241a0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
241b0 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
241c0 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  r = String.Forma
241d0 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
241e0 20 20 20 20 20 20 20 20 20 20 20 20 22 63 6f 75              "cou
241f0 6c 64 20 6e 6f 74 20 6f 70 65 6e 20 72 65 67 69  ld not open regi
24200 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 7b  stry key: {0}\\{
24210 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  1}",..          
24220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f                ro
24230 6f 74 4b 65 79 2c 20 6b 65 79 4e 61 6d 65 29 3b  otKey, keyName);
24240 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
24250 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
24260 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
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 75 73 69 6e              usin
24290 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b  g (MockRegistryK
242a0 65 79 20 73 75 62 4b 65 79 20 3d 20 52 65 67 69  ey subKey = Regi
242b0 73 74 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53  stryHelper.OpenS
242c0 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20  ubKey(..        
242d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
242e0 6b 65 79 2c 20 22 44 61 74 61 50 72 6f 76 69 64  key, "DataProvid
242f0 65 72 73 22 2c 20 74 72 75 65 2c 20 77 68 61 74  ers", true, what
24300 49 66 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a 20  If, verbose)).. 
24310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
24320 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
24330 20 20 20 20 20 20 69 66 20 28 73 75 62 4b 65 79        if (subKey
24340 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
24350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
24360 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
24370 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
24380 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  = String.Format(
24390 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
243a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 63                "c
243b0 6f 75 6c 64 20 6e 6f 74 20 6f 70 65 6e 20 72 65  ould not open re
243c0 67 69 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c  gistry key: {0}\
243d0 5c 44 61 74 61 50 72 6f 76 69 64 65 72 73 22 2c  \DataProviders",
243e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
243f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65                ke
24400 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
24410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
24420 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
24430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24440 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
24450 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73             Regis
24460 74 72 79 48 65 6c 70 65 72 2e 44 65 6c 65 74 65  tryHelper.Delete
24470 53 75 62 4b 65 79 54 72 65 65 28 0d 0a 20 20 20  SubKeyTree(..   
24480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24490 20 20 20 20 20 73 75 62 4b 65 79 2c 20 70 61 63       subKey, pac
244a0 6b 61 67 65 2e 44 61 74 61 50 72 6f 76 69 64 65  kage.DataProvide
244b0 72 49 64 2e 54 6f 53 74 72 69 6e 67 28 56 73 49  rId.ToString(VsI
244c0 64 46 6f 72 6d 61 74 29 2c 0d 0a 20 20 20 20 20  dFormat),..     
244d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
244e0 20 20 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f     whatIf, verbo
244f0 73 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  se);..          
24500 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
24510 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
24520 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75        return tru
24530 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d  e;..        }...
24540 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
24550 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24560 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24570 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24580 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24590 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  ....        priv
245a0 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f 6c 20  ate static bool 
245b0 50 72 6f 63 65 73 73 56 73 44 61 74 61 50 72 6f  ProcessVsDataPro
245c0 76 69 64 65 72 28 0d 0a 20 20 20 20 20 20 20 20  vider(..        
245d0 20 20 20 20 52 65 67 69 73 74 72 79 4b 65 79 20      RegistryKey 
245e0 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20  rootKey,..      
245f0 20 20 20 20 20 20 56 65 72 73 69 6f 6e 20 76 73        Version vs
24600 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20  Version,..      
24610 20 20 20 20 20 20 50 61 63 6b 61 67 65 20 70 61        Package pa
24620 63 6b 61 67 65 2c 0d 0a 20 20 20 20 20 20 20 20  ckage,..        
24630 20 20 20 20 6f 62 6a 65 63 74 20 63 6c 69 65 6e      object clien
24640 74 44 61 74 61 2c 0d 0a 20 20 20 20 20 20 20 20  tData,..        
24650 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c      bool whatIf,
24660 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
24670 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20  ol verbose,..   
24680 20 20 20 20 20 20 20 20 20 72 65 66 20 73 74 72           ref str
24690 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20 20 20  ing error..     
246a0 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
246b0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
246c0 20 41 6e 79 50 61 69 72 3c 73 74 72 69 6e 67 2c   AnyPair<string,
246d0 20 62 6f 6f 6c 3e 20 70 61 69 72 20 3d 20 63 6c   bool> pair = cl
246e0 69 65 6e 74 44 61 74 61 20 61 73 20 41 6e 79 50  ientData as AnyP
246f0 61 69 72 3c 73 74 72 69 6e 67 2c 20 62 6f 6f 6c  air<string, bool
24700 3e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  >;....          
24710 20 20 69 66 20 28 70 61 69 72 20 3d 3d 20 6e 75    if (pair == nu
24720 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
24730 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
24740 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69 6e 76      error = "inv
24750 61 6c 69 64 20 56 53 20 63 61 6c 6c 62 61 63 6b  alid VS callback
24760 20 64 61 74 61 22 3b 0d 0a 20 20 20 20 20 20 20   data";..       
24770 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
24780 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
24790 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
247a0 20 20 20 20 20 69 66 20 28 70 61 69 72 2e 59 29       if (pair.Y)
247b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
247c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
247d0 20 72 65 74 75 72 6e 20 41 64 64 56 73 44 61 74   return AddVsDat
247e0 61 50 72 6f 76 69 64 65 72 28 0d 0a 20 20 20 20  aProvider(..    
247f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24800 72 6f 6f 74 4b 65 79 2c 20 76 73 56 65 72 73 69  rootKey, vsVersi
24810 6f 6e 2c 20 70 61 63 6b 61 67 65 2c 20 70 61 69  on, package, pai
24820 72 2e 58 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  r.X,..          
24830 20 20 20 20 20 20 20 20 20 20 77 68 61 74 49 66            whatIf
24840 2c 20 76 65 72 62 6f 73 65 2c 20 72 65 66 20 65  , verbose, ref e
24850 72 72 6f 72 29 3b 0d 0a 20 20 20 20 20 20 20 20  rror);..        
24860 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
24870 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20     else..       
24880 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
24890 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 52          return R
248a0 65 6d 6f 76 65 56 73 44 61 74 61 50 72 6f 76 69  emoveVsDataProvi
248b0 64 65 72 28 0d 0a 20 20 20 20 20 20 20 20 20 20  der(..          
248c0 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65            rootKe
248d0 79 2c 20 76 73 56 65 72 73 69 6f 6e 2c 20 70 61  y, vsVersion, pa
248e0 63 6b 61 67 65 2c 20 77 68 61 74 49 66 2c 0d 0a  ckage, whatIf,..
248f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24900 20 20 20 20 76 65 72 62 6f 73 65 2c 20 72 65 66      verbose, ref
24910 20 65 72 72 6f 72 29 3b 0d 0a 20 20 20 20 20 20   error);..      
24920 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
24930 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64   }..        #end
24940 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
24950 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
24960 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24970 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24980 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24990 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
249a0 20 20 20 20 20 23 72 65 67 69 6f 6e 20 56 69 73       #region Vis
249b0 75 61 6c 20 53 74 75 64 69 6f 20 50 61 63 6b 61  ual Studio Packa
249c0 67 65 20 48 61 6e 64 6c 69 6e 67 0d 0a 20 20 20  ge Handling..   
249d0 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61       private sta
249e0 74 69 63 20 76 6f 69 64 20 49 6e 69 74 69 61 6c  tic void Initial
249f0 69 7a 65 56 73 50 61 63 6b 61 67 65 28 0d 0a 20  izeVsPackage(.. 
24a00 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20 50             ref P
24a10 61 63 6b 61 67 65 20 70 61 63 6b 61 67 65 0d 0a  ackage package..
24a20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
24a30 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
24a40 20 20 20 20 20 20 69 66 20 28 70 61 63 6b 61 67        if (packag
24a50 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  e == null)..    
24a60 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
24a70 20 20 20 20 20 20 20 20 20 20 20 70 61 63 6b 61             packa
24a80 67 65 20 3d 20 6e 65 77 20 50 61 63 6b 61 67 65  ge = new Package
24a90 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ();....         
24aa0 20 20 20 20 20 20 20 70 61 63 6b 61 67 65 2e 41         package.A
24ab0 64 6f 4e 65 74 54 65 63 68 6e 6f 6c 6f 67 79 49  doNetTechnologyI
24ac0 64 20 3d 20 6e 65 77 20 47 75 69 64 28 0d 0a 20  d = new Guid(.. 
24ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24ae0 20 20 20 22 37 37 41 42 39 41 39 44 2d 37 38 42     "77AB9A9D-78B
24af0 39 2d 34 42 41 37 2d 39 31 41 43 2d 38 37 33 46  9-4BA7-91AC-873F
24b00 35 33 33 38 46 31 44 32 22 29 3b 0d 0a 0d 0a 20  5338F1D2");.... 
24b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70                 p
24b20 61 63 6b 61 67 65 2e 50 61 63 6b 61 67 65 49 64  ackage.PackageId
24b30 20 3d 20 6e 65 77 20 47 75 69 64 28 0d 0a 20 20   = new Guid(..  
24b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24b50 20 20 22 44 43 42 45 36 43 38 44 2d 30 45 35 37    "DCBE6C8D-0E57
24b60 2d 34 30 39 39 2d 41 31 38 33 2d 39 38 46 46 37  -4099-A183-98FF7
24b70 34 43 36 34 44 39 43 22 29 3b 0d 0a 0d 0a 20 20  4C64D9C");....  
24b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 61                pa
24b90 63 6b 61 67 65 2e 53 65 72 76 69 63 65 49 64 20  ckage.ServiceId 
24ba0 3d 20 6e 65 77 20 47 75 69 64 28 0d 0a 20 20 20  = new Guid(..   
24bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24bc0 20 22 44 43 42 45 36 43 38 44 2d 30 45 35 37 2d   "DCBE6C8D-0E57-
24bd0 34 30 39 39 2d 41 31 38 33 2d 39 38 46 46 37 34  4099-A183-98FF74
24be0 43 36 34 44 39 44 22 29 3b 0d 0a 0d 0a 20 20 20  C64D9D");....   
24bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 70 61 63               pac
24c00 6b 61 67 65 2e 44 61 74 61 53 6f 75 72 63 65 49  kage.DataSourceI
24c10 64 20 3d 20 6e 65 77 20 47 75 69 64 28 0d 0a 20  d = new Guid(.. 
24c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24c30 20 20 20 22 30 45 42 41 41 42 36 45 2d 43 41 38     "0EBAAB6E-CA8
24c40 30 2d 34 42 34 41 2d 38 44 44 46 2d 43 42 45 36  0-4B4A-8DDF-CBE6
24c50 42 46 30 35 38 43 37 31 22 29 3b 0d 0a 0d 0a 20  BF058C71");.... 
24c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70                 p
24c70 61 63 6b 61 67 65 2e 44 61 74 61 50 72 6f 76 69  ackage.DataProvi
24c80 64 65 72 49 64 20 3d 20 6e 65 77 20 47 75 69 64  derId = new Guid
24c90 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
24ca0 20 20 20 20 20 20 20 22 30 45 42 41 41 42 36 45         "0EBAAB6E
24cb0 2d 43 41 38 30 2d 34 42 34 41 2d 38 44 44 46 2d  -CA80-4B4A-8DDF-
24cc0 43 42 45 36 42 46 30 35 38 43 37 30 22 29 3b 0d  CBE6BF058C70");.
24cd0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
24ce0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
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 70 72 69 76 61 74 65 20          private 
24d50 73 74 61 74 69 63 20 62 6f 6f 6c 20 41 64 64 56  static bool AddV
24d60 73 50 61 63 6b 61 67 65 28 0d 0a 20 20 20 20 20  sPackage(..     
24d70 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79 4b         RegistryK
24d80 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20  ey rootKey,..   
24d90 20 20 20 20 20 20 20 20 20 56 65 72 73 69 6f 6e           Version
24da0 20 76 73 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20   vsVersion,..   
24db0 20 20 20 20 20 20 20 20 20 50 61 63 6b 61 67 65           Package
24dc0 20 70 61 63 6b 61 67 65 2c 0d 0a 20 20 20 20 20   package,..     
24dd0 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 66 69         string fi
24de0 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20  leName,..       
24df0 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66       bool whatIf
24e00 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
24e10 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20  ool verbose,..  
24e20 20 20 20 20 20 20 20 20 20 20 72 65 66 20 73 74            ref st
24e30 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20 20  ring error..    
24e40 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
24e50 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
24e60 20 20 69 66 20 28 76 73 56 65 72 73 69 6f 6e 20    if (vsVersion 
24e70 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
24e80 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
24e90 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
24ea0 20 22 69 6e 76 61 6c 69 64 20 56 53 20 76 65 72   "invalid VS ver
24eb0 73 69 6f 6e 22 3b 0d 0a 20 20 20 20 20 20 20 20  sion";..        
24ec0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
24ed0 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
24ee0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
24ef0 20 20 20 20 69 66 20 28 70 61 63 6b 61 67 65 20      if (package 
24f00 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
24f10 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
24f20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
24f30 20 22 69 6e 76 61 6c 69 64 20 56 53 20 70 61 63   "invalid VS pac
24f40 6b 61 67 65 22 3b 0d 0a 20 20 20 20 20 20 20 20  kage";..        
24f50 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
24f60 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
24f70 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
24f80 20 20 20 20 73 74 72 69 6e 67 20 6b 65 79 4e 61      string keyNa
24f90 6d 65 20 3d 20 47 65 74 56 73 4b 65 79 4e 61 6d  me = GetVsKeyNam
24fa0 65 28 76 73 56 65 72 73 69 6f 6e 29 3b 0d 0a 0d  e(vsVersion);...
24fb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69  .            usi
24fc0 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79  ng (MockRegistry
24fd0 4b 65 79 20 6b 65 79 20 3d 20 52 65 67 69 73 74  Key key = Regist
24fe0 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62  ryHelper.OpenSub
24ff0 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  Key(..          
25000 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65            rootKe
25010 79 2c 20 6b 65 79 4e 61 6d 65 2c 20 66 61 6c 73  y, keyName, fals
25020 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f  e, whatIf, verbo
25030 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  se))..          
25040 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
25050 20 20 20 20 20 69 66 20 28 6b 65 79 20 3d 3d 20       if (key == 
25060 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
25070 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
25080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
25090 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72  ror = String.For
250a0 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
250b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 63                "c
250c0 6f 75 6c 64 20 6e 6f 74 20 6f 70 65 6e 20 72 65  ould not open re
250d0 67 69 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c  gistry key: {0}\
250e0 5c 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20  \{1}",..        
250f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25100 72 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e 61 6d 65  rootKey, keyName
25110 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
25120 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
25130 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
25140 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
25150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 75 73                us
25160 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72  ing (MockRegistr
25170 79 4b 65 79 20 73 75 62 4b 65 79 20 3d 20 52 65  yKey subKey = Re
25180 67 69 73 74 72 79 48 65 6c 70 65 72 2e 4f 70 65  gistryHelper.Ope
25190 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20  nSubKey(..      
251a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
251b0 20 20 6b 65 79 2c 20 22 50 61 63 6b 61 67 65 73    key, "Packages
251c0 22 2c 20 74 72 75 65 2c 20 77 68 61 74 49 66 2c  ", true, whatIf,
251d0 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20   verbose))..    
251e0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
251f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25200 20 20 20 69 66 20 28 73 75 62 4b 65 79 20 3d 3d     if (subKey ==
25210 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
25220 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
25230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25240 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 53         error = S
25250 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
25260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25270 20 20 20 20 20 20 20 20 20 20 20 22 63 6f 75 6c             "coul
25280 64 20 6e 6f 74 20 6f 70 65 6e 20 72 65 67 69 73  d not open regis
25290 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 50 61  try key: {0}\\Pa
252a0 63 6b 61 67 65 73 22 2c 0d 0a 20 20 20 20 20 20  ckages",..      
252b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
252c0 20 20 20 20 20 20 6b 65 79 29 3b 0d 0a 0d 0a 20        key);.... 
252d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
252e0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
252f0 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lse;..          
25300 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
25310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25320 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65     using (MockRe
25330 67 69 73 74 72 79 4b 65 79 20 70 61 63 6b 61 67  gistryKey packag
25340 65 4b 65 79 20 3d 20 52 65 67 69 73 74 72 79 48  eKey = RegistryH
25350 65 6c 70 65 72 2e 43 72 65 61 74 65 53 75 62 4b  elper.CreateSubK
25360 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey(..           
25370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25380 20 73 75 62 4b 65 79 2c 20 70 61 63 6b 61 67 65   subKey, package
25390 2e 50 61 63 6b 61 67 65 49 64 2e 54 6f 53 74 72  .PackageId.ToStr
253a0 69 6e 67 28 56 73 49 64 46 6f 72 6d 61 74 29 2c  ing(VsIdFormat),
253b0 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20   whatIf,..      
253c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
253d0 20 20 20 20 20 20 76 65 72 62 6f 73 65 29 29 0d        verbose)).
253e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
253f0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
25400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25410 69 66 20 28 70 61 63 6b 61 67 65 4b 65 79 20 3d  if (packageKey =
25420 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
25430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25440 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
25450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25460 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46  error = String.F
25470 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
25480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25490 20 20 20 20 20 20 20 20 22 63 6f 75 6c 64 20 6e          "could n
254a0 6f 74 20 63 72 65 61 74 65 20 72 65 67 69 73 74  ot create regist
254b0 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 7b 31 7d  ry key: {0}\\{1}
254c0 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
254d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
254e0 20 20 20 20 6b 65 79 2c 20 70 61 63 6b 61 67 65      key, package
254f0 2e 50 61 63 6b 61 67 65 49 64 2e 54 6f 53 74 72  .PackageId.ToStr
25500 69 6e 67 28 56 73 49 64 46 6f 72 6d 61 74 29 29  ing(VsIdFormat))
25510 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
25520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25530 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
25540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25550 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
25560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25570 20 20 20 20 20 52 65 67 69 73 74 72 79 48 65 6c       RegistryHel
25580 70 65 72 2e 53 65 74 56 61 6c 75 65 28 70 61 63  per.SetValue(pac
25590 6b 61 67 65 4b 65 79 2c 20 6e 75 6c 6c 2c 20 53  kageKey, null, S
255a0 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
255b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
255c0 20 20 20 20 20 20 20 20 20 20 20 22 7b 30 7d 20             "{0} 
255d0 44 65 73 69 67 6e 65 72 20 50 61 63 6b 61 67 65  Designer Package
255e0 22 2c 20 50 72 6f 6a 65 63 74 4e 61 6d 65 29 2c  ", ProjectName),
255f0 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20   whatIf,..      
25600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25610 20 20 20 20 20 20 76 65 72 62 6f 73 65 29 3b 0d        verbose);.
25620 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
25630 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73             Regis
25640 74 72 79 48 65 6c 70 65 72 2e 53 65 74 56 61 6c  tryHelper.SetVal
25650 75 65 28 70 61 63 6b 61 67 65 4b 65 79 2c 20 22  ue(packageKey, "
25660 43 6c 61 73 73 22 2c 0d 0a 20 20 20 20 20 20 20  Class",..       
25670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25680 20 20 20 20 20 22 53 51 4c 69 74 65 2e 44 65 73       "SQLite.Des
25690 69 67 6e 65 72 2e 53 51 4c 69 74 65 50 61 63 6b  igner.SQLitePack
256a0 61 67 65 22 2c 20 77 68 61 74 49 66 2c 20 76 65  age", whatIf, ve
256b0 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  rbose);....     
256c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
256d0 20 20 20 52 65 67 69 73 74 72 79 48 65 6c 70 65     RegistryHelpe
256e0 72 2e 53 65 74 56 61 6c 75 65 28 70 61 63 6b 61  r.SetValue(packa
256f0 67 65 4b 65 79 2c 20 22 43 6f 64 65 42 61 73 65  geKey, "CodeBase
25700 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
25710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25720 66 69 6c 65 4e 61 6d 65 2c 20 77 68 61 74 49 66  fileName, whatIf
25730 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20  , verbose);.... 
25740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25750 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79 48         RegistryH
25760 65 6c 70 65 72 2e 53 65 74 56 61 6c 75 65 28 70  elper.SetValue(p
25770 61 63 6b 61 67 65 4b 65 79 2c 20 22 49 44 22 2c  ackageKey, "ID",
25780 20 34 30 30 2c 20 77 68 61 74 49 66 2c 0d 0a 20   400, whatIf,.. 
25790 20 20 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 20 76 65 72 62 6f             verbo
257b0 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  se);....        
257c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
257d0 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 53  RegistryHelper.S
257e0 65 74 56 61 6c 75 65 28 70 61 63 6b 61 67 65 4b  etValue(packageK
257f0 65 79 2c 20 22 49 6e 70 72 6f 63 53 65 72 76 65  ey, "InprocServe
25800 72 33 32 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  r32",..         
25810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25820 20 20 20 50 61 74 68 2e 43 6f 6d 62 69 6e 65 28     Path.Combine(
25830 45 6e 76 69 72 6f 6e 6d 65 6e 74 2e 53 79 73 74  Environment.Syst
25840 65 6d 44 69 72 65 63 74 6f 72 79 2c 0d 0a 20 20  emDirectory,..  
25850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 6d                "m
25870 73 63 6f 72 65 65 2e 64 6c 6c 22 29 2c 20 77 68  scoree.dll"), wh
25880 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d  atIf, verbose);.
25890 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
258a0 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73             Regis
258b0 74 72 79 48 65 6c 70 65 72 2e 53 65 74 56 61 6c  tryHelper.SetVal
258c0 75 65 28 70 61 63 6b 61 67 65 4b 65 79 2c 20 22  ue(packageKey, "
258d0 43 6f 6d 70 61 6e 79 4e 61 6d 65 22 2c 0d 0a 20  CompanyName",.. 
258e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
258f0 20 20 20 20 20 20 20 20 20 20 20 22 68 74 74 70             "http
25900 3a 2f 2f 73 79 73 74 65 6d 2e 64 61 74 61 2e 73  ://system.data.s
25910 71 6c 69 74 65 2e 6f 72 67 2f 22 2c 20 77 68 61  qlite.org/", wha
25920 74 49 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a  tIf, verbose);..
25930 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
25940 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74            Regist
25950 72 79 48 65 6c 70 65 72 2e 53 65 74 56 61 6c 75  ryHelper.SetValu
25960 65 28 70 61 63 6b 61 67 65 4b 65 79 2c 20 22 4d  e(packageKey, "M
25970 69 6e 45 64 69 74 69 6f 6e 22 2c 0d 0a 20 20 20  inEdition",..   
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 20 22 73 74 61 6e 64 61           "standa
259a0 72 64 22 2c 20 77 68 61 74 49 66 2c 20 76 65 72  rd", whatIf, ver
259b0 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  bose);....      
259c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
259d0 20 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72    RegistryHelper
259e0 2e 53 65 74 56 61 6c 75 65 28 70 61 63 6b 61 67  .SetValue(packag
259f0 65 4b 65 79 2c 20 22 50 72 6f 64 75 63 74 4e 61  eKey, "ProductNa
25a00 6d 65 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  me",..          
25a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25a20 20 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28    String.Format(
25a30 22 7b 30 7d 20 44 65 73 69 67 6e 65 72 20 50 61  "{0} Designer Pa
25a40 63 6b 61 67 65 22 2c 20 50 72 6f 6a 65 63 74 4e  ckage", ProjectN
25a50 61 6d 65 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  ame),..         
25a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25a70 20 20 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f     whatIf, verbo
25a80 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  se);....        
25a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25aa0 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 53  RegistryHelper.S
25ab0 65 74 56 61 6c 75 65 28 70 61 63 6b 61 67 65 4b  etValue(packageK
25ac0 65 79 2c 20 22 50 72 6f 64 75 63 74 56 65 72 73  ey, "ProductVers
25ad0 69 6f 6e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  ion",..         
25ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25af0 20 20 20 22 31 2e 30 22 2c 20 77 68 61 74 49 66     "1.0", whatIf
25b00 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20  , verbose);.... 
25b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25b20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 4d 6f         using (Mo
25b30 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 74 6f  ckRegistryKey to
25b40 6f 6c 62 6f 78 4b 65 79 20 3d 20 52 65 67 69 73  olboxKey = Regis
25b50 74 72 79 48 65 6c 70 65 72 2e 43 72 65 61 74 65  tryHelper.Create
25b60 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20  SubKey(..       
25b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25b80 20 20 20 20 20 20 20 20 20 70 61 63 6b 61 67 65           package
25b90 4b 65 79 2c 20 22 54 6f 6f 6c 62 6f 78 22 2c 20  Key, "Toolbox", 
25ba0 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29  whatIf, verbose)
25bb0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
25bc0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
25bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25be0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 74 6f            if (to
25bf0 6f 6c 62 6f 78 4b 65 79 20 3d 3d 20 6e 75 6c 6c  olboxKey == null
25c00 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
25c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
25c20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
25c30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25c40 20 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67    error = String
25c50 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
25c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 63                "c
25c80 6f 75 6c 64 20 6e 6f 74 20 63 72 65 61 74 65 20  ould not create 
25c90 72 65 67 69 73 74 72 79 20 6b 65 79 3a 20 7b 30  registry key: {0
25ca0 7d 5c 5c 54 6f 6f 6c 62 6f 78 22 2c 0d 0a 20 20  }\\Toolbox",..  
25cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25cd0 20 20 70 61 63 6b 61 67 65 4b 65 79 29 3b 0d 0a    packageKey);..
25ce0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
25cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25d00 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
25d10 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
25d20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
25d30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
25d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65                Re
25d50 67 69 73 74 72 79 48 65 6c 70 65 72 2e 53 65 74  gistryHelper.Set
25d60 56 61 6c 75 65 28 0d 0a 20 20 20 20 20 20 20 20  Value(..        
25d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25d80 20 20 20 20 20 20 20 20 74 6f 6f 6c 62 6f 78 4b          toolboxK
25d90 65 79 2c 20 22 44 65 66 61 75 6c 74 20 49 74 65  ey, "Default Ite
25da0 6d 73 22 2c 20 33 2c 20 77 68 61 74 49 66 2c 0d  ms", 3, whatIf,.
25db0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
25dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25dd0 20 76 65 72 62 6f 73 65 29 3b 0d 0a 20 20 20 20   verbose);..    
25de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25df0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
25e00 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
25e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
25e20 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
25e30 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65     using (MockRe
25e40 67 69 73 74 72 79 4b 65 79 20 73 75 62 4b 65 79  gistryKey subKey
25e50 20 3d 20 52 65 67 69 73 74 72 79 48 65 6c 70 65   = RegistryHelpe
25e60 72 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20  r.OpenSubKey(.. 
25e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25e80 20 20 20 20 20 20 20 6b 65 79 2c 20 22 4d 65 6e         key, "Men
25e90 75 73 22 2c 20 74 72 75 65 2c 20 77 68 61 74 49  us", true, whatI
25ea0 66 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20  f, verbose))..  
25eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
25ec0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
25ed0 20 20 20 20 20 69 66 20 28 73 75 62 4b 65 79 20       if (subKey 
25ee0 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
25ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
25f00 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
25f10 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
25f20 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
25f30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
25f40 20 20 20 20 20 20 20 20 20 20 20 20 20 22 63 6f               "co
25f50 75 6c 64 20 6e 6f 74 20 6f 70 65 6e 20 72 65 67  uld not open reg
25f60 69 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c  istry key: {0}\\
25f70 4d 65 6e 75 73 22 2c 0d 0a 20 20 20 20 20 20 20  Menus",..       
25f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25f90 20 20 20 20 20 6b 65 79 29 3b 0d 0a 0d 0a 20 20       key);....  
25fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25fb0 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
25fc0 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se;..           
25fd0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
25fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25ff0 20 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72    RegistryHelper
26000 2e 53 65 74 56 61 6c 75 65 28 0d 0a 20 20 20 20  .SetValue(..    
26010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26020 20 20 20 20 73 75 62 4b 65 79 2c 20 70 61 63 6b      subKey, pack
26030 61 67 65 2e 50 61 63 6b 61 67 65 49 64 2e 54 6f  age.PackageId.To
26040 53 74 72 69 6e 67 28 56 73 49 64 46 6f 72 6d 61  String(VsIdForma
26050 74 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  t),..           
26060 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2c 20               ", 
26070 31 30 30 30 2c 20 33 22 2c 20 77 68 61 74 49 66  1000, 3", whatIf
26080 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a 20 20 20  , verbose);..   
26090 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
260a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
260b0 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67    using (MockReg
260c0 69 73 74 72 79 4b 65 79 20 73 75 62 4b 65 79 20  istryKey subKey 
260d0 3d 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72  = RegistryHelper
260e0 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20  .OpenSubKey(..  
260f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26100 20 20 20 20 20 20 6b 65 79 2c 20 22 53 65 72 76        key, "Serv
26110 69 63 65 73 22 2c 20 74 72 75 65 2c 20 77 68 61  ices", true, wha
26120 74 49 66 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a  tIf, verbose))..
26130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26140 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
26150 20 20 20 20 20 20 20 69 66 20 28 73 75 62 4b 65         if (subKe
26160 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  y == null)..    
26170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26180 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
26190 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
261a0 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74   = String.Format
261b0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
261c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
261d0 63 6f 75 6c 64 20 6e 6f 74 20 6f 70 65 6e 20 72  could not open r
261e0 65 67 69 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d  egistry key: {0}
261f0 5c 5c 53 65 72 76 69 63 65 73 22 2c 0d 0a 20 20  \\Services",..  
26200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26210 20 20 20 20 20 20 20 20 20 20 6b 65 79 29 3b 0d            key);.
26220 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
26230 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
26240 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
26250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
26260 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
26270 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 4d 6f         using (Mo
26280 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 73 65  ckRegistryKey se
26290 72 76 69 63 65 4b 65 79 20 3d 20 52 65 67 69 73  rviceKey = Regis
262a0 74 72 79 48 65 6c 70 65 72 2e 43 72 65 61 74 65  tryHelper.Create
262b0 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20  SubKey(..       
262c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
262d0 20 20 20 20 20 73 75 62 4b 65 79 2c 20 70 61 63       subKey, pac
262e0 6b 61 67 65 2e 53 65 72 76 69 63 65 49 64 2e 54  kage.ServiceId.T
262f0 6f 53 74 72 69 6e 67 28 56 73 49 64 46 6f 72 6d  oString(VsIdForm
26300 61 74 29 2c 20 77 68 61 74 49 66 2c 0d 0a 20 20  at), whatIf,..  
26310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26320 20 20 20 20 20 20 20 20 20 20 76 65 72 62 6f 73            verbos
26330 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e))..           
26340 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
26350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26360 20 20 20 20 69 66 20 28 73 65 72 76 69 63 65 4b      if (serviceK
26370 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ey == null)..   
26380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26390 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
263a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
263b0 20 20 20 20 65 72 72 6f 72 20 3d 20 53 74 72 69      error = Stri
263c0 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
263d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
263e0 20 20 20 20 20 20 20 20 20 20 20 20 22 63 6f 75              "cou
263f0 6c 64 20 6e 6f 74 20 63 72 65 61 74 65 20 72 65  ld not create re
26400 67 69 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c  gistry key: {0}\
26410 5c 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20  \{1}",..        
26420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26430 20 20 20 20 20 20 20 20 6b 65 79 2c 20 70 61 63          key, pac
26440 6b 61 67 65 2e 53 65 72 76 69 63 65 49 64 2e 54  kage.ServiceId.T
26450 6f 53 74 72 69 6e 67 28 56 73 49 64 46 6f 72 6d  oString(VsIdForm
26460 61 74 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  at));....       
26470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26480 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
26490 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
264a0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
264b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
264c0 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72           Registr
264d0 79 48 65 6c 70 65 72 2e 53 65 74 56 61 6c 75 65  yHelper.SetValue
264e0 28 73 65 72 76 69 63 65 4b 65 79 2c 20 6e 75 6c  (serviceKey, nul
264f0 6c 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l,..            
26500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26510 70 61 63 6b 61 67 65 2e 50 61 63 6b 61 67 65 49  package.PackageI
26520 64 2e 54 6f 53 74 72 69 6e 67 28 56 73 49 64 46  d.ToString(VsIdF
26530 6f 72 6d 61 74 29 2c 20 77 68 61 74 49 66 2c 0d  ormat), whatIf,.
26540 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
26550 20 20 20 20 20 20 20 20 20 20 20 20 20 76 65 72               ver
26560 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  bose);....      
26570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26580 20 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72    RegistryHelper
26590 2e 53 65 74 56 61 6c 75 65 28 73 65 72 76 69 63  .SetValue(servic
265a0 65 4b 65 79 2c 20 22 4e 61 6d 65 22 2c 0d 0a 20  eKey, "Name",.. 
265b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
265c0 20 20 20 20 20 20 20 20 20 20 20 53 74 72 69 6e             Strin
265d0 67 2e 46 6f 72 6d 61 74 28 22 7b 30 7d 20 44 65  g.Format("{0} De
265e0 73 69 67 6e 65 72 20 53 65 72 76 69 63 65 22 2c  signer Service",
265f0 20 50 72 6f 6a 65 63 74 4e 61 6d 65 29 2c 0d 0a   ProjectName),..
26600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26610 20 20 20 20 20 20 20 20 20 20 20 20 77 68 61 74              what
26620 49 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a 20  If, verbose);.. 
26630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26640 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
26650 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
26660 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
26670 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75        return tru
26680 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d  e;..        }...
26690 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
266a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
266b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
266c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
266d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
266e0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  ....        priv
266f0 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f 6c 20  ate static bool 
26700 52 65 6d 6f 76 65 56 73 50 61 63 6b 61 67 65 28  RemoveVsPackage(
26710 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 52 65  ..            Re
26720 67 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65  gistryKey rootKe
26730 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y,..            
26740 56 65 72 73 69 6f 6e 20 76 73 56 65 72 73 69 6f  Version vsVersio
26750 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n,..            
26760 50 61 63 6b 61 67 65 20 70 61 63 6b 61 67 65 2c  Package package,
26770 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
26780 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20  ol whatIf,..    
26790 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72          bool ver
267a0 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  bose,..         
267b0 20 20 20 72 65 66 20 73 74 72 69 6e 67 20 65 72     ref string er
267c0 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ror..           
267d0 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20   )..        {.. 
267e0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76             if (v
267f0 73 56 65 72 73 69 6f 6e 20 3d 3d 20 6e 75 6c 6c  sVersion == null
26800 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
26810 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
26820 20 20 65 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c    error = "inval
26830 69 64 20 56 53 20 76 65 72 73 69 6f 6e 22 3b 0d  id VS version";.
26840 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
26850 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
26860 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
26870 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
26880 28 70 61 63 6b 61 67 65 20 3d 3d 20 6e 75 6c 6c  (package == null
26890 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
268a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
268b0 20 20 65 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c    error = "inval
268c0 69 64 20 56 53 20 70 61 63 6b 61 67 65 22 3b 0d  id VS package";.
268d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
268e0 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
268f0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
26900 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72  .            str
26910 69 6e 67 20 6b 65 79 4e 61 6d 65 20 3d 20 47 65  ing keyName = Ge
26920 74 56 73 4b 65 79 4e 61 6d 65 28 76 73 56 65 72  tVsKeyName(vsVer
26930 73 69 6f 6e 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  sion);....      
26940 20 20 20 20 20 20 75 73 69 6e 67 20 28 4d 6f 63        using (Moc
26950 6b 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65 79  kRegistryKey key
26960 20 3d 20 52 65 67 69 73 74 72 79 48 65 6c 70 65   = RegistryHelpe
26970 72 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20  r.OpenSubKey(.. 
26980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26990 20 20 20 72 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e     rootKey, keyN
269a0 61 6d 65 2c 20 66 61 6c 73 65 2c 20 77 68 61 74  ame, false, what
269b0 49 66 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a 20  If, verbose)).. 
269c0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
269d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
269e0 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a   (key == null)..
269f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26a00 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
26a10 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 53         error = S
26a20 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
26a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26a40 20 20 20 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f         "could no
26a50 74 20 6f 70 65 6e 20 72 65 67 69 73 74 72 79 20  t open registry 
26a60 6b 65 79 3a 20 7b 30 7d 5c 5c 7b 31 7d 22 2c 0d  key: {0}\\{1}",.
26a70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
26a80 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79           rootKey
26a90 2c 20 6b 65 79 4e 61 6d 65 29 3b 0d 0a 0d 0a 20  , keyName);.... 
26aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26ab0 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
26ac0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
26ad0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
26ae0 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 4d 6f         using (Mo
26af0 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 73 75  ckRegistryKey su
26b00 62 4b 65 79 20 3d 20 52 65 67 69 73 74 72 79 48  bKey = RegistryH
26b10 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62 4b 65 79  elper.OpenSubKey
26b20 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
26b30 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 2c 20             key, 
26b40 22 50 61 63 6b 61 67 65 73 22 2c 20 74 72 75 65  "Packages", true
26b50 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73  , whatIf, verbos
26b60 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e))..           
26b70 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
26b80 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
26b90 73 75 62 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d  subKey == null).
26ba0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
26bb0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
26bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26bd0 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46  error = String.F
26be0 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
26bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26c00 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20 6f      "could not o
26c10 70 65 6e 20 72 65 67 69 73 74 72 79 20 6b 65 79  pen registry key
26c20 3a 20 7b 30 7d 5c 5c 50 61 63 6b 61 67 65 73 22  : {0}\\Packages"
26c30 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
26c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b                 k
26c50 65 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ey);....        
26c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26c70 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20  return false;.. 
26c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26c90 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
26ca0 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69              Regi
26cb0 73 74 72 79 48 65 6c 70 65 72 2e 44 65 6c 65 74  stryHelper.Delet
26cc0 65 53 75 62 4b 65 79 54 72 65 65 28 0d 0a 20 20  eSubKeyTree(..  
26cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26ce0 20 20 20 20 20 20 6b 65 79 2c 20 70 61 63 6b 61        key, packa
26cf0 67 65 2e 50 61 63 6b 61 67 65 49 64 2e 54 6f 53  ge.PackageId.ToS
26d00 74 72 69 6e 67 28 56 73 49 64 46 6f 72 6d 61 74  tring(VsIdFormat
26d10 29 2c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20  ), whatIf,..    
26d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26d30 20 20 20 20 76 65 72 62 6f 73 65 29 3b 0d 0a 20      verbose);.. 
26d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
26d50 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
26d60 20 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52      using (MockR
26d70 65 67 69 73 74 72 79 4b 65 79 20 73 75 62 4b 65  egistryKey subKe
26d80 79 20 3d 20 52 65 67 69 73 74 72 79 48 65 6c 70  y = RegistryHelp
26d90 65 72 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a  er.OpenSubKey(..
26da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26db0 20 20 20 20 20 20 20 20 6b 65 79 2c 20 22 4d 65          key, "Me
26dc0 6e 75 73 22 2c 20 74 72 75 65 2c 20 77 68 61 74  nus", true, what
26dd0 49 66 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a 20  If, verbose)).. 
26de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
26df0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
26e00 20 20 20 20 20 20 69 66 20 28 73 75 62 4b 65 79        if (subKey
26e10 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
26e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
26e30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
26e40 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
26e50 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  = String.Format(
26e60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
26e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 63                "c
26e80 6f 75 6c 64 20 6e 6f 74 20 6f 70 65 6e 20 72 65  ould not open re
26e90 67 69 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c  gistry key: {0}\
26ea0 5c 4d 65 6e 75 73 22 2c 0d 0a 20 20 20 20 20 20  \Menus",..      
26eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26ec0 20 20 20 20 20 20 6b 65 79 29 3b 0d 0a 0d 0a 20        key);.... 
26ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26ee0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
26ef0 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lse;..          
26f00 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
26f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26f20 20 20 20 52 65 67 69 73 74 72 79 48 65 6c 70 65     RegistryHelpe
26f30 72 2e 44 65 6c 65 74 65 56 61 6c 75 65 28 0d 0a  r.DeleteValue(..
26f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26f50 20 20 20 20 20 20 20 20 73 75 62 4b 65 79 2c 20          subKey, 
26f60 70 61 63 6b 61 67 65 2e 50 61 63 6b 61 67 65 49  package.PackageI
26f70 64 2e 54 6f 53 74 72 69 6e 67 28 56 73 49 64 46  d.ToString(VsIdF
26f80 6f 72 6d 61 74 29 2c 20 77 68 61 74 49 66 2c 0d  ormat), whatIf,.
26f90 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
26fa0 20 20 20 20 20 20 20 20 20 76 65 72 62 6f 73 65           verbose
26fb0 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
26fc0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
26fd0 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28           using (
26fe0 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20  MockRegistryKey 
26ff0 73 75 62 4b 65 79 20 3d 20 52 65 67 69 73 74 72  subKey = Registr
27000 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62 4b  yHelper.OpenSubK
27010 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey(..           
27020 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79               key
27030 2c 20 22 53 65 72 76 69 63 65 73 22 2c 20 74 72  , "Services", tr
27040 75 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62  ue, whatIf, verb
27050 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ose))..         
27060 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
27070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
27080 20 28 73 75 62 4b 65 79 20 3d 3d 20 6e 75 6c 6c   (subKey == null
27090 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
270a0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
270b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
270c0 20 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67    error = String
270d0 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
270e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
270f0 20 20 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74        "could not
27100 20 6f 70 65 6e 20 72 65 67 69 73 74 72 79 20 6b   open registry k
27110 65 79 3a 20 7b 30 7d 5c 5c 53 65 72 76 69 63 65  ey: {0}\\Service
27120 73 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s",..           
27130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27140 20 6b 65 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20   key);....      
27150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27160 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
27170 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
27180 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
27190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65                Re
271a0 67 69 73 74 72 79 48 65 6c 70 65 72 2e 44 65 6c  gistryHelper.Del
271b0 65 74 65 53 75 62 4b 65 79 54 72 65 65 28 0d 0a  eteSubKeyTree(..
271c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
271d0 20 20 20 20 20 20 20 20 73 75 62 4b 65 79 2c 20          subKey, 
271e0 70 61 63 6b 61 67 65 2e 53 65 72 76 69 63 65 49  package.ServiceI
271f0 64 2e 54 6f 53 74 72 69 6e 67 28 56 73 49 64 46  d.ToString(VsIdF
27200 6f 72 6d 61 74 29 2c 20 77 68 61 74 49 66 2c 0d  ormat), whatIf,.
27210 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
27220 20 20 20 20 20 20 20 20 20 76 65 72 62 6f 73 65           verbose
27230 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
27240 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
27250 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
27260 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b      return true;
27270 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
27280 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
27290 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
272a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
272b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
272c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
272d0 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
272e0 65 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 50 72  e static bool Pr
272f0 6f 63 65 73 73 56 73 50 61 63 6b 61 67 65 28 0d  ocessVsPackage(.
27300 0a 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67  .            Reg
27310 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79  istryKey rootKey
27320 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 56  ,..            V
27330 65 72 73 69 6f 6e 20 76 73 56 65 72 73 69 6f 6e  ersion vsVersion
27340 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 50  ,..            P
27350 61 63 6b 61 67 65 20 70 61 63 6b 61 67 65 2c 0d  ackage package,.
27360 0a 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a  .            obj
27370 65 63 74 20 63 6c 69 65 6e 74 44 61 74 61 2c 0d  ect clientData,.
27380 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
27390 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20  l whatIf,..     
273a0 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62         bool verb
273b0 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ose,..          
273c0 20 20 72 65 66 20 73 74 72 69 6e 67 20 65 72 72    ref string err
273d0 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  or..            
273e0 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
273f0 20 20 20 20 20 20 20 20 20 20 41 6e 79 50 61 69            AnyPai
27400 72 3c 73 74 72 69 6e 67 2c 20 62 6f 6f 6c 3e 20  r<string, bool> 
27410 70 61 69 72 20 3d 20 63 6c 69 65 6e 74 44 61 74  pair = clientDat
27420 61 20 61 73 20 41 6e 79 50 61 69 72 3c 73 74 72  a as AnyPair<str
27430 69 6e 67 2c 20 62 6f 6f 6c 3e 3b 0d 0a 0d 0a 20  ing, bool>;.... 
27440 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 70             if (p
27450 61 69 72 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  air == null)..  
27460 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
27470 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
27480 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 56 53  or = "invalid VS
27490 20 63 61 6c 6c 62 61 63 6b 20 64 61 74 61 22 3b   callback data";
274a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
274b0 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
274c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
274d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
274e0 20 28 70 61 69 72 2e 59 29 0d 0a 20 20 20 20 20   (pair.Y)..     
274f0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
27500 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
27510 20 41 64 64 56 73 50 61 63 6b 61 67 65 28 0d 0a   AddVsPackage(..
27520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27530 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 76 73 56      rootKey, vsV
27540 65 72 73 69 6f 6e 2c 20 70 61 63 6b 61 67 65 2c  ersion, package,
27550 20 70 61 69 72 2e 58 2c 20 77 68 61 74 49 66 2c   pair.X, whatIf,
27560 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
27570 20 20 20 20 20 20 76 65 72 62 6f 73 65 2c 20 72        verbose, r
27580 65 66 20 65 72 72 6f 72 29 3b 0d 0a 20 20 20 20  ef error);..    
27590 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
275a0 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20         else..   
275b0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
275c0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
275d0 72 6e 20 52 65 6d 6f 76 65 56 73 50 61 63 6b 61  rn RemoveVsPacka
275e0 67 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ge(..           
275f0 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79           rootKey
27600 2c 20 76 73 56 65 72 73 69 6f 6e 2c 20 70 61 63  , vsVersion, pac
27610 6b 61 67 65 2c 20 77 68 61 74 49 66 2c 20 76 65  kage, whatIf, ve
27620 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 20  rbose,..        
27630 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20              ref 
27640 65 72 72 6f 72 29 3b 0d 0a 20 20 20 20 20 20 20  error);..       
27650 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
27660 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72  }..        #endr
27670 65 67 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 23  egion..        #
27680 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
27690 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
276a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
276b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
276c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
276d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
276e0 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
276f0 41 70 70 6c 69 63 61 74 69 6f 6e 20 45 6e 74 72  Application Entr
27700 79 20 50 6f 69 6e 74 0d 0a 20 20 20 20 20 20 20  y Point..       
27710 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
27720 69 6e 74 20 4d 61 69 6e 28 0d 0a 20 20 20 20 20  int Main(..     
27730 20 20 20 20 20 20 20 73 74 72 69 6e 67 5b 5d 20         string[] 
27740 61 72 67 73 0d 0a 20 20 20 20 20 20 20 20 20 20  args..          
27750 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a    )..        {..
27760 20 20 20 20 20 20 20 20 20 20 20 20 50 61 63 6b              Pack
27770 61 67 65 20 70 61 63 6b 61 67 65 20 3d 20 6e 75  age package = nu
27780 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll;..           
27790 20 46 72 61 6d 65 77 6f 72 6b 4c 69 73 74 20 66   FrameworkList f
277a0 72 61 6d 65 77 6f 72 6b 4c 69 73 74 20 3d 20 6e  rameworkList = n
277b0 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ull;..          
277c0 20 20 56 73 4c 69 73 74 20 76 73 4c 69 73 74 20    VsList vsList 
277d0 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20  = null;..       
277e0 20 20 20 20 20 43 6f 6e 66 69 67 75 72 61 74 69       Configurati
277f0 6f 6e 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  on configuration
27800 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20   = null;..      
27810 20 20 20 20 20 20 73 74 72 69 6e 67 20 65 72 72        string err
27820 6f 72 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20  or = null;....  
27830 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
27840 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27850 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27860 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27870 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
27880 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65  .            #re
27890 67 69 6f 6e 20 43 6f 6d 6d 61 6e 64 20 4c 69 6e  gion Command Lin
278a0 65 20 50 72 6f 63 65 73 73 69 6e 67 0d 0a 20 20  e Processing..  
278b0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21 43            if (!C
278c0 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 46 72 6f  onfiguration.Fro
278d0 6d 41 72 67 73 28 0d 0a 20 20 20 20 20 20 20 20  mArgs(..        
278e0 20 20 20 20 20 20 20 20 20 20 20 20 61 72 67 73              args
278f0 2c 20 74 72 75 65 2c 20 72 65 66 20 63 6f 6e 66  , true, ref conf
27900 69 67 75 72 61 74 69 6f 6e 2c 20 72 65 66 20 65  iguration, ref e
27910 72 72 6f 72 29 20 7c 7c 0d 0a 20 20 20 20 20 20  rror) ||..      
27920 20 20 20 20 20 20 20 20 20 20 21 43 6f 6e 66 69            !Confi
27930 67 75 72 61 74 69 6f 6e 2e 50 72 6f 63 65 73 73  guration.Process
27940 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
27950 20 20 20 20 20 20 20 61 72 67 73 2c 20 63 6f 6e         args, con
27960 66 69 67 75 72 61 74 69 6f 6e 2c 20 74 72 75 65  figuration, true
27970 2c 20 72 65 66 20 65 72 72 6f 72 29 29 0d 0a 20  , ref error)).. 
27980 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
27990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
279a0 61 63 65 4f 70 73 2e 53 68 6f 77 4d 65 73 73 61  aceOps.ShowMessa
279b0 67 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ge(..           
279c0 20 20 20 20 20 20 20 20 20 54 72 61 63 65 50 72           TracePr
279d0 69 6f 72 69 74 79 2e 48 69 67 68 65 73 74 2c 20  iority.Highest, 
279e0 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 74  traceCallback, t
279f0 68 69 73 41 73 73 65 6d 62 6c 79 2c 0d 0a 20 20  hisAssembly,..  
27a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27a10 20 20 65 72 72 6f 72 2c 20 74 72 61 63 65 43 61    error, traceCa
27a20 74 65 67 6f 72 79 2c 20 4d 65 73 73 61 67 65 42  tegory, MessageB
27a30 6f 78 42 75 74 74 6f 6e 73 2e 4f 4b 2c 0d 0a 20  oxButtons.OK,.. 
27a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27a50 20 20 20 4d 65 73 73 61 67 65 42 6f 78 49 63 6f     MessageBoxIco
27a60 6e 2e 45 72 72 6f 72 29 3b 0d 0a 0d 0a 20 20 20  n.Error);....   
27a70 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
27a80 75 72 6e 20 31 3b 20 2f 2a 20 46 41 49 4c 55 52  urn 1; /* FAILUR
27a90 45 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20  E */..          
27aa0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
27ab0 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
27ac0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27ad0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27ae0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27af0 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
27b00 20 20 20 20 20 20 49 6e 69 74 69 61 6c 69 7a 65        Initialize
27b10 56 73 50 61 63 6b 61 67 65 28 72 65 66 20 70 61  VsPackage(ref pa
27b20 63 6b 61 67 65 29 3b 0d 0a 20 20 20 20 20 20 20  ckage);..       
27b30 20 20 20 20 20 49 6e 69 74 69 61 6c 69 7a 65 46       InitializeF
27b40 72 61 6d 65 77 6f 72 6b 4c 69 73 74 28 63 6f 6e  rameworkList(con
27b50 66 69 67 75 72 61 74 69 6f 6e 2c 20 72 65 66 20  figuration, ref 
27b60 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 29 3b 0d  frameworkList);.
27b70 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 69  .            Ini
27b80 74 69 61 6c 69 7a 65 56 73 4c 69 73 74 28 63 6f  tializeVsList(co
27b90 6e 66 69 67 75 72 61 74 69 6f 6e 2c 20 72 65 66  nfiguration, ref
27ba0 20 76 73 4c 69 73 74 29 3b 0d 0a 20 20 20 20 20   vsList);..     
27bb0 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
27bc0 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n....           
27bd0 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
27be0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27bf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27c00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27c10 2f 2f 2f 2f 0d 0a 0d 0a 23 69 66 20 66 61 6c 73  ////....#if fals
27c20 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  e..            #
27c30 72 65 67 69 6f 6e 20 43 68 65 63 6b 20 49 6e 73  region Check Ins
27c40 74 61 6c 6c 65 64 20 56 53 20 56 65 72 73 69 6f  talled VS Versio
27c50 6e 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ns..            
27c60 69 66 20 28 63 6f 6e 66 69 67 75 72 61 74 69 6f  if (configuratio
27c70 6e 2e 48 61 73 46 6c 61 67 73 28 49 6e 73 74 61  n.HasFlags(Insta
27c80 6c 6c 46 6c 61 67 73 2e 41 6c 6c 2c 20 2f 2a 20  llFlags.All, /* 
27c90 61 6e 79 20 2a 2f 20 66 61 6c 73 65 29 29 0d 0a  any */ false))..
27ca0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
27cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
27cc0 66 20 28 21 46 6f 72 45 61 63 68 56 73 56 65 72  f (!ForEachVsVer
27cd0 73 69 6f 6e 52 65 67 69 73 74 72 79 28 0d 0a 20  sionRegistry(.. 
27ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27cf0 20 20 20 20 20 20 20 76 73 4c 69 73 74 2c 20 41         vsList, A
27d00 64 64 56 73 56 65 72 73 69 6f 6e 2c 20 6e 75 6c  ddVsVersion, nul
27d10 6c 2c 20 76 73 4c 69 73 74 2c 0d 0a 20 20 20 20  l, vsList,..    
27d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27d30 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f      configuratio
27d40 6e 2e 57 68 61 74 49 66 2c 20 63 6f 6e 66 69 67  n.WhatIf, config
27d50 75 72 61 74 69 6f 6e 2e 56 65 72 62 6f 73 65 2c  uration.Verbose,
27d60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
27d70 20 20 20 20 20 20 20 20 20 20 72 65 66 20 65 72            ref er
27d80 72 6f 72 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ror))..         
27d90 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
27da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
27db0 61 63 65 4f 70 73 2e 53 68 6f 77 4d 65 73 73 61  aceOps.ShowMessa
27dc0 67 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ge(..           
27dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
27de0 63 65 50 72 69 6f 72 69 74 79 2e 48 69 67 68 65  cePriority.Highe
27df0 73 74 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63  st, traceCallbac
27e00 6b 2c 20 6e 75 6c 6c 2c 0d 0a 20 20 20 20 20 20  k, null,..      
27e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27e20 20 20 65 72 72 6f 72 2c 20 74 72 61 63 65 43 61    error, traceCa
27e30 74 65 67 6f 72 79 2c 20 4d 65 73 73 61 67 65 42  tegory, MessageB
27e40 6f 78 42 75 74 74 6f 6e 73 2e 4f 4b 2c 0d 0a 20  oxButtons.OK,.. 
27e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27e60 20 20 20 20 20 20 20 4d 65 73 73 61 67 65 42 6f         MessageBo
27e70 78 49 63 6f 6e 2e 45 72 72 6f 72 29 3b 0d 0a 0d  xIcon.Error);...
27e80 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
27e90 20 20 20 20 20 72 65 74 75 72 6e 20 31 3b 20 2f       return 1; /
27ea0 2a 20 46 41 49 4c 55 52 45 20 2a 2f 0d 0a 20 20  * FAILURE */..  
27eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
27ec0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
27ed0 20 20 20 69 66 20 28 21 43 6f 6e 66 69 67 75 72     if (!Configur
27ee0 61 74 69 6f 6e 2e 43 68 65 63 6b 49 6d 61 67 65  ation.CheckImage
27ef0 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 28 0d  RuntimeVersion(.
27f00 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
27f10 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75           configu
27f20 72 61 74 69 6f 6e 2c 20 76 73 4c 69 73 74 2c 20  ration, vsList, 
27f30 74 72 75 65 2c 20 72 65 66 20 65 72 72 6f 72 29  true, ref error)
27f40 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
27f50 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
27f60 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f            TraceO
27f70 70 73 2e 53 68 6f 77 4d 65 73 73 61 67 65 28 0d  ps.ShowMessage(.
27f80 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
27f90 20 20 20 20 20 20 20 20 20 54 72 61 63 65 50 72           TracePr
27fa0 69 6f 72 69 74 79 2e 48 69 67 68 65 73 74 2c 20  iority.Highest, 
27fb0 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 6e  traceCallback, n
27fc0 75 6c 6c 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ull,..          
27fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
27fe0 72 6f 72 2c 20 74 72 61 63 65 43 61 74 65 67 6f  ror, traceCatego
27ff0 72 79 2c 20 4d 65 73 73 61 67 65 42 6f 78 42 75  ry, MessageBoxBu
28000 74 74 6f 6e 73 2e 4f 4b 2c 0d 0a 20 20 20 20 20  ttons.OK,..     
28010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28020 20 20 20 4d 65 73 73 61 67 65 42 6f 78 49 63 6f     MessageBoxIco
28030 6e 2e 45 72 72 6f 72 29 3b 0d 0a 0d 0a 20 20 20  n.Error);....   
28040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28050 20 72 65 74 75 72 6e 20 31 3b 20 2f 2a 20 46 41   return 1; /* FA
28060 49 4c 55 52 45 20 2a 2f 0d 0a 20 20 20 20 20 20  ILURE */..      
28070 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
28080 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
28090 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
280a0 6f 6e 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20  on..#endif....  
280b0 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
280c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
280d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
280e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
280f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
28100 0a 20 20 20 20 20 20 20 20 20 20 20 20 41 73 73  .            Ass
28110 65 6d 62 6c 79 4e 61 6d 65 20 61 73 73 65 6d 62  emblyName assemb
28120 6c 79 4e 61 6d 65 20 3d 20 41 73 73 65 6d 62 6c  lyName = Assembl
28130 79 4e 61 6d 65 2e 47 65 74 41 73 73 65 6d 62 6c  yName.GetAssembl
28140 79 4e 61 6d 65 28 0d 0a 20 20 20 20 20 20 20 20  yName(..        
28150 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72          configur
28160 61 74 69 6f 6e 2e 43 6f 72 65 46 69 6c 65 4e 61  ation.CoreFileNa
28170 6d 65 29 3b 20 2f 2a 20 74 68 72 6f 77 20 2a 2f  me); /* throw */
28180 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
28190 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
281a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
281b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
281c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
281d0 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
281e0 20 20 20 41 6e 79 50 61 69 72 3c 73 74 72 69 6e     AnyPair<strin
281f0 67 2c 20 62 6f 6f 6c 3e 20 64 69 72 65 63 74 6f  g, bool> directo
28200 72 79 50 61 69 72 20 3d 20 6e 65 77 20 41 6e 79  ryPair = new Any
28210 50 61 69 72 3c 73 74 72 69 6e 67 2c 20 62 6f 6f  Pair<string, boo
28220 6c 3e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  l>(..           
28230 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69       configurati
28240 6f 6e 2e 44 69 72 65 63 74 6f 72 79 2c 20 63 6f  on.Directory, co
28250 6e 66 69 67 75 72 61 74 69 6f 6e 2e 49 6e 73 74  nfiguration.Inst
28260 61 6c 6c 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  all);....       
28270 20 20 20 20 20 41 6e 79 50 61 69 72 3c 73 74 72       AnyPair<str
28280 69 6e 67 2c 20 62 6f 6f 6c 3e 20 66 69 6c 65 4e  ing, bool> fileN
28290 61 6d 65 50 61 69 72 20 3d 20 6e 65 77 20 41 6e  amePair = new An
282a0 79 50 61 69 72 3c 73 74 72 69 6e 67 2c 20 62 6f  yPair<string, bo
282b0 6f 6c 3e 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ol>(..          
282c0 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74        configurat
282d0 69 6f 6e 2e 44 65 73 69 67 6e 65 72 46 69 6c 65  ion.DesignerFile
282e0 4e 61 6d 65 2c 20 63 6f 6e 66 69 67 75 72 61 74  Name, configurat
282f0 69 6f 6e 2e 49 6e 73 74 61 6c 6c 29 3b 0d 0a 0d  ion.Install);...
28300 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
28310 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28320 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28330 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28340 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28350 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
28360 23 72 65 67 69 6f 6e 20 2e 4e 45 54 20 47 41 43  #region .NET GAC
28370 20 49 6e 73 74 61 6c 6c 2f 52 65 6d 6f 76 65 0d   Install/Remove.
28380 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
28390 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 48  (configuration.H
283a0 61 73 46 6c 61 67 73 28 49 6e 73 74 61 6c 6c 46  asFlags(InstallF
283b0 6c 61 67 73 2e 47 41 43 2c 20 74 72 75 65 29 29  lags.GAC, true))
283c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
283d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
283e0 20 50 75 62 6c 69 73 68 20 70 75 62 6c 69 73 68   Publish publish
283f0 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20   = null;....    
28400 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
28410 21 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 57  !configuration.W
28420 68 61 74 49 66 29 0d 0a 20 20 20 20 20 20 20 20  hatIf)..        
28430 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
28440 69 73 68 20 3d 20 6e 65 77 20 50 75 62 6c 69 73  ish = new Publis
28450 68 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  h();....        
28460 20 20 20 20 20 20 20 20 69 66 20 28 63 6f 6e 66          if (conf
28470 69 67 75 72 61 74 69 6f 6e 2e 49 6e 73 74 61 6c  iguration.Instal
28480 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
28490 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
284a0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21             if (!
284b0 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 57 68  configuration.Wh
284c0 61 74 49 66 29 0d 0a 20 20 20 20 20 20 20 20 20  atIf)..         
284d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70                 p
284e0 75 62 6c 69 73 68 2e 47 61 63 49 6e 73 74 61 6c  ublish.GacInstal
284f0 6c 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e  l(configuration.
28500 43 6f 72 65 46 69 6c 65 4e 61 6d 65 29 3b 20 2f  CoreFileName); /
28510 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 0d 0a 20 20  * throw */....  
28520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28530 20 20 54 72 61 63 65 4f 70 73 2e 54 72 61 63 65    TraceOps.Trace
28540 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
28550 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
28560 50 72 69 6f 72 69 74 79 2e 48 69 67 68 65 73 74  Priority.Highest
28570 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c  , traceCallback,
28580 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
28590 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
285a0 20 20 20 20 20 20 20 20 20 22 47 61 63 49 6e 73           "GacIns
285b0 74 61 6c 6c 3a 20 61 73 73 65 6d 62 6c 79 50 61  tall: assemblyPa
285c0 74 68 20 3d 20 7b 30 7d 22 2c 0d 0a 20 20 20 20  th = {0}",..    
285d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
285e0 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 63      ForDisplay(c
285f0 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 43 6f 72  onfiguration.Cor
28600 65 46 69 6c 65 4e 61 6d 65 29 29 2c 20 74 72 61  eFileName)), tra
28610 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
28620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28630 20 20 20 20 69 66 20 28 21 63 6f 6e 66 69 67 75      if (!configu
28640 72 61 74 69 6f 6e 2e 57 68 61 74 49 66 29 0d 0a  ration.WhatIf)..
28650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28660 20 20 20 20 20 20 20 20 70 75 62 6c 69 73 68 2e          publish.
28670 47 61 63 49 6e 73 74 61 6c 6c 28 63 6f 6e 66 69  GacInstall(confi
28680 67 75 72 61 74 69 6f 6e 2e 4c 69 6e 71 46 69 6c  guration.LinqFil
28690 65 4e 61 6d 65 29 3b 20 2f 2a 20 74 68 72 6f 77  eName); /* throw
286a0 20 2a 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20   */....         
286b0 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
286c0 4f 70 73 2e 54 72 61 63 65 28 0d 0a 20 20 20 20  Ops.Trace(..    
286d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
286e0 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69 74      TracePriorit
286f0 79 2e 48 69 67 68 65 73 74 2c 20 74 72 61 63 65  y.Highest, trace
28700 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67  Callback, String
28710 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
28720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28730 20 20 22 47 61 63 49 6e 73 74 61 6c 6c 3a 20 61    "GacInstall: a
28740 73 73 65 6d 62 6c 79 50 61 74 68 20 3d 20 7b 30  ssemblyPath = {0
28750 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }",..           
28760 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72               For
28770 44 69 73 70 6c 61 79 28 63 6f 6e 66 69 67 75 72  Display(configur
28780 61 74 69 6f 6e 2e 4c 69 6e 71 46 69 6c 65 4e 61  ation.LinqFileNa
28790 6d 65 29 29 2c 20 74 72 61 63 65 43 61 74 65 67  me)), traceCateg
287a0 6f 72 79 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ory);..         
287b0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
287c0 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a            else..
287d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
287e0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
287f0 20 20 20 20 20 20 20 69 66 20 28 21 63 6f 6e 66         if (!conf
28800 69 67 75 72 61 74 69 6f 6e 2e 57 68 61 74 49 66  iguration.WhatIf
28810 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
28820 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
28830 73 68 2e 47 61 63 52 65 6d 6f 76 65 28 63 6f 6e  sh.GacRemove(con
28840 66 69 67 75 72 61 74 69 6f 6e 2e 4c 69 6e 71 46  figuration.LinqF
28850 69 6c 65 4e 61 6d 65 29 3b 20 2f 2a 20 74 68 72  ileName); /* thr
28860 6f 77 20 2a 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  ow */....       
28870 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
28880 63 65 4f 70 73 2e 54 72 61 63 65 28 0d 0a 20 20  ceOps.Trace(..  
28890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
288a0 20 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72        TracePrior
288b0 69 74 79 2e 48 69 67 68 65 73 74 2c 20 74 72 61  ity.Highest, tra
288c0 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69  ceCallback, Stri
288d0 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
288e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
288f0 20 20 20 20 22 47 61 63 52 65 6d 6f 76 65 3a 20      "GacRemove: 
28900 61 73 73 65 6d 62 6c 79 50 61 74 68 20 3d 20 7b  assemblyPath = {
28910 30 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  0}",..          
28920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f                Fo
28930 72 44 69 73 70 6c 61 79 28 63 6f 6e 66 69 67 75  rDisplay(configu
28940 72 61 74 69 6f 6e 2e 4c 69 6e 71 46 69 6c 65 4e  ration.LinqFileN
28950 61 6d 65 29 29 2c 20 74 72 61 63 65 43 61 74 65  ame)), traceCate
28960 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
28970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
28980 20 28 21 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e   (!configuration
28990 2e 57 68 61 74 49 66 29 0d 0a 20 20 20 20 20 20  .WhatIf)..      
289a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
289b0 20 20 70 75 62 6c 69 73 68 2e 47 61 63 52 65 6d    publish.GacRem
289c0 6f 76 65 28 63 6f 6e 66 69 67 75 72 61 74 69 6f  ove(configuratio
289d0 6e 2e 43 6f 72 65 46 69 6c 65 4e 61 6d 65 29 3b  n.CoreFileName);
289e0 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 0d 0a   /* throw */....
289f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28a00 20 20 20 20 54 72 61 63 65 4f 70 73 2e 54 72 61      TraceOps.Tra
28a10 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ce(..           
28a20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
28a30 63 65 50 72 69 6f 72 69 74 79 2e 48 69 67 68 65  cePriority.Highe
28a40 73 74 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63  st, traceCallbac
28a50 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  k, String.Format
28a60 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
28a70 20 20 20 20 20 20 20 20 20 20 20 22 47 61 63 52             "GacR
28a80 65 6d 6f 76 65 3a 20 61 73 73 65 6d 62 6c 79 50  emove: assemblyP
28a90 61 74 68 20 3d 20 7b 30 7d 22 2c 0d 0a 20 20 20  ath = {0}",..   
28aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28ab0 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28       ForDisplay(
28ac0 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 43 6f  configuration.Co
28ad0 72 65 46 69 6c 65 4e 61 6d 65 29 29 2c 20 74 72  reFileName)), tr
28ae0 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 20  aceCategory);.. 
28af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
28b00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
28b10 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e  .            #en
28b20 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
28b30 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
28b40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28b50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28b60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28b70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
28b80 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f            #regio
28b90 6e 20 2e 4e 45 54 20 41 73 73 65 6d 62 6c 79 46  n .NET AssemblyF
28ba0 6f 6c 64 65 72 73 0d 0a 20 20 20 20 20 20 20 20  olders..        
28bb0 20 20 20 20 69 66 20 28 63 6f 6e 66 69 67 75 72      if (configur
28bc0 61 74 69 6f 6e 2e 48 61 73 46 6c 61 67 73 28 49  ation.HasFlags(I
28bd0 6e 73 74 61 6c 6c 46 6c 61 67 73 2e 41 73 73 65  nstallFlags.Asse
28be0 6d 62 6c 79 46 6f 6c 64 65 72 73 2c 20 74 72 75  mblyFolders, tru
28bf0 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e))..           
28c00 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
28c10 20 20 20 20 69 66 20 28 21 46 6f 72 45 61 63 68      if (!ForEach
28c20 46 72 61 6d 65 77 6f 72 6b 52 65 67 69 73 74 72  FrameworkRegistr
28c30 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
28c40 20 20 20 20 20 20 20 20 20 20 20 20 66 72 61 6d              fram
28c50 65 77 6f 72 6b 4c 69 73 74 2c 20 50 72 6f 63 65  eworkList, Proce
28c60 73 73 41 73 73 65 6d 62 6c 79 46 6f 6c 64 65 72  ssAssemblyFolder
28c70 73 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s,..            
28c80 20 20 20 20 20 20 20 20 20 20 20 20 64 69 72 65              dire
28c90 63 74 6f 72 79 50 61 69 72 2c 20 63 6f 6e 66 69  ctoryPair, confi
28ca0 67 75 72 61 74 69 6f 6e 2e 57 68 61 74 49 66 2c  guration.WhatIf,
28cb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
28cc0 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67            config
28cd0 75 72 61 74 69 6f 6e 2e 56 65 72 62 6f 73 65 2c  uration.Verbose,
28ce0 20 72 65 66 20 65 72 72 6f 72 29 29 0d 0a 20 20   ref error))..  
28cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
28d00 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
28d10 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 53 68       TraceOps.Sh
28d20 6f 77 4d 65 73 73 61 67 65 28 0d 0a 20 20 20 20  owMessage(..    
28d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28d40 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69 74      TracePriorit
28d50 79 2e 48 69 67 68 65 73 74 2c 20 74 72 61 63 65  y.Highest, trace
28d60 43 61 6c 6c 62 61 63 6b 2c 20 6e 75 6c 6c 2c 0d  Callback, null,.
28d70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
28d80 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 2c 20           error, 
28d90 74 72 61 63 65 43 61 74 65 67 6f 72 79 2c 20 4d  traceCategory, M
28da0 65 73 73 61 67 65 42 6f 78 42 75 74 74 6f 6e 73  essageBoxButtons
28db0 2e 4f 4b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  .OK,..          
28dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4d 65                Me
28dd0 73 73 61 67 65 42 6f 78 49 63 6f 6e 2e 45 72 72  ssageBoxIcon.Err
28de0 6f 72 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  or);....        
28df0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
28e00 72 6e 20 31 3b 20 2f 2a 20 46 41 49 4c 55 52 45  rn 1; /* FAILURE
28e10 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   */..           
28e20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
28e30 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
28e40 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
28e50 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
28e60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28e70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28e80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28e90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28ea0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
28eb0 23 72 65 67 69 6f 6e 20 2e 4e 45 54 20 44 62 50  #region .NET DbP
28ec0 72 6f 76 69 64 65 72 46 61 63 74 6f 72 79 0d 0a  roviderFactory..
28ed0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
28ee0 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 48 61  configuration.Ha
28ef0 73 46 6c 61 67 73 28 49 6e 73 74 61 6c 6c 46 6c  sFlags(InstallFl
28f00 61 67 73 2e 44 62 50 72 6f 76 69 64 65 72 46 61  ags.DbProviderFa
28f10 63 74 6f 72 79 2c 20 74 72 75 65 29 29 0d 0a 20  ctory, true)).. 
28f20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
28f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
28f40 6f 6c 20 73 61 76 65 64 20 3d 20 66 61 6c 73 65  ol saved = false
28f50 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
28f60 20 20 20 20 20 69 66 20 28 21 46 6f 72 45 61 63       if (!ForEac
28f70 68 46 72 61 6d 65 77 6f 72 6b 43 6f 6e 66 69 67  hFrameworkConfig
28f80 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
28f90 20 20 20 20 20 20 20 20 20 20 20 66 72 61 6d 65             frame
28fa0 77 6f 72 6b 4c 69 73 74 2c 20 50 72 6f 63 65 73  workList, Proces
28fb0 73 44 62 50 72 6f 76 69 64 65 72 46 61 63 74 6f  sDbProviderFacto
28fc0 72 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ry,..           
28fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 76               Inv
28fe0 61 72 69 61 6e 74 4e 61 6d 65 2c 20 50 72 6f 76  ariantName, Prov
28ff0 69 64 65 72 4e 61 6d 65 2c 20 44 65 73 63 72 69  iderName, Descri
29000 70 74 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20  ption,..        
29010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29020 46 61 63 74 6f 72 79 54 79 70 65 4e 61 6d 65 2c  FactoryTypeName,
29030 20 61 73 73 65 6d 62 6c 79 4e 61 6d 65 2c 20 64   assemblyName, d
29040 69 72 65 63 74 6f 72 79 50 61 69 72 2c 0d 0a 20  irectoryPair,.. 
29050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29060 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61         configura
29070 74 69 6f 6e 2e 57 68 61 74 49 66 2c 20 63 6f 6e  tion.WhatIf, con
29080 66 69 67 75 72 61 74 69 6f 6e 2e 56 65 72 62 6f  figuration.Verbo
29090 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se,..           
290a0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66               ref
290b0 20 73 61 76 65 64 2c 20 72 65 66 20 65 72 72 6f   saved, ref erro
290c0 72 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  r))..           
290d0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
290e0 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
290f0 65 4f 70 73 2e 53 68 6f 77 4d 65 73 73 61 67 65  eOps.ShowMessage
29100 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
29110 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
29120 50 72 69 6f 72 69 74 79 2e 48 69 67 68 65 73 74  Priority.Highest
29130 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c  , traceCallback,
29140 20 6e 75 6c 6c 2c 0d 0a 20 20 20 20 20 20 20 20   null,..        
29150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29160 65 72 72 6f 72 2c 20 74 72 61 63 65 43 61 74 65  error, traceCate
29170 67 6f 72 79 2c 20 4d 65 73 73 61 67 65 42 6f 78  gory, MessageBox
29180 42 75 74 74 6f 6e 73 2e 4f 4b 2c 0d 0a 20 20 20  Buttons.OK,..   
29190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
291a0 20 20 20 20 20 4d 65 73 73 61 67 65 42 6f 78 49       MessageBoxI
291b0 63 6f 6e 2e 45 72 72 6f 72 29 3b 0d 0a 0d 0a 20  con.Error);.... 
291c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
291d0 20 20 20 72 65 74 75 72 6e 20 31 3b 20 2f 2a 20     return 1; /* 
291e0 46 41 49 4c 55 52 45 20 2a 2f 0d 0a 20 20 20 20  FAILURE */..    
291f0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
29200 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
29210 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65            #endre
29220 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
29230 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
29240 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29250 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29260 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29270 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
29280 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 56         #region V
29290 53 20 50 61 63 6b 61 67 65 0d 0a 20 20 20 20 20  S Package..     
292a0 20 20 20 20 20 20 20 69 66 20 28 63 6f 6e 66 69         if (confi
292b0 67 75 72 61 74 69 6f 6e 2e 48 61 73 46 6c 61 67  guration.HasFlag
292c0 73 28 49 6e 73 74 61 6c 6c 46 6c 61 67 73 2e 56  s(InstallFlags.V
292d0 73 50 61 63 6b 61 67 65 2c 20 74 72 75 65 29 29  sPackage, true))
292e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
292f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
29300 20 69 66 20 28 21 46 6f 72 45 61 63 68 56 73 56   if (!ForEachVsV
29310 65 72 73 69 6f 6e 52 65 67 69 73 74 72 79 28 0d  ersionRegistry(.
29320 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
29330 20 20 20 20 20 20 20 20 20 76 73 4c 69 73 74 2c           vsList,
29340 20 50 72 6f 63 65 73 73 56 73 50 61 63 6b 61 67   ProcessVsPackag
29350 65 2c 20 70 61 63 6b 61 67 65 2c 20 66 69 6c 65  e, package, file
29360 4e 61 6d 65 50 61 69 72 2c 0d 0a 20 20 20 20 20  NamePair,..     
29370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29380 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e     configuration
29390 2e 57 68 61 74 49 66 2c 20 63 6f 6e 66 69 67 75  .WhatIf, configu
293a0 72 61 74 69 6f 6e 2e 56 65 72 62 6f 73 65 2c 0d  ration.Verbose,.
293b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
293c0 20 20 20 20 20 20 20 20 20 72 65 66 20 65 72 72           ref err
293d0 6f 72 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  or))..          
293e0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
293f0 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
29400 63 65 4f 70 73 2e 53 68 6f 77 4d 65 73 73 61 67  ceOps.ShowMessag
29410 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
29420 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
29430 65 50 72 69 6f 72 69 74 79 2e 48 69 67 68 65 73  ePriority.Highes
29440 74 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b  t, traceCallback
29450 2c 20 6e 75 6c 6c 2c 0d 0a 20 20 20 20 20 20 20  , null,..       
29460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29470 20 65 72 72 6f 72 2c 20 74 72 61 63 65 43 61 74   error, traceCat
29480 65 67 6f 72 79 2c 20 4d 65 73 73 61 67 65 42 6f  egory, MessageBo
29490 78 42 75 74 74 6f 6e 73 2e 4f 4b 2c 0d 0a 20 20  xButtons.OK,..  
294a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
294b0 20 20 20 20 20 20 4d 65 73 73 61 67 65 42 6f 78        MessageBox
294c0 49 63 6f 6e 2e 45 72 72 6f 72 29 3b 0d 0a 0d 0a  Icon.Error);....
294d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
294e0 20 20 20 20 72 65 74 75 72 6e 20 31 3b 20 2f 2a      return 1; /*
294f0 20 46 41 49 4c 55 52 45 20 2a 2f 0d 0a 20 20 20   FAILURE */..   
29500 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
29510 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
29520 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72             #endr
29530 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
29540 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
29550 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29560 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29570 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29580 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
29590 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
295a0 56 53 20 44 61 74 61 53 6f 75 72 63 65 0d 0a 20  VS DataSource.. 
295b0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 63             if (c
295c0 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 48 61 73  onfiguration.Has
295d0 46 6c 61 67 73 28 49 6e 73 74 61 6c 6c 46 6c 61  Flags(InstallFla
295e0 67 73 2e 56 73 44 61 74 61 53 6f 75 72 63 65 2c  gs.VsDataSource,
295f0 20 74 72 75 65 29 29 0d 0a 20 20 20 20 20 20 20   true))..       
29600 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
29610 20 20 20 20 20 20 20 20 69 66 20 28 21 46 6f 72          if (!For
29620 45 61 63 68 56 73 56 65 72 73 69 6f 6e 52 65 67  EachVsVersionReg
29630 69 73 74 72 79 28 0d 0a 20 20 20 20 20 20 20 20  istry(..        
29640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29650 76 73 4c 69 73 74 2c 20 50 72 6f 63 65 73 73 56  vsList, ProcessV
29660 73 44 61 74 61 53 6f 75 72 63 65 2c 20 70 61 63  sDataSource, pac
29670 6b 61 67 65 2c 20 66 69 6c 65 4e 61 6d 65 50 61  kage, fileNamePa
29680 69 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ir,..           
29690 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
296a0 66 69 67 75 72 61 74 69 6f 6e 2e 57 68 61 74 49  figuration.WhatI
296b0 66 2c 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  f, configuration
296c0 2e 56 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20  .Verbose,..     
296d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
296e0 20 20 20 72 65 66 20 65 72 72 6f 72 29 29 0d 0a     ref error))..
296f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29700 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
29710 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e         TraceOps.
29720 53 68 6f 77 4d 65 73 73 61 67 65 28 0d 0a 20 20  ShowMessage(..  
29730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29740 20 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72        TracePrior
29750 69 74 79 2e 48 69 67 68 65 73 74 2c 20 74 72 61  ity.Highest, tra
29760 63 65 43 61 6c 6c 62 61 63 6b 2c 20 6e 75 6c 6c  ceCallback, null
29770 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
29780 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
29790 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 2c  , traceCategory,
297a0 20 4d 65 73 73 61 67 65 42 6f 78 42 75 74 74 6f   MessageBoxButto
297b0 6e 73 2e 4f 4b 2c 0d 0a 20 20 20 20 20 20 20 20  ns.OK,..        
297c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
297d0 4d 65 73 73 61 67 65 42 6f 78 49 63 6f 6e 2e 45  MessageBoxIcon.E
297e0 72 72 6f 72 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  rror);....      
297f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
29800 74 75 72 6e 20 31 3b 20 2f 2a 20 46 41 49 4c 55  turn 1; /* FAILU
29810 52 45 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20  RE */..         
29820 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
29830 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
29840 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
29850 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
29860 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29870 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29880 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29890 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
298a0 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
298b0 20 20 23 72 65 67 69 6f 6e 20 56 53 20 44 61 74    #region VS Dat
298c0 61 50 72 6f 76 69 64 65 72 0d 0a 20 20 20 20 20  aProvider..     
298d0 20 20 20 20 20 20 20 69 66 20 28 63 6f 6e 66 69         if (confi
298e0 67 75 72 61 74 69 6f 6e 2e 48 61 73 46 6c 61 67  guration.HasFlag
298f0 73 28 49 6e 73 74 61 6c 6c 46 6c 61 67 73 2e 56  s(InstallFlags.V
29900 73 44 61 74 61 50 72 6f 76 69 64 65 72 2c 20 74  sDataProvider, t
29910 72 75 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20  rue))..         
29920 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
29930 20 20 20 20 20 20 69 66 20 28 21 46 6f 72 45 61        if (!ForEa
29940 63 68 56 73 56 65 72 73 69 6f 6e 52 65 67 69 73  chVsVersionRegis
29950 74 72 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  try(..          
29960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76 73                vs
29970 4c 69 73 74 2c 20 50 72 6f 63 65 73 73 56 73 44  List, ProcessVsD
29980 61 74 61 50 72 6f 76 69 64 65 72 2c 20 70 61 63  ataProvider, pac
29990 6b 61 67 65 2c 20 66 69 6c 65 4e 61 6d 65 50 61  kage, fileNamePa
299a0 69 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ir,..           
299b0 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
299c0 66 69 67 75 72 61 74 69 6f 6e 2e 57 68 61 74 49  figuration.WhatI
299d0 66 2c 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  f, configuration
299e0 2e 56 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20  .Verbose,..     
299f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29a00 20 20 20 72 65 66 20 65 72 72 6f 72 29 29 0d 0a     ref error))..
29a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29a20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
29a30 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e         TraceOps.
29a40 53 68 6f 77 4d 65 73 73 61 67 65 28 0d 0a 20 20  ShowMessage(..  
29a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29a60 20 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72        TracePrior
29a70 69 74 79 2e 48 69 67 68 65 73 74 2c 20 74 72 61  ity.Highest, tra
29a80 63 65 43 61 6c 6c 62 61 63 6b 2c 20 6e 75 6c 6c  ceCallback, null
29a90 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
29aa0 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
29ab0 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 2c  , traceCategory,
29ac0 20 4d 65 73 73 61 67 65 42 6f 78 42 75 74 74 6f   MessageBoxButto
29ad0 6e 73 2e 4f 4b 2c 0d 0a 20 20 20 20 20 20 20 20  ns.OK,..        
29ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29af0 4d 65 73 73 61 67 65 42 6f 78 49 63 6f 6e 2e 45  MessageBoxIcon.E
29b00 72 72 6f 72 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  rror);....      
29b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
29b20 74 75 72 6e 20 31 3b 20 2f 2a 20 46 41 49 4c 55  turn 1; /* FAILU
29b30 52 45 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20  RE */..         
29b40 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
29b50 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
29b60 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
29b70 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
29b80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29b90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29ba0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29bb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29bc0 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
29bd0 20 20 23 72 65 67 69 6f 6e 20 4c 6f 67 20 53 75    #region Log Su
29be0 6d 6d 61 72 79 0d 0a 20 20 20 20 20 20 20 20 20  mmary..         
29bf0 20 20 20 54 72 61 63 65 4f 70 73 2e 54 72 61 63     TraceOps.Trac
29c00 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
29c10 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69 74      TracePriorit
29c20 79 2e 48 69 67 68 65 72 2c 20 74 72 61 63 65 43  y.Higher, traceC
29c30 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e  allback, String.
29c40 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
29c50 20 20 20 20 20 20 20 20 20 22 73 75 62 4b 65 79           "subKey
29c60 73 43 72 65 61 74 65 64 20 3d 20 7b 30 7d 2c 20  sCreated = {0}, 
29c70 73 75 62 4b 65 79 73 44 65 6c 65 74 65 64 20 3d  subKeysDeleted =
29c80 20 7b 31 7d 2c 20 22 20 2b 0d 0a 20 20 20 20 20   {1}, " +..     
29c90 20 20 20 20 20 20 20 20 20 20 20 22 6b 65 79 56             "keyV
29ca0 61 6c 75 65 73 53 65 74 20 3d 20 7b 32 7d 2c 20  aluesSet = {2}, 
29cb0 6b 65 79 56 61 6c 75 65 73 44 65 6c 65 74 65 64  keyValuesDeleted
29cc0 20 3d 20 7b 33 7d 22 2c 0d 0a 20 20 20 20 20 20   = {3}",..      
29cd0 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73            ForDis
29ce0 70 6c 61 79 28 52 65 67 69 73 74 72 79 48 65 6c  play(RegistryHel
29cf0 70 65 72 2e 53 75 62 4b 65 79 73 43 72 65 61 74  per.SubKeysCreat
29d00 65 64 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ed),..          
29d10 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79        ForDisplay
29d20 28 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e  (RegistryHelper.
29d30 53 75 62 4b 65 79 73 44 65 6c 65 74 65 64 29 2c  SubKeysDeleted),
29d40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
29d50 20 20 46 6f 72 44 69 73 70 6c 61 79 28 52 65 67    ForDisplay(Reg
29d60 69 73 74 72 79 48 65 6c 70 65 72 2e 4b 65 79 56  istryHelper.KeyV
29d70 61 6c 75 65 73 53 65 74 29 2c 0d 0a 20 20 20 20  aluesSet),..    
29d80 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44              ForD
29d90 69 73 70 6c 61 79 28 52 65 67 69 73 74 72 79 48  isplay(RegistryH
29da0 65 6c 70 65 72 2e 4b 65 79 56 61 6c 75 65 73 44  elper.KeyValuesD
29db0 65 6c 65 74 65 64 29 29 2c 0d 0a 20 20 20 20 20  eleted)),..     
29dc0 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
29dd0 43 61 74 65 67 6f 72 79 29 3b 0d 0a 20 20 20 20  Category);..    
29de0 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
29df0 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  on....          
29e00 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
29e10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29e20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29e30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29e40 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
29e50 20 20 20 20 20 72 65 74 75 72 6e 20 30 3b 20 2f       return 0; /
29e60 2a 20 53 55 43 43 45 53 53 20 2a 2f 0d 0a 20 20  * SUCCESS */..  
29e70 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
29e80 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 20 20 20   #endregion..   
29e90 20 7d 0d 0a 20 20 20 20 23 65 6e 64 72 65 67 69   }..    #endregi
29ea0 6f 6e 0d 0a 7d 0d 0a                             on..}..