System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact 124f104249496d03256e0870acf7b87968a3e79b:


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 65 78 65 63 75 74   "Running execut
126a0 61 62 6c 65 20 69 73 3a 20 7b 30 7d 22 2c 20 46  able is: {0}", F
126b0 6f 72 44 69 73 70 6c 61 79 28 6c 6f 63 61 74 69  orDisplay(locati
126c0 6f 6e 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  on)),..         
126d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
126e0 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
126f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
12700 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 54        TraceOps.T
12710 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20  race(..         
12720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
12730 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4d 65 64  racePriority.Med
12740 69 75 6d 2c 20 74 72 61 63 65 43 61 6c 6c 62 61  ium, traceCallba
12750 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ck, String.Forma
12760 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
12770 20 20 20 20 20 20 20 20 20 20 20 20 22 4f 72 69              "Ori
12780 67 69 6e 61 6c 20 63 6f 6d 6d 61 6e 64 20 6c 69  ginal command li
12790 6e 65 20 69 73 3a 20 7b 30 7d 22 2c 0d 0a 20 20  ne is: {0}",..  
127a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
127b0 20 20 20 20 20 20 45 6e 76 69 72 6f 6e 6d 65 6e        Environmen
127c0 74 2e 43 6f 6d 6d 61 6e 64 4c 69 6e 65 29 2c 20  t.CommandLine), 
127d0 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
127e0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
127f0 20 20 20 20 20 20 20 69 66 20 28 21 63 6f 6e 66         if (!conf
12800 69 67 75 72 61 74 69 6f 6e 2e 77 68 61 74 49 66  iguration.whatIf
12810 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
12820 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
12830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12840 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
12850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
12860 20 4e 4f 54 45 3a 20 49 66 20 74 68 65 20 64 65   NOTE: If the de
12870 62 75 67 67 65 72 20 69 73 20 61 74 74 61 63 68  bugger is attach
12880 65 64 20 61 6e 64 20 57 68 61 74 2d 49 66 20 6d  ed and What-If m
12890 6f 64 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ode..           
128a0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
128b0 20 20 20 20 20 20 69 73 20 5b 6e 6f 77 5d 20 64        is [now] d
128c0 69 73 61 62 6c 65 64 2c 20 69 73 73 75 65 20 61  isabled, issue a
128d0 20 77 61 72 6e 69 6e 67 2e 0d 0a 20 20 20 20 20   warning...     
128e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
128f0 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
12900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
12910 66 20 28 44 65 62 75 67 67 65 72 2e 49 73 41 74  f (Debugger.IsAt
12920 74 61 63 68 65 64 29 0d 0a 20 20 20 20 20 20 20  tached)..       
12930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12940 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 54 72       TraceOps.Tr
12950 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ace(..          
12960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12970 20 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72        TracePrior
12980 69 74 79 2e 4d 65 64 69 75 6d 2c 20 74 72 61 63  ity.Medium, trac
12990 65 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20  eCallback,..    
129a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
129b0 20 20 20 20 20 20 20 20 20 20 20 20 22 46 6f 72              "For
129c0 63 65 64 20 74 6f 20 64 69 73 61 62 6c 65 20 5c  ced to disable \
129d0 22 77 68 61 74 2d 69 66 5c 22 20 6d 6f 64 65 20  "what-if\" mode 
129e0 77 69 74 68 20 22 20 2b 0d 0a 20 20 20 20 20 20  with " +..      
129f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12a00 20 20 20 20 20 20 20 20 20 20 22 64 65 62 75 67            "debug
12a10 67 65 72 20 61 74 74 61 63 68 65 64 2e 22 2c 20  ger attached.", 
12a20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
12a30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
12a40 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
12a50 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65              else
12a60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
12a70 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
12a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12a90 20 54 72 61 63 65 4f 70 73 2e 54 72 61 63 65 28   TraceOps.Trace(
12aa0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
12ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
12ac0 61 63 65 50 72 69 6f 72 69 74 79 2e 48 69 67 68  acePriority.High
12ad0 65 72 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63  er, traceCallbac
12ae0 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  k,..            
12af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12b00 22 4e 6f 20 61 63 74 75 61 6c 20 63 68 61 6e 67  "No actual chang
12b10 65 73 20 77 69 6c 6c 20 62 65 20 6d 61 64 65 20  es will be made 
12b20 74 6f 20 74 68 69 73 20 22 20 2b 0d 0a 20 20 20  to this " +..   
12b30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12b40 20 20 20 20 20 20 20 20 20 22 73 79 73 74 65 6d           "system
12b50 20 62 65 63 61 75 73 65 20 5c 22 77 68 61 74 2d   because \"what-
12b60 69 66 5c 22 20 6d 6f 64 65 20 69 73 20 65 6e 61  if\" mode is ena
12b70 62 6c 65 64 2e 22 2c 0d 0a 20 20 20 20 20 20 20  bled.",..       
12b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12b90 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
12ba0 72 79 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ry);..          
12bb0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
12bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12bd0 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
12be0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f             // NO
12bf0 54 45 3a 20 49 66 20 74 68 65 20 63 6f 6d 6d 61  TE: If the comma
12c00 6e 64 20 6c 69 6e 65 20 68 61 73 20 6e 6f 74 20  nd line has not 
12c10 62 65 65 6e 20 6d 61 6e 75 61 6c 6c 79 0d 0a 20  been manually.. 
12c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12c30 20 20 20 2f 2f 20 20 20 20 20 20 20 63 6f 6e 66     //       conf
12c40 69 72 6d 65 64 20 28 69 2e 65 2e 20 76 69 61 20  irmed (i.e. via 
12c50 74 68 65 20 65 78 70 6c 69 63 69 74 20 63 6f 6d  the explicit com
12c60 6d 61 6e 64 20 6c 69 6e 65 0d 0a 20 20 20 20 20  mand line..     
12c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
12c80 2f 20 20 20 20 20 20 20 6f 70 74 69 6f 6e 29 2c  /       option),
12c90 20 74 68 65 6e 20 73 74 6f 70 20 70 72 6f 63 65   then stop proce
12ca0 73 73 69 6e 67 20 6e 6f 77 2e 20 20 57 65 20 65  ssing now.  We e
12cb0 6e 66 6f 72 63 65 0d 0a 20 20 20 20 20 20 20 20  nforce..        
12cc0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
12cd0 20 20 20 20 20 74 68 69 73 20 72 75 6c 65 20 73       this rule s
12ce0 6f 20 74 68 61 74 20 73 69 6d 70 6c 79 20 64 6f  o that simply do
12cf0 75 62 6c 65 2d 63 6c 69 63 6b 69 6e 67 20 74 68  uble-clicking th
12d00 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
12d10 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
12d20 65 78 65 63 75 74 61 62 6c 65 20 77 69 6c 6c 20  executable will 
12d30 6e 6f 74 20 72 65 73 75 6c 74 20 69 6e 20 61 6e  not result in an
12d40 79 20 63 68 61 6e 67 65 73 20 62 65 69 6e 67 0d  y changes being.
12d50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
12d60 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6d 61       //       ma
12d70 64 65 20 74 6f 20 74 68 65 20 73 79 73 74 65 6d  de to the system
12d80 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
12d90 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
12da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
12db0 66 20 28 21 63 6f 6e 66 69 67 75 72 61 74 69 6f  f (!configuratio
12dc0 6e 2e 63 6f 6e 66 69 72 6d 29 0d 0a 20 20 20 20  n.confirm)..    
12dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12de0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
12df0 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
12e00 20 3d 20 22 43 61 6e 6e 6f 74 20 63 6f 6e 74 69   = "Cannot conti
12e10 6e 75 65 2c 20 74 68 65 20 5c 22 63 6f 6e 66 69  nue, the \"confi
12e20 72 6d 5c 22 20 6f 70 74 69 6f 6e 20 69 73 20 22  rm\" option is "
12e30 20 2b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   +..            
12e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12e50 22 6e 6f 74 20 65 6e 61 62 6c 65 64 2e 22 3b 0d  "not enabled.";.
12e60 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
12e70 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
12e80 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
12e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
12ea0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
12eb0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72         return tr
12ec0 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
12ed0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
12ee0 20 20 20 20 20 20 20 20 63 61 74 63 68 20 28 45          catch (E
12ef0 78 63 65 70 74 69 6f 6e 20 65 29 0d 0a 20 20 20  xception e)..   
12f00 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
12f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12f20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 54 72 61      TraceOps.Tra
12f30 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ce(..           
12f40 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
12f50 63 65 50 72 69 6f 72 69 74 79 2e 48 69 67 68 65  cePriority.Highe
12f60 73 74 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63  st, traceCallbac
12f70 6b 2c 20 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  k, e,..         
12f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
12f90 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
12fa0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
12fb0 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 46        error = "F
12fc0 61 69 6c 65 64 20 74 6f 20 70 72 6f 63 65 73 73  ailed to process
12fd0 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 22   configuration."
12fe0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
12ff0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
13000 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
13010 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
13020 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
13030 20 20 20 20 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 2f 2f  ////////////////
13070 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
13080 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74         public st
13090 61 74 69 63 20 62 6f 6f 6c 20 43 68 65 63 6b 52  atic bool CheckR
130a0 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 28 0d 0a  untimeVersion(..
130b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
130c0 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 63 6f  Configuration co
130d0 6e 66 69 67 75 72 61 74 69 6f 6e 2c 0d 0a 20 20  nfiguration,..  
130e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 6f                bo
130f0 6f 6c 20 73 74 72 69 63 74 2c 0d 0a 20 20 20 20  ol strict,..    
13100 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20              ref 
13110 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20  string error..  
13120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0d                ).
13130 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
13140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13150 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20  try..           
13160 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
13170 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
13180 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d  configuration ==
13190 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
131a0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
131b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
131c0 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22         error = "
131d0 49 6e 76 61 6c 69 64 20 63 6f 6e 66 69 67 75 72  Invalid configur
131e0 61 74 69 6f 6e 2e 22 3b 0d 0a 20 20 20 20 20 20  ation.";..      
131f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13200 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
13210 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
13220 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
13230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
13240 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
13250 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 57        // NOTE: W
13260 68 61 74 20 76 65 72 73 69 6f 6e 20 6f 66 20 74  hat version of t
13270 68 65 20 72 75 6e 74 69 6d 65 20 77 61 73 20 74  he runtime was t
13280 68 65 20 63 6f 72 65 20 28 70 72 69 6d 61 72 79  he core (primary
13290 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
132a0 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
132b0 61 73 73 65 6d 62 6c 79 20 63 6f 6d 70 69 6c 65  assembly compile
132c0 64 20 61 67 61 69 6e 73 74 20 28 65 2e 67 2e 20  d against (e.g. 
132d0 22 76 32 2e 30 2e 35 30 37 32 37 22 20 6f 72 0d  "v2.0.50727" or.
132e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
132f0 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 22 76       //       "v
13300 34 2e 30 2e 33 30 33 31 39 22 29 2e 0d 0a 20 20  4.0.30319")...  
13310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13320 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
13330 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
13340 20 63 6f 72 65 49 6d 61 67 65 52 75 6e 74 69 6d   coreImageRuntim
13350 65 56 65 72 73 69 6f 6e 20 3d 20 47 65 74 49 6d  eVersion = GetIm
13360 61 67 65 52 75 6e 74 69 6d 65 56 65 72 73 69 6f  ageRuntimeVersio
13370 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n(..            
13380 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66              conf
13390 69 67 75 72 61 74 69 6f 6e 2e 63 6f 72 65 46 69  iguration.coreFi
133a0 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20  leName);....    
133b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
133c0 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
133d0 20 20 20 20 20 20 20 20 2f 2f 20 54 4f 44 4f 3a          // TODO:
133e0 20 52 65 73 74 72 69 63 74 20 74 68 65 20 63 6f   Restrict the co
133f0 6e 66 69 67 75 72 61 74 69 6f 6e 20 62 61 73 65  nfiguration base
13400 64 20 6f 6e 20 77 68 69 63 68 20 69 6d 61 67 65  d on which image
13410 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
13420 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 72        //       r
13430 75 6e 74 69 6d 65 20 76 65 72 73 69 6f 6e 73 20  untime versions 
13440 28 77 68 69 63 68 20 6d 6f 72 65 2d 6f 72 2d 6c  (which more-or-l
13450 65 73 73 20 63 6f 72 72 65 73 70 6f 6e 64 0d 0a  ess correspond..
13460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13470 20 20 20 20 2f 2f 20 20 20 20 20 20 20 74 6f 20      //       to 
13480 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b 20 76  .NET Framework v
13490 65 72 73 69 6f 6e 73 29 20 61 72 65 20 73 75 70  ersions) are sup
134a0 70 6f 72 74 65 64 20 62 79 20 74 68 65 0d 0a 20  ported by the.. 
134b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
134c0 20 20 20 2f 2f 20 20 20 20 20 20 20 76 65 72 73     //       vers
134d0 69 6f 6e 73 20 6f 66 20 56 69 73 75 61 6c 20 53  ions of Visual S
134e0 74 75 64 69 6f 20 74 68 61 74 20 61 72 65 20 69  tudio that are i
134f0 6e 73 74 61 6c 6c 65 64 2e 0d 0a 20 20 20 20 20  nstalled...     
13500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
13510 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
13520 20 20 20 20 20 20 20 69 66 20 28 53 74 72 69 6e         if (Strin
13530 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28  g.IsNullOrEmpty(
13540 63 6f 72 65 49 6d 61 67 65 52 75 6e 74 69 6d 65  coreImageRuntime
13550 56 65 72 73 69 6f 6e 29 29 0d 0a 20 20 20 20 20  Version))..     
13560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
13570 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
13580 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
13590 3d 20 22 69 6e 76 61 6c 69 64 20 63 6f 72 65 20  = "invalid core 
135a0 66 69 6c 65 20 69 6d 61 67 65 20 72 75 6e 74 69  file image runti
135b0 6d 65 20 76 65 72 73 69 6f 6e 22 3b 0d 0a 20 20  me version";..  
135c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
135d0 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
135e0 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se;..           
135f0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
13600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13610 65 6c 73 65 20 69 66 20 28 53 74 72 69 6e 67 2e  else if (String.
13620 45 71 75 61 6c 73 28 0d 0a 20 20 20 20 20 20 20  Equals(..       
13630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13640 20 20 20 20 20 63 6f 72 65 49 6d 61 67 65 52 75       coreImageRu
13650 6e 74 69 6d 65 56 65 72 73 69 6f 6e 2c 20 43 4c  ntimeVersion, CL
13660 52 32 49 6d 61 67 65 52 75 6e 74 69 6d 65 56 65  R2ImageRuntimeVe
13670 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20  rsion,..        
13680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13690 20 20 20 20 53 74 72 69 6e 67 43 6f 6d 70 61 72      StringCompar
136a0 69 73 6f 6e 2e 49 6e 76 61 72 69 61 6e 74 43 75  ison.InvariantCu
136b0 6c 74 75 72 65 29 29 0d 0a 20 20 20 20 20 20 20  lture))..       
136c0 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
136d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
136e0 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
136f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13700 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 46 6f 72      // NOTE: For
13710 20 74 68 65 20 43 4c 52 20 76 32 2e 30 20 72 75   the CLR v2.0 ru
13720 6e 74 69 6d 65 2c 20 6d 61 6b 65 20 73 75 72 65  ntime, make sure
13730 20 77 65 20 64 69 73 61 62 6c 65 0d 0a 20 20 20   we disable..   
13740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13750 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 61 6e       //       an
13760 79 20 61 74 74 65 6d 70 74 20 74 6f 20 75 73 65  y attempt to use
13770 20 69 74 20 66 6f 72 20 74 68 69 6e 67 73 20 74   it for things t
13780 68 61 74 20 72 65 71 75 69 72 65 0d 0a 20 20 20  hat require..   
13790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
137a0 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 61 6e       //       an
137b0 20 61 73 73 65 6d 62 6c 79 20 63 6f 6d 70 69 6c   assembly compil
137c0 65 64 20 66 6f 72 20 74 68 65 20 43 4c 52 20 76  ed for the CLR v
137d0 34 2e 30 2e 20 20 49 74 20 69 73 0d 0a 20 20 20  4.0.  It is..   
137e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
137f0 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 75 6e       //       un
13800 63 65 72 74 61 69 6e 20 69 66 20 74 68 69 73 20  certain if this 
13810 69 73 20 61 63 74 75 61 6c 6c 79 20 61 20 70 72  is actually a pr
13820 6f 62 6c 65 6d 20 69 6e 0d 0a 20 20 20 20 20 20  oblem in..      
13830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13840 20 20 2f 2f 20 20 20 20 20 20 20 70 72 61 63 74    //       pract
13850 69 63 65 20 61 73 20 74 68 65 20 43 4c 52 20 76  ice as the CLR v
13860 34 2e 30 20 63 61 6e 20 6c 6f 61 64 20 61 6e 64  4.0 can load and
13870 20 75 73 65 20 61 6e 0d 0a 20 20 20 20 20 20 20   use an..       
13880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13890 20 2f 2f 20 20 20 20 20 20 20 61 73 73 65 6d 62   //       assemb
138a0 6c 79 20 63 6f 6d 70 69 6c 65 64 20 77 69 74 68  ly compiled with
138b0 20 74 68 65 20 43 4c 52 20 76 32 2e 30 3b 20 68   the CLR v2.0; h
138c0 6f 77 65 76 65 72 2c 0d 0a 20 20 20 20 20 20 20  owever,..       
138d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
138e0 20 2f 2f 20 20 20 20 20 20 20 73 69 6e 63 65 20   //       since 
138f0 74 68 69 73 20 70 72 6f 6a 65 63 74 20 6f 66 66  this project off
13900 65 72 73 20 62 6f 74 68 20 63 6f 6e 66 69 67 75  ers both configu
13910 72 61 74 69 6f 6e 73 2c 0d 0a 20 20 20 20 20 20  rations,..      
13920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13930 20 20 2f 2f 20 20 20 20 20 20 20 77 65 20 63 75    //       we cu
13940 72 72 65 6e 74 6c 79 20 64 69 73 61 6c 6c 6f 77  rrently disallow
13950 20 74 68 69 73 20 6d 69 73 6d 61 74 63 68 2e 0d   this mismatch..
13960 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
13970 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
13980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13990 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69       configurati
139a0 6f 6e 2e 6e 6f 4e 65 74 46 78 34 30 20 3d 20 74  on.noNetFx40 = t
139b0 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  rue;..          
139c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
139d0 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 56 73  nfiguration.noVs
139e0 32 30 31 30 20 3d 20 74 72 75 65 3b 0d 0a 0d 0a  2010 = true;....
139f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13a00 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73          TraceOps
13a10 2e 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20  .Trace(..       
13a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13a30 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69       TracePriori
13a40 74 79 2e 4d 65 64 69 75 6d 2c 20 74 72 61 63 65  ty.Medium, trace
13a50 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67  Callback, String
13a60 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
13a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13a80 20 20 20 20 20 20 22 41 73 73 65 6d 62 6c 79 20        "Assembly 
13a90 69 73 20 63 6f 6d 70 69 6c 65 64 20 66 6f 72 20  is compiled for 
13aa0 74 68 65 20 2e 4e 45 54 20 46 72 61 6d 65 77 6f  the .NET Framewo
13ab0 72 6b 20 7b 30 7d 2c 20 22 20 2b 0d 0a 20 20 20  rk {0}, " +..   
13ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13ad0 20 20 20 20 20 20 20 20 20 22 73 75 70 70 6f 72           "suppor
13ae0 74 20 66 6f 72 20 2e 4e 45 54 20 46 72 61 6d 65  t for .NET Frame
13af0 77 6f 72 6b 20 7b 31 7d 20 69 73 20 6e 6f 77 20  work {1} is now 
13b00 64 69 73 61 62 6c 65 64 2e 22 2c 0d 0a 20 20 20  disabled.",..   
13b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13b20 20 20 20 20 20 20 20 20 20 43 4c 52 32 49 6d 61           CLR2Ima
13b30 67 65 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e  geRuntimeVersion
13b40 2c 20 43 4c 52 34 49 6d 61 67 65 52 75 6e 74 69  , CLR4ImageRunti
13b50 6d 65 56 65 72 73 69 6f 6e 29 2c 0d 0a 20 20 20  meVersion),..   
13b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13b70 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
13b80 74 65 67 6f 72 79 29 3b 0d 0a 20 20 20 20 20 20  tegory);..      
13b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
13ba0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
13bb0 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 53 74       else if (St
13bc0 72 69 6e 67 2e 45 71 75 61 6c 73 28 0d 0a 20 20  ring.Equals(..  
13bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13be0 20 20 20 20 20 20 20 20 20 20 63 6f 72 65 49 6d            coreIm
13bf0 61 67 65 52 75 6e 74 69 6d 65 56 65 72 73 69 6f  ageRuntimeVersio
13c00 6e 2c 20 43 4c 52 34 49 6d 61 67 65 52 75 6e 74  n, CLR4ImageRunt
13c10 69 6d 65 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20  imeVersion,..   
13c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13c30 20 20 20 20 20 20 20 20 20 53 74 72 69 6e 67 43           StringC
13c40 6f 6d 70 61 72 69 73 6f 6e 2e 49 6e 76 61 72 69  omparison.Invari
13c50 61 6e 74 43 75 6c 74 75 72 65 29 29 0d 0a 20 20  antCulture))..  
13c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13c70 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
13c80 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
13c90 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
13ca0 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45           // NOTE
13cb0 3a 20 46 6f 72 20 74 68 65 20 43 4c 52 20 76 34  : For the CLR v4
13cc0 2e 30 20 72 75 6e 74 69 6d 65 2c 20 6d 61 6b 65  .0 runtime, make
13cd0 20 73 75 72 65 20 77 65 20 64 69 73 61 62 6c 65   sure we disable
13ce0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
13cf0 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
13d00 20 20 20 61 6e 79 20 61 74 74 65 6d 70 74 20 74     any attempt t
13d10 6f 20 75 73 65 20 69 74 20 66 6f 72 20 74 68 69  o use it for thi
13d20 6e 67 73 20 74 68 61 74 20 72 65 71 75 69 72 65  ngs that require
13d30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
13d40 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
13d50 20 20 20 61 6e 20 61 73 73 65 6d 62 6c 79 20 63     an assembly c
13d60 6f 6d 70 69 6c 65 64 20 66 6f 72 20 74 68 65 20  ompiled for the 
13d70 43 4c 52 20 76 32 2e 30 2e 0d 0a 20 20 20 20 20  CLR v2.0...     
13d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13d90 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
13da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
13db0 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f 4e  onfiguration.noN
13dc0 65 74 46 78 32 30 20 3d 20 74 72 75 65 3b 0d 0a  etFx20 = true;..
13dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13de0 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72          configur
13df0 61 74 69 6f 6e 2e 6e 6f 56 73 32 30 30 38 20 3d  ation.noVs2008 =
13e00 20 74 72 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20   true;....      
13e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13e20 20 20 54 72 61 63 65 4f 70 73 2e 54 72 61 63 65    TraceOps.Trace
13e30 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
13e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
13e50 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4d 65 64  racePriority.Med
13e60 69 75 6d 2c 20 74 72 61 63 65 43 61 6c 6c 62 61  ium, traceCallba
13e70 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ck, String.Forma
13e80 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
13e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13ea0 22 41 73 73 65 6d 62 6c 79 20 69 73 20 63 6f 6d  "Assembly is com
13eb0 70 69 6c 65 64 20 66 6f 72 20 74 68 65 20 2e 4e  piled for the .N
13ec0 45 54 20 46 72 61 6d 65 77 6f 72 6b 20 7b 30 7d  ET Framework {0}
13ed0 2c 20 22 20 2b 0d 0a 20 20 20 20 20 20 20 20 20  , " +..         
13ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13ef0 20 20 20 22 73 75 70 70 6f 72 74 20 66 6f 72 20     "support for 
13f00 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b 20 7b  .NET Framework {
13f10 31 7d 20 69 73 20 6e 6f 77 20 64 69 73 61 62 6c  1} is now disabl
13f20 65 64 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  ed.",..         
13f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13f40 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 43 4c     ForDisplay(CL
13f50 52 34 49 6d 61 67 65 52 75 6e 74 69 6d 65 56 65  R4ImageRuntimeVe
13f60 72 73 69 6f 6e 29 2c 0d 0a 20 20 20 20 20 20 20  rsion),..       
13f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13f80 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28       ForDisplay(
13f90 43 4c 52 32 49 6d 61 67 65 52 75 6e 74 69 6d 65  CLR2ImageRuntime
13fa0 56 65 72 73 69 6f 6e 29 29 2c 0d 0a 20 20 20 20  Version)),..    
13fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13fc0 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74          traceCat
13fd0 65 67 6f 72 79 29 3b 0d 0a 20 20 20 20 20 20 20  egory);..       
13fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
13ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14000 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20      else..      
14010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
14020 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
14030 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
14040 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
14050 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
14060 20 20 20 20 20 20 20 20 20 20 20 20 20 22 75 6e               "un
14070 73 75 70 70 6f 72 74 65 64 20 63 6f 72 65 20 66  supported core f
14080 69 6c 65 20 69 6d 61 67 65 20 72 75 6e 74 69 6d  ile image runtim
14090 65 20 76 65 72 73 69 6f 6e 20 22 20 2b 0d 0a 20  e version " +.. 
140a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
140b0 20 20 20 20 20 20 20 20 20 20 20 22 7b 30 7d 2c             "{0},
140c0 20 6d 75 73 74 20 62 65 20 7b 31 7d 20 6f 72 20   must be {1} or 
140d0 7b 32 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  {2}",..         
140e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
140f0 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 63 6f     ForDisplay(co
14100 72 65 49 6d 61 67 65 52 75 6e 74 69 6d 65 56 65  reImageRuntimeVe
14110 72 73 69 6f 6e 29 2c 0d 0a 20 20 20 20 20 20 20  rsion),..       
14120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14130 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28       ForDisplay(
14140 43 4c 52 32 49 6d 61 67 65 52 75 6e 74 69 6d 65  CLR2ImageRuntime
14150 56 65 72 73 69 6f 6e 29 2c 0d 0a 20 20 20 20 20  Version),..     
14160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14170 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61         ForDispla
14180 79 28 43 4c 52 34 49 6d 61 67 65 52 75 6e 74 69  y(CLR4ImageRunti
14190 6d 65 56 65 72 73 69 6f 6e 29 29 3b 0d 0a 0d 0a  meVersion));....
141a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
141b0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
141c0 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
141d0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
141e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
141f0 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b      return true;
14200 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
14210 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
14220 20 20 20 20 20 63 61 74 63 68 20 28 45 78 63 65       catch (Exce
14230 70 74 69 6f 6e 20 65 29 0d 0a 20 20 20 20 20 20  ption e)..      
14240 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
14250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14260 20 54 72 61 63 65 4f 70 73 2e 54 72 61 63 65 28   TraceOps.Trace(
14270 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
14280 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 50            TraceP
14290 72 69 6f 72 69 74 79 2e 48 69 67 68 65 73 74 2c  riority.Highest,
142a0 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20   traceCallback, 
142b0 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
142c0 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
142d0 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
142e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
142f0 20 20 20 65 72 72 6f 72 20 3d 20 22 46 61 69 6c     error = "Fail
14300 65 64 20 74 6f 20 63 68 65 63 6b 20 69 6d 61 67  ed to check imag
14310 65 20 72 75 6e 74 69 6d 65 20 76 65 72 73 69 6f  e runtime versio
14320 6e 2e 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  n.";..          
14330 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
14340 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
14350 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
14360 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
14370 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
14380 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
14390 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
143a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
143b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
143c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
143d0 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
143e0 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c 69 63    #region Public
143f0 20 4d 65 74 68 6f 64 73 0d 0a 20 20 20 20 20 20   Methods..      
14400 20 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f        public boo
14410 6c 20 48 61 73 46 6c 61 67 73 28 0d 0a 20 20 20  l HasFlags(..   
14420 20 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 73               Ins
14430 74 61 6c 6c 46 6c 61 67 73 20 68 61 73 46 6c 61  tallFlags hasFla
14440 67 73 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  gs,..           
14450 20 20 20 20 20 62 6f 6f 6c 20 61 6c 6c 0d 0a 20       bool all.. 
14460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29                 )
14470 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
14480 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
14490 20 69 66 20 28 61 6c 6c 29 0d 0a 20 20 20 20 20   if (all)..     
144a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
144b0 65 74 75 72 6e 20 28 28 69 6e 73 74 61 6c 6c 46  eturn ((installF
144c0 6c 61 67 73 20 26 20 68 61 73 46 6c 61 67 73 29  lags & hasFlags)
144d0 20 3d 3d 20 68 61 73 46 6c 61 67 73 29 3b 0d 0a   == hasFlags);..
144e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
144f0 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20  else..          
14500 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
14510 20 28 28 69 6e 73 74 61 6c 6c 46 6c 61 67 73 20   ((installFlags 
14520 26 20 68 61 73 46 6c 61 67 73 29 20 21 3d 20 49  & hasFlags) != I
14530 6e 73 74 61 6c 6c 46 6c 61 67 73 2e 4e 6f 6e 65  nstallFlags.None
14540 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
14550 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
14560 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
14570 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14580 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14590 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
145a0 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
145b0 20 20 20 20 70 75 62 6c 69 63 20 76 6f 69 64 20      public void 
145c0 44 75 6d 70 28 29 0d 0a 20 20 20 20 20 20 20 20  Dump()..        
145d0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
145e0 20 20 20 20 20 20 20 69 66 20 28 74 72 61 63 65         if (trace
145f0 43 61 6c 6c 62 61 63 6b 20 21 3d 20 6e 75 6c 6c  Callback != null
14600 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
14610 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
14620 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
14630 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46  allback(String.F
14640 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c  ormat(NameAndVal
14650 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20  ueFormat,..     
14660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14670 20 20 20 22 41 73 73 65 6d 62 6c 79 22 2c 20 46     "Assembly", F
14680 6f 72 44 69 73 70 6c 61 79 28 61 73 73 65 6d 62  orDisplay(assemb
14690 6c 79 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  ly)),..         
146a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
146b0 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
146c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
146d0 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
146e0 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ack(String.Forma
146f0 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f  t(NameAndValueFo
14700 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  rmat,..         
14710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
14720 4c 6f 67 46 69 6c 65 4e 61 6d 65 22 2c 20 46 6f  LogFileName", Fo
14730 72 44 69 73 70 6c 61 79 28 6c 6f 67 46 69 6c 65  rDisplay(logFile
14740 4e 61 6d 65 29 29 2c 0d 0a 20 20 20 20 20 20 20  Name)),..       
14750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14760 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
14770 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
14780 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c          traceCal
14790 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72  lback(String.For
147a0 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65  mat(NameAndValue
147b0 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20  Format,..       
147c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
147d0 20 22 44 69 72 65 63 74 6f 72 79 22 2c 20 46 6f   "Directory", Fo
147e0 72 44 69 73 70 6c 61 79 28 64 69 72 65 63 74 6f  rDisplay(directo
147f0 72 79 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  ry)),..         
14800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
14810 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
14820 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
14830 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
14840 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ack(String.Forma
14850 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f  t(NameAndValueFo
14860 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  rmat,..         
14870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
14880 43 6f 72 65 46 69 6c 65 4e 61 6d 65 22 2c 20 46  CoreFileName", F
14890 6f 72 44 69 73 70 6c 61 79 28 63 6f 72 65 46 69  orDisplay(coreFi
148a0 6c 65 4e 61 6d 65 29 29 2c 0d 0a 20 20 20 20 20  leName)),..     
148b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
148c0 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
148d0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
148e0 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
148f0 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46  allback(String.F
14900 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c  ormat(NameAndVal
14910 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20  ueFormat,..     
14920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14930 20 20 20 22 4c 69 6e 71 46 69 6c 65 4e 61 6d 65     "LinqFileName
14940 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 6c 69  ", ForDisplay(li
14950 6e 71 46 69 6c 65 4e 61 6d 65 29 29 2c 0d 0a 20  nqFileName)),.. 
14960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14970 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
14980 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
14990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
149a0 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69  aceCallback(Stri
149b0 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e  ng.Format(NameAn
149c0 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20  dValueFormat,.. 
149d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
149e0 20 20 20 20 20 20 20 22 44 65 73 69 67 6e 65 72         "Designer
149f0 46 69 6c 65 4e 61 6d 65 22 2c 20 46 6f 72 44 69  FileName", ForDi
14a00 73 70 6c 61 79 28 64 65 73 69 67 6e 65 72 46 69  splay(designerFi
14a10 6c 65 4e 61 6d 65 29 29 2c 0d 0a 20 20 20 20 20  leName)),..     
14a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14a30 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
14a40 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
14a50 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
14a60 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46  allback(String.F
14a70 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c  ormat(NameAndVal
14a80 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20  ueFormat,..     
14a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14aa0 20 20 20 22 54 72 61 63 65 46 6f 72 6d 61 74 22     "TraceFormat"
14ab0 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 74 72 61  , ForDisplay(tra
14ac0 63 65 46 6f 72 6d 61 74 29 29 2c 0d 0a 20 20 20  ceFormat)),..   
14ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14ae0 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
14af0 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
14b00 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
14b10 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67  eCallback(String
14b20 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56  .Format(NameAndV
14b30 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20  alueFormat,..   
14b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14b50 20 20 20 20 20 22 49 6e 73 74 61 6c 6c 46 6c 61       "InstallFla
14b60 67 73 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  gs", ForDisplay(
14b70 69 6e 73 74 61 6c 6c 46 6c 61 67 73 29 29 2c 0d  installFlags)),.
14b80 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
14b90 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
14ba0 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
14bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14bc0 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74  traceCallback(St
14bd0 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65  ring.Format(Name
14be0 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d  AndValueFormat,.
14bf0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
14c00 20 20 20 20 20 20 20 20 20 22 54 72 61 63 65 50           "TraceP
14c10 72 69 6f 72 69 74 79 22 2c 20 46 6f 72 44 69 73  riority", ForDis
14c20 70 6c 61 79 28 74 72 61 63 65 50 72 69 6f 72 69  play(tracePriori
14c30 74 79 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  ty)),..         
14c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
14c50 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
14c60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
14c70 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
14c80 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ack(String.Forma
14c90 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f  t(NameAndValueFo
14ca0 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  rmat,..         
14cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
14cc0 49 6e 73 74 61 6c 6c 22 2c 20 46 6f 72 44 69 73  Install", ForDis
14cd0 70 6c 61 79 28 69 6e 73 74 61 6c 6c 29 29 2c 0d  play(install)),.
14ce0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
14cf0 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
14d00 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
14d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14d20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74  traceCallback(St
14d30 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65  ring.Format(Name
14d40 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d  AndValueFormat,.
14d50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
14d60 20 20 20 20 20 20 20 20 20 22 4e 6f 44 65 73 6b           "NoDesk
14d70 74 6f 70 22 2c 20 46 6f 72 44 69 73 70 6c 61 79  top", ForDisplay
14d80 28 6e 6f 44 65 73 6b 74 6f 70 29 29 2c 0d 0a 20  (noDesktop)),.. 
14d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14da0 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
14db0 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
14dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
14dd0 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69  aceCallback(Stri
14de0 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e  ng.Format(NameAn
14df0 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20  dValueFormat,.. 
14e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14e10 20 20 20 20 20 20 20 22 4e 6f 43 6f 6d 70 61 63         "NoCompac
14e20 74 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 6e  t", ForDisplay(n
14e30 6f 43 6f 6d 70 61 63 74 29 29 2c 0d 0a 20 20 20  oCompact)),..   
14e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14e50 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
14e60 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
14e70 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
14e80 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67  eCallback(String
14e90 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56  .Format(NameAndV
14ea0 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20  alueFormat,..   
14eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14ec0 20 20 20 20 20 22 4e 6f 4e 65 74 46 78 32 30 22       "NoNetFx20"
14ed0 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 6e 6f 4e  , ForDisplay(noN
14ee0 65 74 46 78 32 30 29 29 2c 0d 0a 20 20 20 20 20  etFx20)),..     
14ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14f00 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
14f10 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
14f20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
14f30 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46  allback(String.F
14f40 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c  ormat(NameAndVal
14f50 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20  ueFormat,..     
14f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14f70 20 20 20 22 4e 6f 4e 65 74 46 78 34 30 22 2c 20     "NoNetFx40", 
14f80 46 6f 72 44 69 73 70 6c 61 79 28 6e 6f 4e 65 74  ForDisplay(noNet
14f90 46 78 34 30 29 29 2c 0d 0a 20 20 20 20 20 20 20  Fx40)),..       
14fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14fb0 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
14fc0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
14fd0 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c          traceCal
14fe0 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72  lback(String.For
14ff0 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65  mat(NameAndValue
15000 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20  Format,..       
15010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15020 20 22 4e 6f 56 73 32 30 30 38 22 2c 20 46 6f 72   "NoVs2008", For
15030 44 69 73 70 6c 61 79 28 6e 6f 56 73 32 30 30 38  Display(noVs2008
15040 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  )),..           
15050 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61               tra
15060 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
15070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15080 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63      traceCallbac
15090 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  k(String.Format(
150a0 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d  NameAndValueForm
150b0 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at,..           
150c0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 4e 6f               "No
150d0 56 73 32 30 31 30 22 2c 20 46 6f 72 44 69 73 70  Vs2010", ForDisp
150e0 6c 61 79 28 6e 6f 56 73 32 30 31 30 29 29 2c 0d  lay(noVs2010)),.
150f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
15100 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
15110 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
15120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15130 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74  traceCallback(St
15140 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65  ring.Format(Name
15150 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d  AndValueFormat,.
15160 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
15170 20 20 20 20 20 20 20 20 20 22 4e 6f 54 72 61 63           "NoTrac
15180 65 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 6e  e", ForDisplay(n
15190 6f 54 72 61 63 65 29 29 2c 0d 0a 20 20 20 20 20  oTrace)),..     
151a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
151b0 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
151c0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
151d0 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
151e0 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46  allback(String.F
151f0 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c  ormat(NameAndVal
15200 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20  ueFormat,..     
15210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15220 20 20 20 22 4e 6f 43 6f 6e 73 6f 6c 65 22 2c 20     "NoConsole", 
15230 46 6f 72 44 69 73 70 6c 61 79 28 6e 6f 43 6f 6e  ForDisplay(noCon
15240 73 6f 6c 65 29 29 2c 0d 0a 20 20 20 20 20 20 20  sole)),..       
15250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15260 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
15270 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
15280 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c          traceCal
15290 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72  lback(String.For
152a0 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65  mat(NameAndValue
152b0 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20  Format,..       
152c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
152d0 20 22 4e 6f 4c 6f 67 22 2c 20 46 6f 72 44 69 73   "NoLog", ForDis
152e0 70 6c 61 79 28 6e 6f 4c 6f 67 29 29 2c 0d 0a 20  play(noLog)),.. 
152f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15300 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
15310 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
15320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
15330 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72 69  aceCallback(Stri
15340 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e  ng.Format(NameAn
15350 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20  dValueFormat,.. 
15360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15370 20 20 20 20 20 20 20 22 57 68 61 74 49 66 22 2c         "WhatIf",
15380 20 46 6f 72 44 69 73 70 6c 61 79 28 77 68 61 74   ForDisplay(what
15390 49 66 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  If)),..         
153a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
153b0 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
153c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
153d0 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62        traceCallb
153e0 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ack(String.Forma
153f0 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f  t(NameAndValueFo
15400 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  rmat,..         
15410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
15420 56 65 72 62 6f 73 65 22 2c 20 46 6f 72 44 69 73  Verbose", ForDis
15430 70 6c 61 79 28 76 65 72 62 6f 73 65 29 29 2c 0d  play(verbose)),.
15440 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
15450 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
15460 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
15470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15480 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74  traceCallback(St
15490 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65  ring.Format(Name
154a0 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d  AndValueFormat,.
154b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
154c0 20 20 20 20 20 20 20 20 20 22 43 6f 6e 66 69 72           "Confir
154d0 6d 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 63  m", ForDisplay(c
154e0 6f 6e 66 69 72 6d 29 29 2c 0d 0a 20 20 20 20 20  onfirm)),..     
154f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15500 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
15510 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
15520 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
15530 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
15540 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
15550 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
15560 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15570 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15580 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15590 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
155a0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  ...            #
155b0 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20 50 72  region Public Pr
155c0 6f 70 65 72 74 69 65 73 0d 0a 20 20 20 20 20 20  operties..      
155d0 20 20 20 20 20 20 70 72 69 76 61 74 65 20 41 73        private As
155e0 73 65 6d 62 6c 79 20 61 73 73 65 6d 62 6c 79 3b  sembly assembly;
155f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
15600 62 6c 69 63 20 41 73 73 65 6d 62 6c 79 20 41 73  blic Assembly As
15610 73 65 6d 62 6c 79 0d 0a 20 20 20 20 20 20 20 20  sembly..        
15620 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
15630 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74         get { ret
15640 75 72 6e 20 61 73 73 65 6d 62 6c 79 3b 20 7d 0d  urn assembly; }.
15650 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
15660 20 73 65 74 20 7b 20 61 73 73 65 6d 62 6c 79 20   set { assembly 
15670 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20  = value; }..    
15680 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
15690 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
156a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
156b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
156c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
156d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
156e0 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
156f0 61 74 65 20 73 74 72 69 6e 67 20 6c 6f 67 46 69  ate string logFi
15700 6c 65 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20  leName;..       
15710 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 72 69       public stri
15720 6e 67 20 4c 6f 67 46 69 6c 65 4e 61 6d 65 0d 0a  ng LogFileName..
15730 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
15740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67                 g
15750 65 74 20 7b 20 72 65 74 75 72 6e 20 6c 6f 67 46  et { return logF
15760 69 6c 65 4e 61 6d 65 3b 20 7d 0d 0a 20 20 20 20  ileName; }..    
15770 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
15780 7b 20 6c 6f 67 46 69 6c 65 4e 61 6d 65 20 3d 20  { logFileName = 
15790 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20  value; }..      
157a0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
157b0 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
157c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
157d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
157e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
157f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
15800 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
15810 65 20 73 74 72 69 6e 67 20 64 69 72 65 63 74 6f  e string directo
15820 72 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ry;..           
15830 20 70 75 62 6c 69 63 20 73 74 72 69 6e 67 20 44   public string D
15840 69 72 65 63 74 6f 72 79 0d 0a 20 20 20 20 20 20  irectory..      
15850 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
15860 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72           get { r
15870 65 74 75 72 6e 20 64 69 72 65 63 74 6f 72 79 3b  eturn directory;
15880 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
15890 20 20 20 20 73 65 74 20 7b 20 64 69 72 65 63 74      set { direct
158a0 6f 72 79 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a  ory = value; }..
158b0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
158c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
158d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
158e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
158f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15900 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15910 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
15920 70 72 69 76 61 74 65 20 73 74 72 69 6e 67 20 63  private string c
15930 6f 72 65 46 69 6c 65 4e 61 6d 65 3b 0d 0a 20 20  oreFileName;..  
15940 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
15950 20 73 74 72 69 6e 67 20 43 6f 72 65 46 69 6c 65   string CoreFile
15960 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 20  Name..          
15970 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
15980 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72       get { retur
15990 6e 20 63 6f 72 65 46 69 6c 65 4e 61 6d 65 3b 20  n coreFileName; 
159a0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
159b0 20 20 20 73 65 74 20 7b 20 63 6f 72 65 46 69 6c     set { coreFil
159c0 65 4e 61 6d 65 20 3d 20 76 61 6c 75 65 3b 20 7d  eName = value; }
159d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
159e0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
159f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15a00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15a10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15a20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15a30 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
15a40 20 20 70 72 69 76 61 74 65 20 73 74 72 69 6e 67    private string
15a50 20 6c 69 6e 71 46 69 6c 65 4e 61 6d 65 3b 0d 0a   linqFileName;..
15a60 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
15a70 69 63 20 73 74 72 69 6e 67 20 4c 69 6e 71 46 69  ic string LinqFi
15a80 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20  leName..        
15a90 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
15aa0 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74         get { ret
15ab0 75 72 6e 20 6c 69 6e 71 46 69 6c 65 4e 61 6d 65  urn linqFileName
15ac0 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
15ad0 20 20 20 20 20 73 65 74 20 7b 20 6c 69 6e 71 46       set { linqF
15ae0 69 6c 65 4e 61 6d 65 20 3d 20 76 61 6c 75 65 3b  ileName = value;
15af0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
15b00 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
15b10 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
15b20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15b30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15b40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15b50 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
15b60 20 20 20 20 70 72 69 76 61 74 65 20 73 74 72 69      private stri
15b70 6e 67 20 64 65 73 69 67 6e 65 72 46 69 6c 65 4e  ng designerFileN
15b80 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ame;..          
15b90 20 20 70 75 62 6c 69 63 20 73 74 72 69 6e 67 20    public string 
15ba0 44 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65  DesignerFileName
15bb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
15bc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
15bd0 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 64 65   get { return de
15be0 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 3b 20  signerFileName; 
15bf0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
15c00 20 20 20 73 65 74 20 7b 20 64 65 73 69 67 6e 65     set { designe
15c10 72 46 69 6c 65 4e 61 6d 65 20 3d 20 76 61 6c 75  rFileName = valu
15c20 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  e; }..          
15c30 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
15c40 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
15c50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15c60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15c70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15c80 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
15c90 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
15ca0 72 69 6e 67 20 74 72 61 63 65 46 6f 72 6d 61 74  ring traceFormat
15cb0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ;..            p
15cc0 75 62 6c 69 63 20 73 74 72 69 6e 67 20 54 72 61  ublic string Tra
15cd0 63 65 46 6f 72 6d 61 74 0d 0a 20 20 20 20 20 20  ceFormat..      
15ce0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
15cf0 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72           get { r
15d00 65 74 75 72 6e 20 74 72 61 63 65 46 6f 72 6d 61  eturn traceForma
15d10 74 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  t; }..          
15d20 20 20 20 20 20 20 73 65 74 20 7b 20 74 72 61 63        set { trac
15d30 65 46 6f 72 6d 61 74 20 3d 20 76 61 6c 75 65 3b  eFormat = value;
15d40 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
15d50 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
15d60 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
15d70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15d80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15d90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15da0 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
15db0 20 20 20 20 70 72 69 76 61 74 65 20 49 6e 73 74      private Inst
15dc0 61 6c 6c 46 6c 61 67 73 20 69 6e 73 74 61 6c 6c  allFlags install
15dd0 46 6c 61 67 73 3b 0d 0a 20 20 20 20 20 20 20 20  Flags;..        
15de0 20 20 20 20 70 75 62 6c 69 63 20 49 6e 73 74 61      public Insta
15df0 6c 6c 46 6c 61 67 73 20 49 6e 73 74 61 6c 6c 46  llFlags InstallF
15e00 6c 61 67 73 0d 0a 20 20 20 20 20 20 20 20 20 20  lags..          
15e10 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
15e20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72       get { retur
15e30 6e 20 69 6e 73 74 61 6c 6c 46 6c 61 67 73 3b 20  n installFlags; 
15e40 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
15e50 20 20 20 73 65 74 20 7b 20 69 6e 73 74 61 6c 6c     set { install
15e60 46 6c 61 67 73 20 3d 20 76 61 6c 75 65 3b 20 7d  Flags = value; }
15e70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
15e80 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
15e90 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
15ee0 20 20 70 72 69 76 61 74 65 20 54 72 61 63 65 50    private TraceP
15ef0 72 69 6f 72 69 74 79 20 74 72 61 63 65 50 72 69  riority tracePri
15f00 6f 72 69 74 79 3b 0d 0a 20 20 20 20 20 20 20 20  ority;..        
15f10 20 20 20 20 70 75 62 6c 69 63 20 54 72 61 63 65      public Trace
15f20 50 72 69 6f 72 69 74 79 20 54 72 61 63 65 50 72  Priority TracePr
15f30 69 6f 72 69 74 79 0d 0a 20 20 20 20 20 20 20 20  iority..        
15f40 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
15f50 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74         get { ret
15f60 75 72 6e 20 74 72 61 63 65 50 72 69 6f 72 69 74  urn tracePriorit
15f70 79 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  y; }..          
15f80 20 20 20 20 20 20 73 65 74 20 7b 20 74 72 61 63        set { trac
15f90 65 50 72 69 6f 72 69 74 79 20 3d 20 76 61 6c 75  ePriority = valu
15fa0 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  e; }..          
15fb0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
15fc0 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15ff0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16000 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
16010 20 20 20 20 20 20 70 72 69 76 61 74 65 20 62 6f        private bo
16020 6f 6c 20 69 6e 73 74 61 6c 6c 3b 0d 0a 20 20 20  ol install;..   
16030 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
16040 62 6f 6f 6c 20 49 6e 73 74 61 6c 6c 0d 0a 20 20  bool Install..  
16050 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
16060 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74               get
16070 20 7b 20 72 65 74 75 72 6e 20 69 6e 73 74 61 6c   { return instal
16080 6c 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  l; }..          
16090 20 20 20 20 20 20 73 65 74 20 7b 20 69 6e 73 74        set { inst
160a0 61 6c 6c 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a  all = value; }..
160b0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
160c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
160d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
160e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
160f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16100 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16110 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
16120 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 6e 6f 44  private bool noD
16130 65 73 6b 74 6f 70 3b 0d 0a 20 20 20 20 20 20 20  esktop;..       
16140 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c       public bool
16150 20 4e 6f 44 65 73 6b 74 6f 70 0d 0a 20 20 20 20   NoDesktop..    
16160 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
16170 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b             get {
16180 20 72 65 74 75 72 6e 20 6e 6f 44 65 73 6b 74 6f   return noDeskto
16190 70 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  p; }..          
161a0 20 20 20 20 20 20 73 65 74 20 7b 20 6e 6f 44 65        set { noDe
161b0 73 6b 74 6f 70 20 3d 20 76 61 6c 75 65 3b 20 7d  sktop = value; }
161c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
161d0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
161e0 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
16230 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 6e    private bool n
16240 6f 43 6f 6d 70 61 63 74 3b 0d 0a 20 20 20 20 20  oCompact;..     
16250 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f         public bo
16260 6f 6c 20 4e 6f 43 6f 6d 70 61 63 74 0d 0a 20 20  ol NoCompact..  
16270 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
16280 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74               get
16290 20 7b 20 72 65 74 75 72 6e 20 6e 6f 43 6f 6d 70   { return noComp
162a0 61 63 74 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  act; }..        
162b0 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 6e 6f          set { no
162c0 43 6f 6d 70 61 63 74 20 3d 20 76 61 6c 75 65 3b  Compact = value;
162d0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
162e0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
162f0 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
16300 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16310 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16320 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16330 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
16340 20 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c      private bool
16350 20 6e 6f 4e 65 74 46 78 32 30 3b 0d 0a 20 20 20   noNetFx20;..   
16360 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
16370 62 6f 6f 6c 20 4e 6f 4e 65 74 46 78 32 30 0d 0a  bool NoNetFx20..
16380 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
16390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67                 g
163a0 65 74 20 7b 20 72 65 74 75 72 6e 20 6e 6f 4e 65  et { return noNe
163b0 74 46 78 32 30 3b 20 7d 0d 0a 20 20 20 20 20 20  tFx20; }..      
163c0 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20            set { 
163d0 6e 6f 4e 65 74 46 78 32 30 20 3d 20 76 61 6c 75  noNetFx20 = valu
163e0 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  e; }..          
163f0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
16400 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
16410 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16420 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16430 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16440 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
16450 20 20 20 20 20 20 70 72 69 76 61 74 65 20 62 6f        private bo
16460 6f 6c 20 6e 6f 4e 65 74 46 78 34 30 3b 0d 0a 20  ol noNetFx40;.. 
16470 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
16480 63 20 62 6f 6f 6c 20 4e 6f 4e 65 74 46 78 34 30  c bool NoNetFx40
16490 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
164a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
164b0 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 6e 6f   get { return no
164c0 4e 65 74 46 78 34 30 3b 20 7d 0d 0a 20 20 20 20  NetFx40; }..    
164d0 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
164e0 7b 20 6e 6f 4e 65 74 46 78 34 30 20 3d 20 76 61  { noNetFx40 = va
164f0 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  lue; }..        
16500 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
16510 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
16520 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16530 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16540 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16550 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
16560 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
16570 62 6f 6f 6c 20 6e 6f 56 73 32 30 30 38 3b 0d 0a  bool noVs2008;..
16580 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
16590 69 63 20 62 6f 6f 6c 20 4e 6f 56 73 32 30 30 38  ic bool NoVs2008
165a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
165b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
165c0 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 6e 6f   get { return no
165d0 56 73 32 30 30 38 3b 20 7d 0d 0a 20 20 20 20 20  Vs2008; }..     
165e0 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b             set {
165f0 20 6e 6f 56 73 32 30 30 38 20 3d 20 76 61 6c 75   noVs2008 = valu
16600 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  e; }..          
16610 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
16620 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
16630 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16640 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16650 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16660 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
16670 20 20 20 20 20 20 70 72 69 76 61 74 65 20 62 6f        private bo
16680 6f 6c 20 6e 6f 56 73 32 30 31 30 3b 0d 0a 20 20  ol noVs2010;..  
16690 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
166a0 20 62 6f 6f 6c 20 4e 6f 56 73 32 30 31 30 0d 0a   bool NoVs2010..
166b0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
166c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67                 g
166d0 65 74 20 7b 20 72 65 74 75 72 6e 20 6e 6f 56 73  et { return noVs
166e0 32 30 31 30 3b 20 7d 0d 0a 20 20 20 20 20 20 20  2010; }..       
166f0 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 6e           set { n
16700 6f 56 73 32 30 31 30 20 3d 20 76 61 6c 75 65 3b  oVs2010 = value;
16710 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
16720 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
16730 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
16740 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16750 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16760 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16770 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
16780 20 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c      private bool
16790 20 6e 6f 54 72 61 63 65 3b 0d 0a 20 20 20 20 20   noTrace;..     
167a0 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f         public bo
167b0 6f 6c 20 4e 6f 54 72 61 63 65 0d 0a 20 20 20 20  ol NoTrace..    
167c0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
167d0 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b             get {
167e0 20 72 65 74 75 72 6e 20 6e 6f 54 72 61 63 65 3b   return noTrace;
167f0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
16800 20 20 20 20 73 65 74 20 7b 20 6e 6f 54 72 61 63      set { noTrac
16810 65 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20  e = value; }..  
16820 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
16830 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
16840 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16850 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16860 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16870 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
16880 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
16890 69 76 61 74 65 20 62 6f 6f 6c 20 6e 6f 43 6f 6e  ivate bool noCon
168a0 73 6f 6c 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  sole;..         
168b0 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 4e     public bool N
168c0 6f 43 6f 6e 73 6f 6c 65 0d 0a 20 20 20 20 20 20  oConsole..      
168d0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
168e0 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72           get { r
168f0 65 74 75 72 6e 20 6e 6f 43 6f 6e 73 6f 6c 65 3b  eturn noConsole;
16900 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
16910 20 20 20 20 73 65 74 20 7b 20 6e 6f 43 6f 6e 73      set { noCons
16920 6f 6c 65 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a  ole = value; }..
16930 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
16940 0a 20 20 20 20 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f  ////////////////
16990 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
169a0 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 6e 6f 4c  private bool noL
169b0 6f 67 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  og;..           
169c0 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 4e 6f 4c   public bool NoL
169d0 6f 67 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  og..            
169e0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
169f0 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20     get { return 
16a00 6e 6f 4c 6f 67 3b 20 7d 0d 0a 20 20 20 20 20 20  noLog; }..      
16a10 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20            set { 
16a20 6e 6f 4c 6f 67 20 3d 20 76 61 6c 75 65 3b 20 7d  noLog = value; }
16a30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
16a40 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
16a50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16a60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16a70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16a80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16a90 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
16aa0 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 77    private bool w
16ab0 68 61 74 49 66 3b 0d 0a 20 20 20 20 20 20 20 20  hatIf;..        
16ac0 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20      public bool 
16ad0 57 68 61 74 49 66 0d 0a 20 20 20 20 20 20 20 20  WhatIf..        
16ae0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
16af0 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74         get { ret
16b00 75 72 6e 20 77 68 61 74 49 66 3b 20 7d 0d 0a 20  urn whatIf; }.. 
16b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
16b20 65 74 20 7b 20 77 68 61 74 49 66 20 3d 20 76 61  et { whatIf = va
16b30 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  lue; }..        
16b40 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
16b50 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
16b60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16b70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16b80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16b90 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
16ba0 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
16bb0 62 6f 6f 6c 20 76 65 72 62 6f 73 65 3b 0d 0a 20  bool verbose;.. 
16bc0 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
16bd0 63 20 62 6f 6f 6c 20 56 65 72 62 6f 73 65 0d 0a  c bool Verbose..
16be0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
16bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67                 g
16c00 65 74 20 7b 20 72 65 74 75 72 6e 20 76 65 72 62  et { return verb
16c10 6f 73 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20  ose; }..        
16c20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 76 65          set { ve
16c30 72 62 6f 73 65 20 3d 20 76 61 6c 75 65 3b 20 7d  rbose = value; }
16c40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
16c50 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
16c60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16c70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16c80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16c90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16ca0 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
16cb0 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 63    private bool c
16cc0 6f 6e 66 69 72 6d 3b 0d 0a 20 20 20 20 20 20 20  onfirm;..       
16cd0 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c       public bool
16ce0 20 43 6f 6e 66 69 72 6d 0d 0a 20 20 20 20 20 20   Confirm..      
16cf0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
16d00 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72           get { r
16d10 65 74 75 72 6e 20 63 6f 6e 66 69 72 6d 3b 20 7d  eturn confirm; }
16d20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
16d30 20 20 73 65 74 20 7b 20 63 6f 6e 66 69 72 6d 20    set { confirm 
16d40 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20  = value; }..    
16d50 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
16d60 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
16d70 6e 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  n..        }..  
16d80 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
16d90 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
16da0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16db0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16dc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16dd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16de0 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23  ///....        #
16df0 72 65 67 69 6f 6e 20 46 72 61 6d 65 77 6f 72 6b  region Framework
16e00 4c 69 73 74 20 43 6c 61 73 73 0d 0a 20 20 20 20  List Class..    
16e10 20 20 20 20 70 72 69 76 61 74 65 20 73 65 61 6c      private seal
16e20 65 64 20 63 6c 61 73 73 20 46 72 61 6d 65 77 6f  ed class Framewo
16e30 72 6b 4c 69 73 74 0d 0a 20 20 20 20 20 20 20 20  rkList..        
16e40 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  {..            #
16e50 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20 43 6f  region Public Co
16e60 6e 73 74 72 75 63 74 6f 72 73 0d 0a 20 20 20 20  nstructors..    
16e70 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 46          public F
16e80 72 61 6d 65 77 6f 72 6b 4c 69 73 74 28 29 0d 0a  rameworkList()..
16e90 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
16ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
16eb0 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20  / do nothing... 
16ec0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
16ed0 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65            #endre
16ee0 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
16ef0 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
16f00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16f10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16f20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16f30 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
16f40 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50         #region P
16f50 75 62 6c 69 63 20 4d 65 74 68 6f 64 73 0d 0a 20  ublic Methods.. 
16f60 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
16f70 74 65 20 52 65 67 69 73 74 72 79 4b 65 79 20 72  te RegistryKey r
16f80 6f 6f 74 4b 65 79 3b 0d 0a 20 20 20 20 20 20 20  ootKey;..       
16f90 20 20 20 20 20 70 75 62 6c 69 63 20 52 65 67 69       public Regi
16fa0 73 74 72 79 4b 65 79 20 52 6f 6f 74 4b 65 79 0d  stryKey RootKey.
16fb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
16fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16fd0 67 65 74 20 7b 20 72 65 74 75 72 6e 20 72 6f 6f  get { return roo
16fe0 74 4b 65 79 3b 20 7d 0d 0a 20 20 20 20 20 20 20  tKey; }..       
16ff0 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 72           set { r
17000 6f 6f 74 4b 65 79 20 3d 20 76 61 6c 75 65 3b 20  ootKey = value; 
17010 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
17020 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
17030 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17040 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17050 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17060 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17070 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
17080 20 20 20 70 72 69 76 61 74 65 20 53 74 72 69 6e     private Strin
17090 67 4c 69 73 74 20 6e 61 6d 65 73 3b 0d 0a 20 20  gList names;..  
170a0 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
170b0 20 53 74 72 69 6e 67 4c 69 73 74 20 4e 61 6d 65   StringList Name
170c0 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  s..            {
170d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
170e0 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 6e    get { return n
170f0 61 6d 65 73 3b 20 7d 0d 0a 20 20 20 20 20 20 20  ames; }..       
17100 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 6e           set { n
17110 61 6d 65 73 20 3d 20 76 61 6c 75 65 3b 20 7d 0d  ames = value; }.
17120 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
17130 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
17140 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17150 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17160 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17170 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17180 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
17190 20 70 72 69 76 61 74 65 20 56 65 72 73 69 6f 6e   private Version
171a0 4d 61 70 20 76 65 72 73 69 6f 6e 73 3b 0d 0a 20  Map versions;.. 
171b0 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
171c0 63 20 56 65 72 73 69 6f 6e 4d 61 70 20 56 65 72  c VersionMap Ver
171d0 73 69 6f 6e 73 0d 0a 20 20 20 20 20 20 20 20 20  sions..         
171e0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
171f0 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75        get { retu
17200 72 6e 20 76 65 72 73 69 6f 6e 73 3b 20 7d 0d 0a  rn versions; }..
17210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17220 73 65 74 20 7b 20 76 65 72 73 69 6f 6e 73 20 3d  set { versions =
17230 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20   value; }..     
17240 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
17250 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17290 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
172a0 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
172b0 74 65 20 53 74 72 69 6e 67 4c 69 73 74 20 70 6c  te StringList pl
172c0 61 74 66 6f 72 6d 4e 61 6d 65 73 3b 0d 0a 20 20  atformNames;..  
172d0 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
172e0 20 53 74 72 69 6e 67 4c 69 73 74 20 50 6c 61 74   StringList Plat
172f0 66 6f 72 6d 4e 61 6d 65 73 0d 0a 20 20 20 20 20  formNames..     
17300 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
17310 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20            get { 
17320 72 65 74 75 72 6e 20 70 6c 61 74 66 6f 72 6d 4e  return platformN
17330 61 6d 65 73 3b 20 7d 0d 0a 20 20 20 20 20 20 20  ames; }..       
17340 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 70           set { p
17350 6c 61 74 66 6f 72 6d 4e 61 6d 65 73 20 3d 20 76  latformNames = v
17360 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20  alue; }..       
17370 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
17380 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
17390 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
173a0 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
173b0 0a 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f  ////////////////
173e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
173f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17400 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67  ....        #reg
17410 69 6f 6e 20 56 73 4c 69 73 74 20 43 6c 61 73 73  ion VsList Class
17420 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
17430 65 20 73 65 61 6c 65 64 20 63 6c 61 73 73 20 56  e sealed class V
17440 73 4c 69 73 74 0d 0a 20 20 20 20 20 20 20 20 7b  sList..        {
17450 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 72  ..            #r
17460 65 67 69 6f 6e 20 50 75 62 6c 69 63 20 43 6f 6e  egion Public Con
17470 73 74 72 75 63 74 6f 72 73 0d 0a 20 20 20 20 20  structors..     
17480 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 56 73         public Vs
17490 4c 69 73 74 28 29 0d 0a 20 20 20 20 20 20 20 20  List()..        
174a0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
174b0 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74         // do not
174c0 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 20  hing...         
174d0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
174e0 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
174f0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
17500 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17510 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17520 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17530 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
17540 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  ...            #
17550 72 65 67 69 6f 6e 20 50 75 62 6c 69 63 20 50 72  region Public Pr
17560 6f 70 65 72 74 69 65 73 0d 0a 20 20 20 20 20 20  operties..      
17570 20 20 20 20 20 20 70 72 69 76 61 74 65 20 52 65        private Re
17580 67 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65  gistryKey rootKe
17590 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y;..            
175a0 70 75 62 6c 69 63 20 52 65 67 69 73 74 72 79 4b  public RegistryK
175b0 65 79 20 52 6f 6f 74 4b 65 79 0d 0a 20 20 20 20  ey RootKey..    
175c0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
175d0 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b             get {
175e0 20 72 65 74 75 72 6e 20 72 6f 6f 74 4b 65 79 3b   return rootKey;
175f0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
17600 20 20 20 20 73 65 74 20 7b 20 72 6f 6f 74 4b 65      set { rootKe
17610 79 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20  y = value; }..  
17620 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
17630 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
17640 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17650 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17660 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17670 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
17680 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
17690 69 76 61 74 65 20 56 65 72 73 69 6f 6e 4c 69 73  ivate VersionLis
176a0 74 20 76 65 72 73 69 6f 6e 73 3b 0d 0a 20 20 20  t versions;..   
176b0 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
176c0 56 65 72 73 69 6f 6e 4c 69 73 74 20 56 65 72 73  VersionList Vers
176d0 69 6f 6e 73 0d 0a 20 20 20 20 20 20 20 20 20 20  ions..          
176e0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
176f0 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72       get { retur
17700 6e 20 76 65 72 73 69 6f 6e 73 3b 20 7d 0d 0a 20  n versions; }.. 
17710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
17720 65 74 20 7b 20 76 65 72 73 69 6f 6e 73 20 3d 20  et { versions = 
17730 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20  value; }..      
17740 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
17750 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
17760 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17770 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17780 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17790 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
177a0 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74            privat
177b0 65 20 56 65 72 73 69 6f 6e 4c 69 73 74 4d 61 70  e VersionListMap
177c0 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f   frameworkVersio
177d0 6e 73 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ns;..           
177e0 20 70 75 62 6c 69 63 20 56 65 72 73 69 6f 6e 4c   public VersionL
177f0 69 73 74 4d 61 70 20 46 72 61 6d 65 77 6f 72 6b  istMap Framework
17800 56 65 72 73 69 6f 6e 73 0d 0a 20 20 20 20 20 20  Versions..      
17810 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
17820 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72           get { r
17830 65 74 75 72 6e 20 66 72 61 6d 65 77 6f 72 6b 56  eturn frameworkV
17840 65 72 73 69 6f 6e 73 3b 20 7d 0d 0a 20 20 20 20  ersions; }..    
17850 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
17860 7b 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69  { frameworkVersi
17870 6f 6e 73 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a  ons = value; }..
17880 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
17890 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
178a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
178b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
178c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
178d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
178e0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
178f0 70 72 69 76 61 74 65 20 56 65 72 73 69 6f 6e 4c  private VersionL
17900 69 73 74 20 69 6e 73 74 61 6c 6c 65 64 56 65 72  ist installedVer
17910 73 69 6f 6e 73 3b 0d 0a 20 20 20 20 20 20 20 20  sions;..        
17920 20 20 20 20 70 75 62 6c 69 63 20 56 65 72 73 69      public Versi
17930 6f 6e 4c 69 73 74 20 49 6e 73 74 61 6c 6c 65 64  onList Installed
17940 56 65 72 73 69 6f 6e 73 0d 0a 20 20 20 20 20 20  Versions..      
17950 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
17960 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72           get { r
17970 65 74 75 72 6e 20 69 6e 73 74 61 6c 6c 65 64 56  eturn installedV
17980 65 72 73 69 6f 6e 73 3b 20 7d 0d 0a 20 20 20 20  ersions; }..    
17990 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
179a0 7b 20 69 6e 73 74 61 6c 6c 65 64 56 65 72 73 69  { installedVersi
179b0 6f 6e 73 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a  ons = value; }..
179c0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
179d0 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72             #endr
179e0 65 67 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 7d  egion..        }
179f0 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65  ..        #endre
17a00 67 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 23 65  gion..        #e
17a10 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
17a20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
17a30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17a40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17a50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17a60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
17a70 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50         #region P
17a80 72 69 76 61 74 65 20 43 6f 6e 73 74 61 6e 74 20  rivate Constant 
17a90 44 61 74 61 0d 0a 20 20 20 20 20 20 20 20 70 72  Data..        pr
17aa0 69 76 61 74 65 20 63 6f 6e 73 74 20 73 74 72 69  ivate const stri
17ab0 6e 67 20 43 6f 72 65 46 69 6c 65 4e 61 6d 65 20  ng CoreFileName 
17ac0 3d 20 22 53 79 73 74 65 6d 2e 44 61 74 61 2e 53  = "System.Data.S
17ad0 51 4c 69 74 65 2e 64 6c 6c 22 3b 0d 0a 20 20 20  QLite.dll";..   
17ae0 20 20 20 20 20 70 72 69 76 61 74 65 20 63 6f 6e       private con
17af0 73 74 20 73 74 72 69 6e 67 20 4c 69 6e 71 46 69  st string LinqFi
17b00 6c 65 4e 61 6d 65 20 3d 20 22 53 79 73 74 65 6d  leName = "System
17b10 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 4c 69 6e  .Data.SQLite.Lin
17b20 71 2e 64 6c 6c 22 3b 0d 0a 20 20 20 20 20 20 20  q.dll";..       
17b30 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20 73   private const s
17b40 74 72 69 6e 67 20 44 65 73 69 67 6e 65 72 46 69  tring DesignerFi
17b50 6c 65 4e 61 6d 65 20 3d 20 22 53 51 4c 69 74 65  leName = "SQLite
17b60 2e 44 65 73 69 67 6e 65 72 2e 64 6c 6c 22 3b 0d  .Designer.dll";.
17b70 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
17b80 20 63 6f 6e 73 74 20 73 74 72 69 6e 67 20 50 72   const string Pr
17b90 6f 76 69 64 65 72 4e 61 6d 65 20 3d 20 22 53 51  oviderName = "SQ
17ba0 4c 69 74 65 20 44 61 74 61 20 50 72 6f 76 69 64  Lite Data Provid
17bb0 65 72 22 3b 0d 0a 20 20 20 20 20 20 20 20 70 72  er";..        pr
17bc0 69 76 61 74 65 20 63 6f 6e 73 74 20 73 74 72 69  ivate const stri
17bd0 6e 67 20 50 72 6f 6a 65 63 74 4e 61 6d 65 20 3d  ng ProjectName =
17be0 20 22 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51   "System.Data.SQ
17bf0 4c 69 74 65 22 3b 0d 0a 20 20 20 20 20 20 20 20  Lite";..        
17c00 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20 73 74  private const st
17c10 72 69 6e 67 20 4c 65 67 61 63 79 50 72 6f 6a 65  ring LegacyProje
17c20 63 74 4e 61 6d 65 20 3d 20 22 53 51 4c 69 74 65  ctName = "SQLite
17c30 22 3b 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  ";..        priv
17c40 61 74 65 20 63 6f 6e 73 74 20 73 74 72 69 6e 67  ate const string
17c50 20 49 6e 76 61 72 69 61 6e 74 4e 61 6d 65 20 3d   InvariantName =
17c60 20 22 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51   "System.Data.SQ
17c70 4c 69 74 65 22 3b 0d 0a 20 20 20 20 20 20 20 20  Lite";..        
17c80 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20 73 74  private const st
17c90 72 69 6e 67 20 46 61 63 74 6f 72 79 54 79 70 65  ring FactoryType
17ca0 4e 61 6d 65 20 3d 20 22 53 79 73 74 65 6d 2e 44  Name = "System.D
17cb0 61 74 61 2e 53 51 4c 69 74 65 2e 53 51 4c 69 74  ata.SQLite.SQLit
17cc0 65 46 61 63 74 6f 72 79 22 3b 0d 0a 20 20 20 20  eFactory";..    
17cd0 20 20 20 20 70 72 69 76 61 74 65 20 63 6f 6e 73      private cons
17ce0 74 20 73 74 72 69 6e 67 20 44 65 73 63 72 69 70  t string Descrip
17cf0 74 69 6f 6e 20 3d 20 22 2e 4e 45 54 20 46 72 61  tion = ".NET Fra
17d00 6d 65 77 6f 72 6b 20 44 61 74 61 20 50 72 6f 76  mework Data Prov
17d10 69 64 65 72 20 66 6f 72 20 53 51 4c 69 74 65 22  ider for SQLite"
17d20 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  ;....        ///
17d30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17d40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17d50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17d60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17d70 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
17d80 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20 73 74  private const st
17d90 72 69 6e 67 20 43 4c 52 32 49 6d 61 67 65 52 75  ring CLR2ImageRu
17da0 6e 74 69 6d 65 56 65 72 73 69 6f 6e 20 3d 20 22  ntimeVersion = "
17db0 76 32 2e 30 2e 35 30 37 32 37 22 3b 0d 0a 20 20  v2.0.50727";..  
17dc0 20 20 20 20 20 20 70 72 69 76 61 74 65 20 63 6f        private co
17dd0 6e 73 74 20 73 74 72 69 6e 67 20 43 4c 52 34 49  nst string CLR4I
17de0 6d 61 67 65 52 75 6e 74 69 6d 65 56 65 72 73 69  mageRuntimeVersi
17df0 6f 6e 20 3d 20 22 76 34 2e 30 2e 33 30 33 31 39  on = "v4.0.30319
17e00 22 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ";....        //
17e10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17e20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17e30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17e40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17e50 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
17e60 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20 73   private const s
17e70 74 72 69 6e 67 20 4e 61 6d 65 41 6e 64 56 61 6c  tring NameAndVal
17e80 75 65 46 6f 72 6d 61 74 20 3d 20 22 7b 30 7d 3a  ueFormat = "{0}:
17e90 20 7b 31 7d 22 3b 0d 0a 20 20 20 20 20 20 20 20   {1}";..        
17ea0 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20 73 74  private const st
17eb0 72 69 6e 67 20 4c 6f 67 46 69 6c 65 53 75 66 66  ring LogFileSuff
17ec0 69 78 20 3d 20 22 2e 6c 6f 67 22 3b 0d 0a 0d 0a  ix = ".log";....
17ed0 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
17ee0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17ef0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17f00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17f10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
17f20 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  ...        priva
17f30 74 65 20 73 74 61 74 69 63 20 72 65 61 64 6f 6e  te static readon
17f40 6c 79 20 73 74 72 69 6e 67 20 56 73 49 64 46 6f  ly string VsIdFo
17f50 72 6d 61 74 20 3d 20 22 42 22 3b 0d 0a 0d 0a 20  rmat = "B";.... 
17f60 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
17f70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17f80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17f90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17fa0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
17fb0 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
17fc0 65 20 73 74 61 74 69 63 20 72 65 61 64 6f 6e 6c  e static readonl
17fd0 79 20 73 74 72 69 6e 67 20 46 72 61 6d 65 77 6f  y string Framewo
17fe0 72 6b 4b 65 79 4e 61 6d 65 20 3d 0d 0a 20 20 20  rkKeyName =..   
17ff0 20 20 20 20 20 20 20 20 20 22 53 6f 66 74 77 61           "Softwa
18000 72 65 5c 5c 4d 69 63 72 6f 73 6f 66 74 5c 5c 2e  re\\Microsoft\\.
18010 4e 45 54 46 72 61 6d 65 77 6f 72 6b 22 3b 0d 0a  NETFramework";..
18020 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
18030 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18040 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18050 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18060 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18070 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69  /....        pri
18080 76 61 74 65 20 73 74 61 74 69 63 20 72 65 61 64  vate static read
18090 6f 6e 6c 79 20 73 74 72 69 6e 67 20 46 72 61 6d  only string Fram
180a0 65 77 6f 72 6b 53 64 6b 4b 65 79 4e 61 6d 65 20  eworkSdkKeyName 
180b0 3d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22  =..            "
180c0 53 6f 66 74 77 61 72 65 5c 5c 4d 69 63 72 6f 73  Software\\Micros
180d0 6f 66 74 5c 5c 4d 69 63 72 6f 73 6f 66 74 20 53  oft\\Microsoft S
180e0 44 4b 73 5c 5c 2e 4e 45 54 46 72 61 6d 65 77 6f  DKs\\.NETFramewo
180f0 72 6b 22 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  rk";....        
18100 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18110 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18120 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18130 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18140 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
18150 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
18160 63 20 72 65 61 64 6f 6e 6c 79 20 73 74 72 69 6e  c readonly strin
18170 67 20 57 69 6e 64 6f 77 73 53 64 6b 4b 65 79 4e  g WindowsSdkKeyN
18180 61 6d 65 20 3d 0d 0a 20 20 20 20 20 20 20 20 20  ame =..         
18190 20 20 20 22 53 6f 66 74 77 61 72 65 5c 5c 4d 69     "Software\\Mi
181a0 63 72 6f 73 6f 66 74 5c 5c 4d 69 63 72 6f 73 6f  crosoft\\Microso
181b0 66 74 20 53 44 4b 73 5c 5c 57 69 6e 64 6f 77 73  ft SDKs\\Windows
181c0 22 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  ";....        //
181d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
181e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
181f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18200 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18210 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
18220 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
18230 72 65 61 64 6f 6e 6c 79 20 73 74 72 69 6e 67 20  readonly string 
18240 58 50 61 74 68 46 6f 72 41 64 64 45 6c 65 6d 65  XPathForAddEleme
18250 6e 74 20 3d 0d 0a 20 20 20 20 20 20 20 20 20 20  nt =..          
18260 20 20 22 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e    "configuration
18270 2f 73 79 73 74 65 6d 2e 64 61 74 61 2f 44 62 50  /system.data/DbP
18280 72 6f 76 69 64 65 72 46 61 63 74 6f 72 69 65 73  roviderFactories
18290 2f 61 64 64 5b 40 69 6e 76 61 72 69 61 6e 74 3d  /add[@invariant=
182a0 5c 22 7b 30 7d 5c 22 5d 22 3b 0d 0a 0d 0a 20 20  \"{0}\"]";....  
182b0 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
182c0 61 74 69 63 20 72 65 61 64 6f 6e 6c 79 20 73 74  atic readonly st
182d0 72 69 6e 67 20 58 50 61 74 68 46 6f 72 52 65 6d  ring XPathForRem
182e0 6f 76 65 45 6c 65 6d 65 6e 74 20 3d 0d 0a 20 20  oveElement =..  
182f0 20 20 20 20 20 20 20 20 20 20 22 63 6f 6e 66 69            "confi
18300 67 75 72 61 74 69 6f 6e 2f 73 79 73 74 65 6d 2e  guration/system.
18310 64 61 74 61 2f 44 62 50 72 6f 76 69 64 65 72 46  data/DbProviderF
18320 61 63 74 6f 72 69 65 73 2f 72 65 6d 6f 76 65 5b  actories/remove[
18330 40 69 6e 76 61 72 69 61 6e 74 3d 5c 22 7b 30 7d  @invariant=\"{0}
18340 5c 22 5d 22 3b 0d 0a 20 20 20 20 20 20 20 20 23  \"]";..        #
18350 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
18360 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
18370 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18380 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18390 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
183a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
183b0 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
183c0 50 72 69 76 61 74 65 20 44 61 74 61 0d 0a 20 20  Private Data..  
183d0 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
183e0 61 74 69 63 20 41 73 73 65 6d 62 6c 79 20 74 68  atic Assembly th
183f0 69 73 41 73 73 65 6d 62 6c 79 20 3d 20 41 73 73  isAssembly = Ass
18400 65 6d 62 6c 79 2e 47 65 74 45 78 65 63 75 74 69  embly.GetExecuti
18410 6e 67 41 73 73 65 6d 62 6c 79 28 29 3b 0d 0a 0d  ngAssembly();...
18420 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
18430 20 73 74 61 74 69 63 20 73 74 72 69 6e 67 20 74   static string t
18440 72 61 63 65 43 61 74 65 67 6f 72 79 20 3d 20 50  raceCategory = P
18450 61 74 68 2e 47 65 74 46 69 6c 65 4e 61 6d 65 28  ath.GetFileName(
18460 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68  ..            th
18470 69 73 41 73 73 65 6d 62 6c 79 2e 4c 6f 63 61 74  isAssembly.Locat
18480 69 6f 6e 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ion);....       
18490 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
184a0 54 72 61 63 65 43 61 6c 6c 62 61 63 6b 20 74 72  TraceCallback tr
184b0 61 63 65 43 61 6c 6c 62 61 63 6b 20 3d 20 41 70  aceCallback = Ap
184c0 70 54 72 61 63 65 3b 0d 0a 20 20 20 20 20 20 20  pTrace;..       
184d0 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
184e0 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
184f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18500 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18510 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18520 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
18530 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f  ..        #regio
18540 6e 20 54 72 61 63 65 20 48 61 6e 64 6c 69 6e 67  n Trace Handling
18550 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
18560 65 20 73 74 61 74 69 63 20 73 74 72 69 6e 67 20  e static string 
18570 47 65 74 4c 6f 67 46 69 6c 65 4e 61 6d 65 28 29  GetLogFileName()
18580 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
18590 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
185a0 72 65 73 75 6c 74 20 3d 20 50 61 74 68 2e 47 65  result = Path.Ge
185b0 74 54 65 6d 70 46 69 6c 65 4e 61 6d 65 28 29 3b  tTempFileName();
185c0 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 0d 0a   /* throw */....
185d0 20 20 20 20 20 20 20 20 20 20 20 20 46 69 6c 65              File
185e0 2e 4d 6f 76 65 28 72 65 73 75 6c 74 2c 20 72 65  .Move(result, re
185f0 73 75 6c 74 20 2b 20 4c 6f 67 46 69 6c 65 53 75  sult + LogFileSu
18600 66 66 69 78 29 3b 20 2f 2a 20 74 68 72 6f 77 20  ffix); /* throw 
18610 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  */..            
18620 72 65 73 75 6c 74 20 2b 3d 20 4c 6f 67 46 69 6c  result += LogFil
18630 65 53 75 66 66 69 78 3b 0d 0a 0d 0a 20 20 20 20  eSuffix;....    
18640 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 72          return r
18650 65 73 75 6c 74 3b 0d 0a 20 20 20 20 20 20 20 20  esult;..        
18660 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  }....        ///
18670 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18680 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18690 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
186a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
186b0 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
186c0 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 76  private static v
186d0 6f 69 64 20 41 70 70 54 72 61 63 65 28 0d 0a 20  oid AppTrace(.. 
186e0 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
186f0 67 20 6d 65 73 73 61 67 65 2c 0d 0a 20 20 20 20  g message,..    
18700 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 63          string c
18710 61 74 65 67 6f 72 79 0d 0a 20 20 20 20 20 20 20  ategory..       
18720 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
18730 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 54  {..            T
18740 72 61 63 65 4f 70 73 2e 54 72 61 63 65 43 6f 72  raceOps.TraceCor
18750 65 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  e(String.Format(
18760 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
18770 20 20 54 72 61 63 65 4f 70 73 2e 54 72 61 63 65    TraceOps.Trace
18780 46 6f 72 6d 61 74 2c 20 54 72 61 63 65 4f 70 73  Format, TraceOps
18790 2e 4e 65 78 74 49 64 28 29 2c 0d 0a 20 20 20 20  .NextId(),..    
187a0 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
187b0 65 4f 70 73 2e 54 69 6d 65 53 74 61 6d 70 28 44  eOps.TimeStamp(D
187c0 61 74 65 54 69 6d 65 2e 55 74 63 4e 6f 77 29 2c  ateTime.UtcNow),
187d0 20 6d 65 73 73 61 67 65 29 2c 20 63 61 74 65 67   message), categ
187e0 6f 72 79 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d  ory);..        }
187f0 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65  ..        #endre
18800 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
18810 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18820 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18830 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18840 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18850 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
18860 20 20 20 23 72 65 67 69 6f 6e 20 47 65 6e 65 72     #region Gener
18870 69 63 20 53 74 72 69 6e 67 20 48 61 6e 64 6c 69  ic String Handli
18880 6e 67 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  ng..        priv
18890 61 74 65 20 73 74 61 74 69 63 20 73 74 72 69 6e  ate static strin
188a0 67 20 46 6f 72 44 69 73 70 6c 61 79 28 0d 0a 20  g ForDisplay(.. 
188b0 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63             objec
188c0 74 20 76 61 6c 75 65 0d 0a 20 20 20 20 20 20 20  t value..       
188d0 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
188e0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  {..            i
188f0 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c 6c  f (value == null
18900 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
18910 20 20 20 72 65 74 75 72 6e 20 22 3c 6e 75 6c 6c     return "<null
18920 3e 22 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  >";....         
18930 20 20 20 73 74 72 69 6e 67 20 72 65 73 75 6c 74     string result
18940 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 54  ;..            T
18950 79 70 65 20 74 79 70 65 20 3d 20 76 61 6c 75 65  ype type = value
18960 2e 47 65 74 54 79 70 65 28 29 3b 0d 0a 0d 0a 20  .GetType();.... 
18970 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 74             if (t
18980 79 70 65 20 3d 3d 20 74 79 70 65 6f 66 28 58 6d  ype == typeof(Xm
18990 6c 45 6c 65 6d 65 6e 74 29 29 0d 0a 20 20 20 20  lElement))..    
189a0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
189b0 20 20 20 20 20 20 20 20 20 20 20 58 6d 6c 45 6c             XmlEl
189c0 65 6d 65 6e 74 20 65 6c 65 6d 65 6e 74 20 3d 20  ement element = 
189d0 28 58 6d 6c 45 6c 65 6d 65 6e 74 29 76 61 6c 75  (XmlElement)valu
189e0 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
189f0 20 20 20 20 20 20 72 65 73 75 6c 74 20 3d 20 65        result = e
18a00 6c 65 6d 65 6e 74 2e 4f 75 74 65 72 58 6d 6c 3b  lement.OuterXml;
18a10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
18a20 0a 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73  .            els
18a30 65 20 69 66 20 28 74 79 70 65 20 3d 3d 20 74 79  e if (type == ty
18a40 70 65 6f 66 28 56 65 72 73 69 6f 6e 29 29 0d 0a  peof(Version))..
18a50 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
18a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 56                 V
18a70 65 72 73 69 6f 6e 20 76 65 72 73 69 6f 6e 20 3d  ersion version =
18a80 20 28 56 65 72 73 69 6f 6e 29 76 61 6c 75 65 3b   (Version)value;
18a90 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
18aa0 20 20 20 20 72 65 73 75 6c 74 20 3d 20 53 74 72      result = Str
18ab0 69 6e 67 2e 46 6f 72 6d 61 74 28 22 76 7b 30 7d  ing.Format("v{0}
18ac0 22 2c 20 76 65 72 73 69 6f 6e 29 3b 0d 0a 20 20  ", version);..  
18ad0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
18ae0 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20           else.. 
18af0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
18b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
18b10 73 75 6c 74 20 3d 20 76 61 6c 75 65 2e 54 6f 53  sult = value.ToS
18b20 74 72 69 6e 67 28 29 3b 0d 0a 0d 0a 20 20 20 20  tring();....    
18b30 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
18b40 72 65 73 75 6c 74 2e 4c 65 6e 67 74 68 20 3d 3d  result.Length ==
18b50 20 30 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20   0)..           
18b60 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
18b70 22 3c 65 6d 70 74 79 3e 22 3b 0d 0a 0d 0a 20 20  "<empty>";....  
18b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
18b90 73 75 6c 74 20 3d 20 53 74 72 69 6e 67 2e 46 6f  sult = String.Fo
18ba0 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
18bb0 20 20 20 20 20 20 20 20 20 20 20 74 79 70 65 2e             type.
18bc0 49 73 53 75 62 63 6c 61 73 73 4f 66 28 74 79 70  IsSubclassOf(typ
18bd0 65 6f 66 28 56 61 6c 75 65 54 79 70 65 29 29 20  eof(ValueType)) 
18be0 3f 20 22 7b 30 7d 22 20 3a 20 22 5c 22 7b 30 7d  ? "{0}" : "\"{0}
18bf0 5c 22 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  \"",..          
18c00 20 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74            result
18c10 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
18c20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
18c30 20 72 65 74 75 72 6e 20 72 65 73 75 6c 74 3b 0d   return result;.
18c40 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
18c50 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
18c60 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
18c70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18c80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18c90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18ca0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18cb0 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65  /....        #re
18cc0 67 69 6f 6e 20 2e 4e 45 54 20 46 72 61 6d 65 77  gion .NET Framew
18cd0 6f 72 6b 20 48 61 6e 64 6c 69 6e 67 0d 0a 20 20  ork Handling..  
18ce0 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
18cf0 61 74 69 63 20 73 74 72 69 6e 67 20 47 65 74 49  atic string GetI
18d00 6d 61 67 65 52 75 6e 74 69 6d 65 56 65 72 73 69  mageRuntimeVersi
18d10 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on(..           
18d20 20 73 74 72 69 6e 67 20 66 69 6c 65 4e 61 6d 65   string fileName
18d30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d  ..            ).
18d40 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
18d50 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20          try..   
18d60 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
18d70 20 20 20 20 20 20 20 20 20 20 20 20 41 73 73 65              Asse
18d80 6d 62 6c 79 20 61 73 73 65 6d 62 6c 79 20 3d 0d  mbly assembly =.
18d90 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
18da0 20 20 20 20 20 41 73 73 65 6d 62 6c 79 2e 52 65       Assembly.Re
18db0 66 6c 65 63 74 69 6f 6e 4f 6e 6c 79 4c 6f 61 64  flectionOnlyLoad
18dc0 46 72 6f 6d 28 66 69 6c 65 4e 61 6d 65 29 3b 20  From(fileName); 
18dd0 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 0d 0a 20  /* throw */.... 
18de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
18df0 66 20 28 61 73 73 65 6d 62 6c 79 20 21 3d 20 6e  f (assembly != n
18e00 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
18e10 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
18e20 20 61 73 73 65 6d 62 6c 79 2e 49 6d 61 67 65 52   assembly.ImageR
18e30 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 3b 0d 0a  untimeVersion;..
18e40 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
18e50 20 20 20 20 20 20 20 20 20 20 20 63 61 74 63 68             catch
18e60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
18e70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
18e80 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d   // do nothing..
18e90 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
18ea0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
18eb0 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20  turn null;..    
18ec0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
18ed0 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
18ee0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18ef0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18f00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18f10 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
18f20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74      private stat
18f30 69 63 20 73 74 72 69 6e 67 20 47 65 74 46 72 61  ic string GetFra
18f40 6d 65 77 6f 72 6b 44 69 72 65 63 74 6f 72 79 28  meworkDirectory(
18f50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 52 65  ..            Re
18f60 67 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65  gistryKey rootKe
18f70 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y,..            
18f80 56 65 72 73 69 6f 6e 20 66 72 61 6d 65 77 6f 72  Version framewor
18f90 6b 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20  kVersion,..     
18fa0 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74         bool what
18fb0 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  If,..           
18fc0 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 0d 0a 20   bool verbose.. 
18fd0 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
18fe0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
18ff0 20 20 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b       using (Mock
19000 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65 79 20  RegistryKey key 
19010 3d 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72  = RegistryHelper
19020 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20  .OpenSubKey(..  
19030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19040 20 20 72 6f 6f 74 4b 65 79 2c 20 46 72 61 6d 65    rootKey, Frame
19050 77 6f 72 6b 4b 65 79 4e 61 6d 65 2c 20 66 61 6c  workKeyName, fal
19060 73 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62  se, whatIf, verb
19070 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ose))..         
19080 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
19090 20 20 20 20 20 20 69 66 20 28 6b 65 79 20 3d 3d        if (key ==
190a0 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
190b0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
190c0 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20  rn null;....    
190d0 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65              obje
190e0 63 74 20 76 61 6c 75 65 20 3d 20 52 65 67 69 73  ct value = Regis
190f0 74 72 79 48 65 6c 70 65 72 2e 47 65 74 56 61 6c  tryHelper.GetVal
19100 75 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue(..           
19110 20 20 20 20 20 20 20 20 20 6b 65 79 2c 20 22 49           key, "I
19120 6e 73 74 61 6c 6c 52 6f 6f 74 22 2c 20 6e 75 6c  nstallRoot", nul
19130 6c 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f  l, whatIf, verbo
19140 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  se);....        
19150 20 20 20 20 20 20 20 20 69 66 20 28 21 28 76 61          if (!(va
19160 6c 75 65 20 69 73 20 73 74 72 69 6e 67 29 29 0d  lue is string)).
19170 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
19180 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c       return null
19190 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
191a0 20 20 20 20 20 72 65 74 75 72 6e 20 50 61 74 68       return Path
191b0 2e 43 6f 6d 62 69 6e 65 28 0d 0a 20 20 20 20 20  .Combine(..     
191c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28                 (
191d0 73 74 72 69 6e 67 29 76 61 6c 75 65 2c 20 53 74  string)value, St
191e0 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22 76 7b 30  ring.Format("v{0
191f0 7d 22 2c 20 66 72 61 6d 65 77 6f 72 6b 56 65 72  }", frameworkVer
19200 73 69 6f 6e 29 29 3b 0d 0a 20 20 20 20 20 20 20  sion));..       
19210 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
19220 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  }....        ///
19230 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19240 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19250 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19260 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19270 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
19280 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 73  private static s
19290 74 72 69 6e 67 20 47 65 74 53 64 6b 42 69 6e 61  tring GetSdkBina
192a0 72 79 46 69 6c 65 4e 61 6d 65 28 0d 0a 20 20 20  ryFileName(..   
192b0 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72           Registr
192c0 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20  yKey rootKey,.. 
192d0 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
192e0 67 20 66 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20  g fileName,..   
192f0 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68           bool wh
19300 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20  atIf,..         
19310 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 0d     bool verbose.
19320 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a  .            )..
19330 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
19340 20 20 20 20 20 20 20 53 74 72 69 6e 67 44 69 63         StringDic
19350 74 69 6f 6e 61 72 79 20 72 65 73 75 6c 74 73 20  tionary results 
19360 3d 20 6e 65 77 20 53 74 72 69 6e 67 44 69 63 74  = new StringDict
19370 69 6f 6e 61 72 79 28 29 3b 0d 0a 0d 0a 20 20 20  ionary();....   
19380 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 5b           string[
19390 5d 20 6b 65 79 4e 61 6d 65 73 20 3d 20 7b 0d 0a  ] keyNames = {..
193a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
193b0 46 72 61 6d 65 77 6f 72 6b 4b 65 79 4e 61 6d 65  FrameworkKeyName
193c0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
193d0 20 20 20 46 72 61 6d 65 77 6f 72 6b 53 64 6b 4b     FrameworkSdkK
193e0 65 79 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20  eyName,..       
193f0 20 20 20 20 20 20 20 20 20 57 69 6e 64 6f 77 73           Windows
19400 53 64 6b 4b 65 79 4e 61 6d 65 0d 0a 20 20 20 20  SdkKeyName..    
19410 20 20 20 20 20 20 20 20 7d 3b 0d 0a 0d 0a 20 20          };....  
19420 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
19430 5b 5d 20 76 61 6c 75 65 4e 61 6d 65 73 20 3d 20  [] valueNames = 
19440 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
19450 20 20 20 22 73 64 6b 49 6e 73 74 61 6c 6c 52 6f     "sdkInstallRo
19460 6f 74 76 32 2e 30 22 2c 0d 0a 20 20 20 20 20 20  otv2.0",..      
19470 20 20 20 20 20 20 20 20 20 20 22 49 6e 73 74 61            "Insta
19480 6c 6c 61 74 69 6f 6e 46 6f 6c 64 65 72 22 2c 0d  llationFolder",.
19490 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
194a0 20 22 49 6e 73 74 61 6c 6c 61 74 69 6f 6e 46 6f   "InstallationFo
194b0 6c 64 65 72 22 0d 0a 20 20 20 20 20 20 20 20 20  lder"..         
194c0 20 20 20 7d 3b 0d 0a 0d 0a 20 20 20 20 20 20 20     };....       
194d0 20 20 20 20 20 62 6f 6f 6c 5b 5d 20 75 73 65 53       bool[] useS
194e0 75 62 4b 65 79 73 20 3d 20 7b 0d 0a 20 20 20 20  ubKeys = {..    
194f0 20 20 20 20 20 20 20 20 20 20 20 20 66 61 6c 73              fals
19500 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
19510 20 20 20 20 74 72 75 65 2c 0d 0a 20 20 20 20 20      true,..     
19520 20 20 20 20 20 20 20 20 20 20 20 74 72 75 65 0d             true.
19530 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 3b 0d  .            };.
19540 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 66  ...            f
19550 6f 72 20 28 69 6e 74 20 69 6e 64 65 78 20 3d 20  or (int index = 
19560 30 3b 20 69 6e 64 65 78 20 3c 20 6b 65 79 4e 61  0; index < keyNa
19570 6d 65 73 2e 4c 65 6e 67 74 68 3b 20 69 6e 64 65  mes.Length; inde
19580 78 2b 2b 29 0d 0a 20 20 20 20 20 20 20 20 20 20  x++)..          
19590 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
195a0 20 20 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b       using (Mock
195b0 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65 79 20  RegistryKey key 
195c0 3d 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72  = RegistryHelper
195d0 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20  .OpenSubKey(..  
195e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
195f0 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 6b        rootKey, k
19600 65 79 4e 61 6d 65 73 5b 69 6e 64 65 78 5d 2c 20  eyNames[index], 
19610 66 61 6c 73 65 2c 20 77 68 61 74 49 66 2c 20 76  false, whatIf, v
19620 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20  erbose))..      
19630 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
19640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19650 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c   if (key == null
19660 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
19670 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69             conti
19680 6e 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  nue;....        
19690 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
196a0 75 73 65 53 75 62 4b 65 79 73 5b 69 6e 64 65 78  useSubKeys[index
196b0 5d 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ])..            
196c0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
196d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
196e0 20 20 20 66 6f 72 65 61 63 68 20 28 73 74 72 69     foreach (stri
196f0 6e 67 20 73 75 62 4b 65 79 4e 61 6d 65 20 69 6e  ng subKeyName in
19700 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e   RegistryHelper.
19710 47 65 74 53 75 62 4b 65 79 4e 61 6d 65 73 28 0d  GetSubKeyNames(.
19720 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
19730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19740 20 6b 65 79 2c 20 77 68 61 74 49 66 2c 20 76 65   key, whatIf, ve
19750 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20  rbose))..       
19760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19770 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
19780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19790 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73  using (MockRegis
197a0 74 72 79 4b 65 79 20 73 75 62 4b 65 79 20 3d 20  tryKey subKey = 
197b0 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 4f  RegistryHelper.O
197c0 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20  penSubKey(..    
197d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
197e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
197f0 6b 65 79 2c 20 73 75 62 4b 65 79 4e 61 6d 65 2c  key, subKeyName,
19800 20 66 61 6c 73 65 2c 20 77 68 61 74 49 66 2c 20   false, whatIf, 
19810 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20  verbose))..     
19820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19830 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
19840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19850 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73 75            if (su
19860 62 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  bKey == null).. 
19870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19890 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 0d 0a     continue;....
198a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
198b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
198c0 6f 62 6a 65 63 74 20 76 61 6c 75 65 20 3d 20 52  object value = R
198d0 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 47 65  egistryHelper.Ge
198e0 74 56 61 6c 75 65 28 0d 0a 20 20 20 20 20 20 20  tValue(..       
198f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19900 20 20 20 20 20 20 20 20 20 20 20 20 20 73 75 62               sub
19910 4b 65 79 2c 20 76 61 6c 75 65 4e 61 6d 65 73 5b  Key, valueNames[
19920 69 6e 64 65 78 5d 2c 20 6e 75 6c 6c 2c 20 77 68  index], null, wh
19930 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20  atIf,..         
19940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19950 20 20 20 20 20 20 20 20 20 20 20 76 65 72 62 6f             verbo
19960 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  se);....        
19970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19980 20 20 20 20 20 20 20 20 69 66 20 28 21 28 76 61          if (!(va
19990 6c 75 65 20 69 73 20 73 74 72 69 6e 67 29 29 0d  lue is string)).
199a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
199b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
199c0 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a       continue;..
199d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
199e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
199f0 20 20 73 74 72 69 6e 67 20 70 61 74 68 20 3d 20    string path = 
19a00 28 73 74 72 69 6e 67 29 76 61 6c 75 65 3b 0d 0a  (string)value;..
19a10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
19a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19a30 20 20 69 66 20 28 21 44 69 72 65 63 74 6f 72 79    if (!Directory
19a40 2e 45 78 69 73 74 73 28 70 61 74 68 29 29 0d 0a  .Exists(path))..
19a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19a70 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 0d      continue;...
19a80 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
19a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19aa0 20 70 61 74 68 20 3d 20 50 61 74 68 2e 43 6f 6d   path = Path.Com
19ab0 62 69 6e 65 28 70 61 74 68 2c 20 22 62 69 6e 22  bine(path, "bin"
19ac0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
19ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19ae0 20 20 20 20 20 20 69 66 20 28 21 44 69 72 65 63        if (!Direc
19af0 74 6f 72 79 2e 45 78 69 73 74 73 28 70 61 74 68  tory.Exists(path
19b00 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
19b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19b20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65          continue
19b30 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
19b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19b50 20 20 20 20 20 69 66 20 28 53 74 72 69 6e 67 2e       if (String.
19b60 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 66 69  IsNullOrEmpty(fi
19b70 6c 65 4e 61 6d 65 29 29 0d 0a 20 20 20 20 20 20  leName))..      
19b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19b90 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
19ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19bc0 20 72 65 73 75 6c 74 73 2e 41 64 64 28 73 75 62   results.Add(sub
19bd0 4b 65 79 2e 4e 61 6d 65 2c 20 70 61 74 68 29 3b  Key.Name, path);
19be0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
19bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19c00 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d        continue;.
19c10 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
19c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19c30 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
19c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19c50 20 20 20 20 20 20 70 61 74 68 20 3d 20 50 61 74        path = Pat
19c60 68 2e 43 6f 6d 62 69 6e 65 28 70 61 74 68 2c 20  h.Combine(path, 
19c70 66 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20  fileName);....  
19c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
19ca0 20 28 46 69 6c 65 2e 45 78 69 73 74 73 28 70 61   (File.Exists(pa
19cb0 74 68 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  th))..          
19cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19cd0 20 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74            result
19ce0 73 2e 41 64 64 28 73 75 62 4b 65 79 2e 4e 61 6d  s.Add(subKey.Nam
19cf0 65 2c 20 70 61 74 68 29 3b 0d 0a 20 20 20 20 20  e, path);..     
19d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19d10 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
19d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19d30 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
19d40 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
19d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19d60 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20  else..          
19d70 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
19d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19d90 20 20 20 20 20 6f 62 6a 65 63 74 20 76 61 6c 75       object valu
19da0 65 20 3d 20 52 65 67 69 73 74 72 79 48 65 6c 70  e = RegistryHelp
19db0 65 72 2e 47 65 74 56 61 6c 75 65 28 0d 0a 20 20  er.GetValue(..  
19dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19dd0 20 20 20 20 20 20 20 20 20 20 6b 65 79 2c 20 76            key, v
19de0 61 6c 75 65 4e 61 6d 65 73 5b 69 6e 64 65 78 5d  alueNames[index]
19df0 2c 20 6e 75 6c 6c 2c 20 77 68 61 74 49 66 2c 20  , null, whatIf, 
19e00 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20  verbose);....   
19e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19e20 20 20 20 20 20 69 66 20 28 21 28 76 61 6c 75 65       if (!(value
19e30 20 69 73 20 73 74 72 69 6e 67 29 29 0d 0a 20 20   is string))..  
19e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19e50 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e            contin
19e60 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ue;....         
19e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
19e80 74 72 69 6e 67 20 70 61 74 68 20 3d 20 28 73 74  tring path = (st
19e90 72 69 6e 67 29 76 61 6c 75 65 3b 0d 0a 0d 0a 20  ring)value;.... 
19ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19eb0 20 20 20 20 20 20 20 69 66 20 28 21 44 69 72 65         if (!Dire
19ec0 63 74 6f 72 79 2e 45 78 69 73 74 73 28 70 61 74  ctory.Exists(pat
19ed0 68 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  h))..           
19ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19ef0 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 0d 0a 20 20   continue;....  
19f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19f10 20 20 20 20 20 20 70 61 74 68 20 3d 20 50 61 74        path = Pat
19f20 68 2e 43 6f 6d 62 69 6e 65 28 70 61 74 68 2c 20  h.Combine(path, 
19f30 22 62 69 6e 22 29 3b 0d 0a 0d 0a 20 20 20 20 20  "bin");....     
19f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19f50 20 20 20 69 66 20 28 21 44 69 72 65 63 74 6f 72     if (!Director
19f60 79 2e 45 78 69 73 74 73 28 70 61 74 68 29 29 0d  y.Exists(path)).
19f70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
19f80 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
19f90 74 69 6e 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  tinue;....      
19fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19fb0 20 20 69 66 20 28 53 74 72 69 6e 67 2e 49 73 4e    if (String.IsN
19fc0 75 6c 6c 4f 72 45 6d 70 74 79 28 66 69 6c 65 4e  ullOrEmpty(fileN
19fd0 61 6d 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ame))..         
19fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
19ff0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1a000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
1a010 73 75 6c 74 73 2e 41 64 64 28 6b 65 79 2e 4e 61  sults.Add(key.Na
1a020 6d 65 2c 20 70 61 74 68 29 3b 0d 0a 20 20 20 20  me, path);..    
1a030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a040 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65          continue
1a050 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
1a060 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
1a070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a080 20 20 20 20 20 20 20 20 70 61 74 68 20 3d 20 50          path = P
1a090 61 74 68 2e 43 6f 6d 62 69 6e 65 28 70 61 74 68  ath.Combine(path
1a0a0 2c 20 66 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a  , fileName);....
1a0b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a0c0 20 20 20 20 20 20 20 20 69 66 20 28 46 69 6c 65          if (File
1a0d0 2e 45 78 69 73 74 73 28 70 61 74 68 29 29 0d 0a  .Exists(path))..
1a0e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a0f0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75              resu
1a100 6c 74 73 2e 41 64 64 28 6b 65 79 2e 4e 61 6d 65  lts.Add(key.Name
1a110 2c 20 70 61 74 68 29 3b 0d 0a 20 20 20 20 20 20  , path);..      
1a120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
1a130 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1a140 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
1a150 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
1a160 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
1a170 20 2f 2f 20 4e 4f 54 45 3a 20 49 66 20 77 65 20   // NOTE: If we 
1a180 66 6f 75 6e 64 20 73 6f 6d 65 20 72 65 73 75 6c  found some resul
1a190 74 73 2c 20 72 65 74 75 72 6e 20 74 68 65 20 6c  ts, return the l
1a1a0 61 73 74 20 28 6c 61 74 65 73 74 29 20 6f 6e 65  ast (latest) one
1a1b0 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
1a1c0 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  /..            i
1a1d0 66 20 28 72 65 73 75 6c 74 73 2e 43 6f 75 6e 74  f (results.Count
1a1e0 20 3e 20 30 29 0d 0a 20 20 20 20 20 20 20 20 20   > 0)..         
1a1f0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 72 65         return re
1a200 73 75 6c 74 73 5b 6e 65 77 20 53 74 72 69 6e 67  sults[new String
1a210 4c 69 73 74 28 72 65 73 75 6c 74 73 2e 4b 65 79  List(results.Key
1a220 73 29 5b 72 65 73 75 6c 74 73 2e 43 6f 75 6e 74  s)[results.Count
1a230 20 2d 20 31 5d 5d 3b 0d 0a 0d 0a 20 20 20 20 20   - 1]];....     
1a240 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75         return nu
1a250 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ll;..        }..
1a260 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
1a270 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  on....        //
1a280 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a290 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a2a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a2b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a2c0 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
1a2d0 20 23 72 65 67 69 6f 6e 20 50 65 72 2d 46 72 61   #region Per-Fra
1a2e0 6d 65 77 6f 72 6b 2f 50 6c 61 74 66 6f 72 6d 20  mework/Platform 
1a2f0 48 61 6e 64 6c 69 6e 67 0d 0a 20 20 20 20 20 20  Handling..      
1a300 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
1a310 20 76 6f 69 64 20 49 6e 69 74 69 61 6c 69 7a 65   void Initialize
1a320 46 72 61 6d 65 77 6f 72 6b 4c 69 73 74 28 0d 0a  FrameworkList(..
1a330 20 20 20 20 20 20 20 20 20 20 20 20 43 6f 6e 66              Conf
1a340 69 67 75 72 61 74 69 6f 6e 20 63 6f 6e 66 69 67  iguration config
1a350 75 72 61 74 69 6f 6e 2c 0d 0a 20 20 20 20 20 20  uration,..      
1a360 20 20 20 20 20 20 72 65 66 20 46 72 61 6d 65 77        ref Framew
1a370 6f 72 6b 4c 69 73 74 20 66 72 61 6d 65 77 6f 72  orkList framewor
1a380 6b 4c 69 73 74 0d 0a 20 20 20 20 20 20 20 20 20  kList..         
1a390 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d     )..        {.
1a3a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
1a3b0 28 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 20 3d  (frameworkList =
1a3c0 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
1a3d0 20 20 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f           framewo
1a3e0 72 6b 4c 69 73 74 20 3d 20 6e 65 77 20 46 72 61  rkList = new Fra
1a3f0 6d 65 77 6f 72 6b 4c 69 73 74 28 29 3b 0d 0a 0d  meworkList();...
1a400 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
1a410 28 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 52  (frameworkList.R
1a420 6f 6f 74 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d  ootKey == null).
1a430 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1a440 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 52   frameworkList.R
1a450 6f 6f 74 4b 65 79 20 3d 20 52 65 67 69 73 74 72  ootKey = Registr
1a460 79 2e 4c 6f 63 61 6c 4d 61 63 68 69 6e 65 3b 0d  y.LocalMachine;.
1a470 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
1a480 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a490 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a4a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a4b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a4c0 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
1a4d0 20 20 69 66 20 28 66 72 61 6d 65 77 6f 72 6b 4c    if (frameworkL
1a4e0 69 73 74 2e 4e 61 6d 65 73 20 3d 3d 20 6e 75 6c  ist.Names == nul
1a4f0 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
1a500 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
1a510 20 20 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74     frameworkList
1a520 2e 4e 61 6d 65 73 20 3d 20 6e 65 77 20 53 74 72  .Names = new Str
1a530 69 6e 67 4c 69 73 74 28 29 3b 0d 0a 0d 0a 20 20  ingList();....  
1a540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
1a550 20 28 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e   ((configuration
1a560 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 21 63 6f   == null) || !co
1a570 6e 66 69 67 75 72 61 74 69 6f 6e 2e 4e 6f 44 65  nfiguration.NoDe
1a580 73 6b 74 6f 70 29 0d 0a 20 20 20 20 20 20 20 20  sktop)..        
1a590 20 20 20 20 20 20 20 20 20 20 20 20 66 72 61 6d              fram
1a5a0 65 77 6f 72 6b 4c 69 73 74 2e 4e 61 6d 65 73 2e  eworkList.Names.
1a5b0 41 64 64 28 22 2e 4e 45 54 46 72 61 6d 65 77 6f  Add(".NETFramewo
1a5c0 72 6b 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  rk");....       
1a5d0 20 20 20 20 20 20 20 20 20 69 66 20 28 28 63 6f           if ((co
1a5e0 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20 6e  nfiguration == n
1a5f0 75 6c 6c 29 20 7c 7c 20 21 63 6f 6e 66 69 67 75  ull) || !configu
1a600 72 61 74 69 6f 6e 2e 4e 6f 43 6f 6d 70 61 63 74  ration.NoCompact
1a610 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
1a620 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
1a630 20 20 20 20 20 20 20 20 20 20 66 72 61 6d 65 77            framew
1a640 6f 72 6b 4c 69 73 74 2e 4e 61 6d 65 73 2e 41 64  orkList.Names.Ad
1a650 64 28 22 2e 4e 45 54 43 6f 6d 70 61 63 74 46 72  d(".NETCompactFr
1a660 61 6d 65 77 6f 72 6b 22 29 3b 0d 0a 20 20 20 20  amework");..    
1a670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a680 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e 61  frameworkList.Na
1a690 6d 65 73 2e 41 64 64 28 22 2e 4e 45 54 43 6f 6d  mes.Add(".NETCom
1a6a0 70 61 63 74 46 72 61 6d 65 77 6f 72 6b 22 29 3b  pactFramework");
1a6b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1a6c0 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4c        frameworkL
1a6d0 69 73 74 2e 4e 61 6d 65 73 2e 41 64 64 28 22 2e  ist.Names.Add(".
1a6e0 4e 45 54 43 6f 6d 70 61 63 74 46 72 61 6d 65 77  NETCompactFramew
1a6f0 6f 72 6b 22 29 3b 0d 0a 20 20 20 20 20 20 20 20  ork");..        
1a700 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
1a710 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
1a720 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f  ////////////////
1a760 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
1a770 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 66             if (f
1a780 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 56 65 72  rameworkList.Ver
1a790 73 69 6f 6e 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  sions == null)..
1a7a0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
1a7b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66                 f
1a7c0 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 56 65 72  rameworkList.Ver
1a7d0 73 69 6f 6e 73 20 3d 20 6e 65 77 20 56 65 72 73  sions = new Vers
1a7e0 69 6f 6e 4d 61 70 28 29 3b 0d 0a 0d 0a 20 20 20  ionMap();....   
1a7f0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
1a800 28 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20  ((configuration 
1a810 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 21 63 6f 6e  == null) || !con
1a820 66 69 67 75 72 61 74 69 6f 6e 2e 4e 6f 44 65 73  figuration.NoDes
1a830 6b 74 6f 70 29 0d 0a 20 20 20 20 20 20 20 20 20  ktop)..         
1a840 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
1a850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 56 65                Ve
1a860 72 73 69 6f 6e 4c 69 73 74 20 64 65 73 6b 74 6f  rsionList deskto
1a870 70 56 65 72 73 69 6f 6e 4c 69 73 74 20 3d 20 6e  pVersionList = n
1a880 65 77 20 56 65 72 73 69 6f 6e 4c 69 73 74 28 29  ew VersionList()
1a890 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
1a8a0 20 20 20 20 20 20 20 20 20 69 66 20 28 28 63 6f           if ((co
1a8b0 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20 6e  nfiguration == n
1a8c0 75 6c 6c 29 20 7c 7c 20 21 63 6f 6e 66 69 67 75  ull) || !configu
1a8d0 72 61 74 69 6f 6e 2e 4e 6f 4e 65 74 46 78 32 30  ration.NoNetFx20
1a8e0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
1a8f0 20 20 20 20 20 20 20 20 20 20 20 64 65 73 6b 74             deskt
1a900 6f 70 56 65 72 73 69 6f 6e 4c 69 73 74 2e 41 64  opVersionList.Ad
1a910 64 28 6e 65 77 20 56 65 72 73 69 6f 6e 28 32 2c  d(new Version(2,
1a920 20 30 2c 20 35 30 37 32 37 29 29 3b 0d 0a 0d 0a   0, 50727));....
1a930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a940 20 20 20 20 69 66 20 28 28 63 6f 6e 66 69 67 75      if ((configu
1a950 72 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20  ration == null) 
1a960 7c 7c 20 21 63 6f 6e 66 69 67 75 72 61 74 69 6f  || !configuratio
1a970 6e 2e 4e 6f 4e 65 74 46 78 34 30 29 0d 0a 20 20  n.NoNetFx40)..  
1a980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a990 20 20 20 20 20 20 64 65 73 6b 74 6f 70 56 65 72        desktopVer
1a9a0 73 69 6f 6e 4c 69 73 74 2e 41 64 64 28 6e 65 77  sionList.Add(new
1a9b0 20 56 65 72 73 69 6f 6e 28 34 2c 20 30 2c 20 33   Version(4, 0, 3
1a9c0 30 33 31 39 29 29 3b 0d 0a 0d 0a 20 20 20 20 20  0319));....     
1a9d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66                 f
1a9e0 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 56 65 72  rameworkList.Ver
1a9f0 73 69 6f 6e 73 2e 41 64 64 28 22 2e 4e 45 54 46  sions.Add(".NETF
1aa00 72 61 6d 65 77 6f 72 6b 22 2c 0d 0a 20 20 20 20  ramework",..    
1aa10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aa20 20 20 20 20 64 65 73 6b 74 6f 70 56 65 72 73 69      desktopVersi
1aa30 6f 6e 4c 69 73 74 29 3b 0d 0a 20 20 20 20 20 20  onList);..      
1aa40 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
1aa50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
1aa60 66 20 28 28 63 6f 6e 66 69 67 75 72 61 74 69 6f  f ((configuratio
1aa70 6e 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 21 63  n == null) || !c
1aa80 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 4e 6f 43  onfiguration.NoC
1aa90 6f 6d 70 61 63 74 29 0d 0a 20 20 20 20 20 20 20  ompact)..       
1aaa0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
1aab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aac0 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 56 65  frameworkList.Ve
1aad0 72 73 69 6f 6e 73 2e 41 64 64 28 22 2e 4e 45 54  rsions.Add(".NET
1aae0 43 6f 6d 70 61 63 74 46 72 61 6d 65 77 6f 72 6b  CompactFramework
1aaf0 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
1ab00 20 20 20 20 20 20 20 20 20 20 20 20 6e 65 77 20              new 
1ab10 56 65 72 73 69 6f 6e 4c 69 73 74 28 6e 65 77 20  VersionList(new 
1ab20 56 65 72 73 69 6f 6e 5b 5d 20 7b 0d 0a 20 20 20  Version[] {..   
1ab30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ab40 20 20 20 20 20 6e 65 77 20 56 65 72 73 69 6f 6e       new Version
1ab50 28 32 2c 20 30 2c 20 30 2c 20 30 29 2c 20 6e 65  (2, 0, 0, 0), ne
1ab60 77 20 56 65 72 73 69 6f 6e 28 33 2c 20 35 2c 20  w Version(3, 5, 
1ab70 30 2c 20 30 29 0d 0a 20 20 20 20 20 20 20 20 20  0, 0)..         
1ab80 20 20 20 20 20 20 20 20 20 20 20 7d 29 29 3b 0d             }));.
1ab90 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1aba0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
1abb0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
1abc0 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
1abd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1abe0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1abf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ac00 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
1ac10 20 20 20 20 69 66 20 28 66 72 61 6d 65 77 6f 72      if (framewor
1ac20 6b 4c 69 73 74 2e 50 6c 61 74 66 6f 72 6d 4e 61  kList.PlatformNa
1ac30 6d 65 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  mes == null)..  
1ac40 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1ac50 20 20 20 20 20 20 20 20 20 20 20 20 20 66 72 61               fra
1ac60 6d 65 77 6f 72 6b 4c 69 73 74 2e 50 6c 61 74 66  meworkList.Platf
1ac70 6f 72 6d 4e 61 6d 65 73 20 3d 20 6e 65 77 20 53  ormNames = new S
1ac80 74 72 69 6e 67 4c 69 73 74 28 29 3b 0d 0a 0d 0a  tringList();....
1ac90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aca0 69 66 20 28 28 63 6f 6e 66 69 67 75 72 61 74 69  if ((configurati
1acb0 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 21  on == null) || !
1acc0 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 4e 6f  configuration.No
1acd0 44 65 73 6b 74 6f 70 29 0d 0a 20 20 20 20 20 20  Desktop)..      
1ace0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 72                fr
1acf0 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 50 6c 61 74  ameworkList.Plat
1ad00 66 6f 72 6d 4e 61 6d 65 73 2e 41 64 64 28 6e 75  formNames.Add(nu
1ad10 6c 6c 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ll);....        
1ad20 20 20 20 20 20 20 20 20 69 66 20 28 28 63 6f 6e          if ((con
1ad30 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20 6e 75  figuration == nu
1ad40 6c 6c 29 20 7c 7c 20 21 63 6f 6e 66 69 67 75 72  ll) || !configur
1ad50 61 74 69 6f 6e 2e 4e 6f 43 6f 6d 70 61 63 74 29  ation.NoCompact)
1ad60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1ad70 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
1ad80 20 20 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f           framewo
1ad90 72 6b 4c 69 73 74 2e 50 6c 61 74 66 6f 72 6d 4e  rkList.PlatformN
1ada0 61 6d 65 73 2e 41 64 64 28 22 50 6f 63 6b 65 74  ames.Add("Pocket
1adb0 50 43 22 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  PC");..         
1adc0 20 20 20 20 20 20 20 20 20 20 20 66 72 61 6d 65             frame
1add0 77 6f 72 6b 4c 69 73 74 2e 50 6c 61 74 66 6f 72  workList.Platfor
1ade0 6d 4e 61 6d 65 73 2e 41 64 64 28 22 53 6d 61 72  mNames.Add("Smar
1adf0 74 70 68 6f 6e 65 22 29 3b 0d 0a 20 20 20 20 20  tphone");..     
1ae00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66                 f
1ae10 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 50 6c 61  rameworkList.Pla
1ae20 74 66 6f 72 6d 4e 61 6d 65 73 2e 41 64 64 28 22  tformNames.Add("
1ae30 57 69 6e 64 6f 77 73 43 45 22 29 3b 0d 0a 20 20  WindowsCE");..  
1ae40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
1ae50 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
1ae60 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
1ae70 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
1ae80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ae90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1aea0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1aeb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
1aec0 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
1aed0 73 74 61 74 69 63 20 62 6f 6f 6c 20 48 61 76 65  static bool Have
1aee0 46 72 61 6d 65 77 6f 72 6b 28 0d 0a 20 20 20 20  Framework(..    
1aef0 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79          Registry
1af00 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20  Key rootKey,..  
1af10 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
1af20 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 0d   frameworkName,.
1af30 0a 20 20 20 20 20 20 20 20 20 20 20 20 56 65 72  .            Ver
1af40 73 69 6f 6e 20 66 72 61 6d 65 77 6f 72 6b 56 65  sion frameworkVe
1af50 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20  rsion,..        
1af60 20 20 20 20 73 74 72 69 6e 67 20 70 6c 61 74 66      string platf
1af70 6f 72 6d 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20  ormName,..      
1af80 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49        bool whatI
1af90 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f,..            
1afa0 62 6f 6f 6c 20 76 65 72 62 6f 73 65 0d 0a 20 20  bool verbose..  
1afb0 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
1afc0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1afd0 20 20 20 20 73 74 72 69 6e 67 20 66 6f 72 6d 61      string forma
1afe0 74 20 3d 20 21 53 74 72 69 6e 67 2e 49 73 4e 75  t = !String.IsNu
1aff0 6c 6c 4f 72 45 6d 70 74 79 28 70 6c 61 74 66 6f  llOrEmpty(platfo
1b000 72 6d 4e 61 6d 65 29 20 3f 0d 0a 20 20 20 20 20  rmName) ?..     
1b010 20 20 20 20 20 20 20 20 20 20 20 22 53 6f 66 74             "Soft
1b020 77 61 72 65 5c 5c 4d 69 63 72 6f 73 6f 66 74 5c  ware\\Microsoft\
1b030 5c 7b 30 7d 5c 5c 76 7b 31 7d 5c 5c 7b 32 7d 22  \{0}\\v{1}\\{2}"
1b040 20 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   :..            
1b050 20 20 20 20 22 53 6f 66 74 77 61 72 65 5c 5c 4d      "Software\\M
1b060 69 63 72 6f 73 6f 66 74 5c 5c 7b 30 7d 5c 5c 76  icrosoft\\{0}\\v
1b070 7b 31 7d 22 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  {1}";....       
1b080 20 20 20 20 20 73 74 72 69 6e 67 20 6b 65 79 4e       string keyN
1b090 61 6d 65 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72  ame = String.For
1b0a0 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
1b0b0 20 20 20 20 20 20 66 6f 72 6d 61 74 2c 20 66 72        format, fr
1b0c0 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 20 66 72 61  ameworkName, fra
1b0d0 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 20 70  meworkVersion, p
1b0e0 6c 61 74 66 6f 72 6d 4e 61 6d 65 29 3b 0d 0a 0d  latformName);...
1b0f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69  .            usi
1b100 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79  ng (MockRegistry
1b110 4b 65 79 20 6b 65 79 20 3d 20 52 65 67 69 73 74  Key key = Regist
1b120 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62  ryHelper.OpenSub
1b130 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  Key(..          
1b140 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65            rootKe
1b150 79 2c 20 6b 65 79 4e 61 6d 65 2c 20 66 61 6c 73  y, keyName, fals
1b160 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f  e, whatIf, verbo
1b170 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  se))..          
1b180 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
1b190 20 20 20 20 20 69 66 20 28 6b 65 79 20 3d 3d 20       if (key == 
1b1a0 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
1b1b0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
1b1c0 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20  n false;....    
1b1d0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
1b1e0 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 20 21 3d 20  platformName != 
1b1f0 6e 75 6c 6c 29 20 2f 2f 20 4e 4f 54 45 3a 20 53  null) // NOTE: S
1b200 6b 69 70 20 6e 6f 6e 2d 64 65 73 6b 74 6f 70 2e  kip non-desktop.
1b210 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1b220 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75        return tru
1b230 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
1b240 20 20 20 20 20 20 73 74 72 69 6e 67 20 64 69 72        string dir
1b250 65 63 74 6f 72 79 20 3d 20 47 65 74 46 72 61 6d  ectory = GetFram
1b260 65 77 6f 72 6b 44 69 72 65 63 74 6f 72 79 28 0d  eworkDirectory(.
1b270 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1b280 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 66 72       rootKey, fr
1b290 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 20  ameworkVersion, 
1b2a0 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29  whatIf, verbose)
1b2b0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
1b2c0 20 20 20 20 20 69 66 20 28 53 74 72 69 6e 67 2e       if (String.
1b2d0 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 64 69  IsNullOrEmpty(di
1b2e0 72 65 63 74 6f 72 79 29 29 0d 0a 20 20 20 20 20  rectory))..     
1b2f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
1b300 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a  eturn false;....
1b310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b320 69 66 20 28 21 44 69 72 65 63 74 6f 72 79 2e 45  if (!Directory.E
1b330 78 69 73 74 73 28 64 69 72 65 63 74 6f 72 79 29  xists(directory)
1b340 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
1b350 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
1b360 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  lse;....        
1b370 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74          return t
1b380 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  rue;..          
1b390 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a    }..        }..
1b3a0 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ..        //////
1b3b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b3c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b3d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b3e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b3f0 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69  /....        pri
1b400 76 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f 6c  vate static bool
1b410 20 46 6f 72 45 61 63 68 46 72 61 6d 65 77 6f 72   ForEachFramewor
1b420 6b 43 6f 6e 66 69 67 28 0d 0a 20 20 20 20 20 20  kConfig(..      
1b430 20 20 20 20 20 20 46 72 61 6d 65 77 6f 72 6b 4c        FrameworkL
1b440 69 73 74 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73  ist frameworkLis
1b450 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t,..            
1b460 46 72 61 6d 65 77 6f 72 6b 43 6f 6e 66 69 67 43  FrameworkConfigC
1b470 61 6c 6c 62 61 63 6b 20 63 61 6c 6c 62 61 63 6b  allback callback
1b480 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  ,..            s
1b490 74 72 69 6e 67 20 69 6e 76 61 72 69 61 6e 74 2c  tring invariant,
1b4a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
1b4b0 72 69 6e 67 20 6e 61 6d 65 2c 0d 0a 20 20 20 20  ring name,..    
1b4c0 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 64          string d
1b4d0 65 73 63 72 69 70 74 69 6f 6e 2c 0d 0a 20 20 20  escription,..   
1b4e0 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
1b4f0 74 79 70 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20  typeName,..     
1b500 20 20 20 20 20 20 20 41 73 73 65 6d 62 6c 79 4e         AssemblyN
1b510 61 6d 65 20 61 73 73 65 6d 62 6c 79 4e 61 6d 65  ame assemblyName
1b520 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6f  ,..            o
1b530 62 6a 65 63 74 20 63 6c 69 65 6e 74 44 61 74 61  bject clientData
1b540 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
1b550 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20  ool whatIf,..   
1b560 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65           bool ve
1b570 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 20  rbose,..        
1b580 20 20 20 20 72 65 66 20 62 6f 6f 6c 20 73 61 76      ref bool sav
1b590 65 64 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ed,..           
1b5a0 20 72 65 66 20 73 74 72 69 6e 67 20 65 72 72 6f   ref string erro
1b5b0 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29  r..            )
1b5c0 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
1b5d0 20 20 20 20 20 20 20 20 20 69 66 20 28 66 72 61           if (fra
1b5e0 6d 65 77 6f 72 6b 4c 69 73 74 20 3d 3d 20 6e 75  meworkList == nu
1b5f0 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
1b600 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1b610 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69 6e 76      error = "inv
1b620 61 6c 69 64 20 66 72 61 6d 65 77 6f 72 6b 20 6c  alid framework l
1b630 69 73 74 22 3b 0d 0a 20 20 20 20 20 20 20 20 20  ist";..         
1b640 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
1b650 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lse;..          
1b660 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
1b670 20 20 20 52 65 67 69 73 74 72 79 4b 65 79 20 72     RegistryKey r
1b680 6f 6f 74 4b 65 79 20 3d 20 66 72 61 6d 65 77 6f  ootKey = framewo
1b690 72 6b 4c 69 73 74 2e 52 6f 6f 74 4b 65 79 3b 0d  rkList.RootKey;.
1b6a0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
1b6b0 66 20 28 72 6f 6f 74 4b 65 79 20 3d 3d 20 6e 75  f (rootKey == nu
1b6c0 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
1b6d0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1b6e0 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69 6e 76      error = "inv
1b6f0 61 6c 69 64 20 72 6f 6f 74 20 6b 65 79 22 3b 0d  alid root key";.
1b700 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1b710 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
1b720 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
1b730 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
1b740 28 21 4f 62 6a 65 63 74 2e 52 65 66 65 72 65 6e  (!Object.Referen
1b750 63 65 45 71 75 61 6c 73 28 72 6f 6f 74 4b 65 79  ceEquals(rootKey
1b760 2c 20 52 65 67 69 73 74 72 79 2e 43 75 72 72 65  , Registry.Curre
1b770 6e 74 55 73 65 72 29 20 26 26 0d 0a 20 20 20 20  ntUser) &&..    
1b780 20 20 20 20 20 20 20 20 20 20 20 20 21 4f 62 6a              !Obj
1b790 65 63 74 2e 52 65 66 65 72 65 6e 63 65 45 71 75  ect.ReferenceEqu
1b7a0 61 6c 73 28 72 6f 6f 74 4b 65 79 2c 20 52 65 67  als(rootKey, Reg
1b7b0 69 73 74 72 79 2e 4c 6f 63 61 6c 4d 61 63 68 69  istry.LocalMachi
1b7c0 6e 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ne))..          
1b7d0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
1b7e0 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 72 6f       error = "ro
1b7f0 6f 74 20 6b 65 79 20 6d 75 73 74 20 62 65 20 70  ot key must be p
1b800 65 72 2d 75 73 65 72 20 6f 72 20 70 65 72 2d 6d  er-user or per-m
1b810 61 63 68 69 6e 65 22 3b 0d 0a 20 20 20 20 20 20  achine";..      
1b820 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
1b830 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
1b840 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
1b850 20 20 20 20 20 20 69 66 20 28 66 72 61 6d 65 77        if (framew
1b860 6f 72 6b 4c 69 73 74 2e 4e 61 6d 65 73 20 3d 3d  orkList.Names ==
1b870 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
1b880 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1b890 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22         error = "
1b8a0 6e 6f 20 66 72 61 6d 65 77 6f 72 6b 20 6e 61 6d  no framework nam
1b8b0 65 73 20 66 6f 75 6e 64 22 3b 0d 0a 20 20 20 20  es found";..    
1b8c0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
1b8d0 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
1b8e0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
1b8f0 20 20 20 20 20 20 20 20 69 66 20 28 66 72 61 6d          if (fram
1b900 65 77 6f 72 6b 4c 69 73 74 2e 56 65 72 73 69 6f  eworkList.Versio
1b910 6e 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ns == null)..   
1b920 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
1b930 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
1b940 72 20 3d 20 22 6e 6f 20 66 72 61 6d 65 77 6f 72  r = "no framewor
1b950 6b 20 76 65 72 73 69 6f 6e 73 20 66 6f 75 6e 64  k versions found
1b960 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ";..            
1b970 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
1b980 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
1b990 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1b9a0 69 66 20 28 66 72 61 6d 65 77 6f 72 6b 4c 69 73  if (frameworkLis
1b9b0 74 2e 50 6c 61 74 66 6f 72 6d 4e 61 6d 65 73 20  t.PlatformNames 
1b9c0 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
1b9d0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1b9e0 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
1b9f0 20 22 6e 6f 20 70 6c 61 74 66 6f 72 6d 20 6e 61   "no platform na
1ba00 6d 65 73 20 66 6f 75 6e 64 22 3b 0d 0a 20 20 20  mes found";..   
1ba10 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
1ba20 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  urn false;..    
1ba30 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
1ba40 20 20 20 20 20 20 20 20 20 69 66 20 28 66 72 61           if (fra
1ba50 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e 61 6d 65 73  meworkList.Names
1ba60 2e 43 6f 75 6e 74 20 21 3d 20 66 72 61 6d 65 77  .Count != framew
1ba70 6f 72 6b 4c 69 73 74 2e 50 6c 61 74 66 6f 72 6d  orkList.Platform
1ba80 4e 61 6d 65 73 2e 43 6f 75 6e 74 29 0d 0a 20 20  Names.Count)..  
1ba90 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1baa0 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
1bab0 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d  or = String.Form
1bac0 61 74 28 22 66 72 61 6d 65 77 6f 72 6b 20 6e 61  at("framework na
1bad0 6d 65 20 63 6f 75 6e 74 20 7b 30 7d 20 64 6f 65  me count {0} doe
1bae0 73 20 6e 6f 74 20 22 20 2b 0d 0a 20 20 20 20 20  s not " +..     
1baf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
1bb00 6d 61 74 63 68 20 70 6c 61 74 66 6f 72 6d 20 6e  match platform n
1bb10 61 6d 65 20 63 6f 75 6e 74 20 7b 31 7d 22 2c 20  ame count {1}", 
1bb20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e 61  frameworkList.Na
1bb30 6d 65 73 2e 43 6f 75 6e 74 2c 0d 0a 20 20 20 20  mes.Count,..    
1bb40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bb50 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 50 6c  frameworkList.Pl
1bb60 61 74 66 6f 72 6d 4e 61 6d 65 73 2e 43 6f 75 6e  atformNames.Coun
1bb70 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  t);....         
1bb80 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
1bb90 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lse;..          
1bba0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
1bbb0 20 20 20 66 6f 72 20 28 69 6e 74 20 69 6e 64 65     for (int inde
1bbc0 78 20 3d 20 30 3b 20 69 6e 64 65 78 20 3c 20 66  x = 0; index < f
1bbd0 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e 61 6d  rameworkList.Nam
1bbe0 65 73 2e 43 6f 75 6e 74 3b 20 69 6e 64 65 78 2b  es.Count; index+
1bbf0 2b 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  +)..            
1bc00 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
1bc10 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
1bc20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20         // NOTE: 
1bc30 47 72 61 62 20 74 68 65 20 6e 61 6d 65 20 6f 66  Grab the name of
1bc40 20 74 68 65 20 66 72 61 6d 65 77 6f 72 6b 20 28   the framework (
1bc50 65 2e 67 2e 20 22 2e 4e 45 54 46 72 61 6d 65 77  e.g. ".NETFramew
1bc60 6f 72 6b 22 29 0d 0a 20 20 20 20 20 20 20 20 20  ork")..         
1bc70 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
1bc80 61 6e 64 20 74 68 65 20 6e 61 6d 65 20 6f 66 20  and the name of 
1bc90 74 68 65 20 70 6c 61 74 66 6f 72 6d 20 28 65 2e  the platform (e.
1bca0 67 2e 20 22 57 69 6e 64 6f 77 73 43 45 22 29 2e  g. "WindowsCE").
1bcb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1bcc0 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
1bcd0 20 20 20 20 20 20 73 74 72 69 6e 67 20 66 72 61        string fra
1bce0 6d 65 77 6f 72 6b 4e 61 6d 65 20 3d 20 66 72 61  meworkName = fra
1bcf0 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e 61 6d 65 73  meworkList.Names
1bd00 5b 69 6e 64 65 78 5d 3b 0d 0a 20 20 20 20 20 20  [index];..      
1bd10 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
1bd20 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 20 3d 20   platformName = 
1bd30 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 50 6c  frameworkList.Pl
1bd40 61 74 66 6f 72 6d 4e 61 6d 65 73 5b 69 6e 64 65  atformNames[inde
1bd50 78 5d 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  x];....         
1bd60 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
1bd70 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f             // NO
1bd80 54 45 3a 20 53 6b 69 70 20 61 6c 6c 20 6e 6f 6e  TE: Skip all non
1bd90 2d 64 65 73 6b 74 6f 70 20 66 72 61 6d 65 77 6f  -desktop framewo
1bda0 72 6b 73 20 28 69 2e 65 2e 20 69 66 20 74 68 65  rks (i.e. if the
1bdb0 20 70 6c 61 74 66 6f 72 6d 0d 0a 20 20 20 20 20   platform..     
1bdc0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20             //   
1bdd0 20 20 20 20 6e 61 6d 65 20 69 73 20 6e 6f 74 20      name is not 
1bde0 6e 75 6c 6c 29 2e 0d 0a 20 20 20 20 20 20 20 20  null)...        
1bdf0 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
1be00 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
1be10 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 20 21 3d 20  platformName != 
1be20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
1be30 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69             conti
1be40 6e 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  nue;....        
1be50 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
1be60 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e              // N
1be70 4f 54 45 3a 20 47 72 61 62 20 74 68 65 20 73 75  OTE: Grab the su
1be80 70 70 6f 72 74 65 64 20 76 65 72 73 69 6f 6e 73  pported versions
1be90 20 6f 66 20 74 68 69 73 20 70 61 72 74 69 63 75   of this particu
1bea0 6c 61 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20  lar..           
1beb0 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 66 72       //       fr
1bec0 61 6d 65 77 6f 72 6b 2e 0d 0a 20 20 20 20 20 20  amework...      
1bed0 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
1bee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 56 65                Ve
1bef0 72 73 69 6f 6e 4c 69 73 74 20 66 72 61 6d 65 77  rsionList framew
1bf00 6f 72 6b 56 65 72 73 69 6f 6e 4c 69 73 74 3b 0d  orkVersionList;.
1bf10 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1bf20 20 20 20 69 66 20 28 21 66 72 61 6d 65 77 6f 72     if (!framewor
1bf30 6b 4c 69 73 74 2e 56 65 72 73 69 6f 6e 73 2e 54  kList.Versions.T
1bf40 72 79 47 65 74 56 61 6c 75 65 28 0d 0a 20 20 20  ryGetValue(..   
1bf50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bf60 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4e 61       frameworkNa
1bf70 6d 65 2c 20 6f 75 74 20 66 72 61 6d 65 77 6f 72  me, out framewor
1bf80 6b 56 65 72 73 69 6f 6e 4c 69 73 74 29 20 7c 7c  kVersionList) ||
1bf90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1bfa0 20 20 20 20 20 20 28 66 72 61 6d 65 77 6f 72 6b        (framework
1bfb0 56 65 72 73 69 6f 6e 4c 69 73 74 20 3d 3d 20 6e  VersionList == n
1bfc0 75 6c 6c 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ull))..         
1bfd0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
1bfe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
1bff0 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20  ntinue;..       
1c000 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
1c010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 6f                fo
1c020 72 65 61 63 68 20 28 56 65 72 73 69 6f 6e 20 66  reach (Version f
1c030 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 20  rameworkVersion 
1c040 69 6e 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73  in frameworkVers
1c050 69 6f 6e 4c 69 73 74 29 0d 0a 20 20 20 20 20 20  ionList)..      
1c060 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1c070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c080 20 54 72 61 63 65 4f 70 73 2e 54 72 61 63 65 28   TraceOps.Trace(
1c090 0d 0a 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 54 72 61 63 65 50            TraceP
1c0b0 72 69 6f 72 69 74 79 2e 4c 6f 77 65 72 2c 20 74  riority.Lower, t
1c0c0 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74  raceCallback, St
1c0d0 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
1c0e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c0f0 20 20 20 20 20 20 22 66 72 61 6d 65 77 6f 72 6b        "framework
1c100 4e 61 6d 65 20 3d 20 7b 30 7d 2c 20 66 72 61 6d  Name = {0}, fram
1c110 65 77 6f 72 6b 56 65 72 73 69 6f 6e 20 3d 20 7b  eworkVersion = {
1c120 31 7d 2c 20 22 20 2b 0d 0a 20 20 20 20 20 20 20  1}, " +..       
1c130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c140 20 22 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 20 3d   "platformName =
1c150 20 7b 32 7d 22 2c 20 46 6f 72 44 69 73 70 6c 61   {2}", ForDispla
1c160 79 28 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 29  y(frameworkName)
1c170 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
1c180 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69             ForDi
1c190 73 70 6c 61 79 28 66 72 61 6d 65 77 6f 72 6b 56  splay(frameworkV
1c1a0 65 72 73 69 6f 6e 29 2c 0d 0a 20 20 20 20 20 20  ersion),..      
1c1b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c1c0 20 20 46 6f 72 44 69 73 70 6c 61 79 28 70 6c 61    ForDisplay(pla
1c1d0 74 66 6f 72 6d 4e 61 6d 65 29 29 2c 20 74 72 61  tformName)), tra
1c1e0 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a  ceCategory);....
1c1f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c200 20 20 20 20 69 66 20 28 21 48 61 76 65 46 72 61      if (!HaveFra
1c210 6d 65 77 6f 72 6b 28 0d 0a 20 20 20 20 20 20 20  mework(..       
1c220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c230 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 66 72       rootKey, fr
1c240 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 20 66 72 61  ameworkName, fra
1c250 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 0d 0a  meworkVersion,..
1c260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c270 20 20 20 20 20 20 20 20 20 20 20 20 70 6c 61 74              plat
1c280 66 6f 72 6d 4e 61 6d 65 2c 20 77 68 61 74 49 66  formName, whatIf
1c290 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20  , verbose))..   
1c2a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c2b0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1c2c0 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
1c2d0 65 4f 70 73 2e 54 72 61 63 65 28 0d 0a 20 20 20  eOps.Trace(..   
1c2e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c2f0 20 20 20 20 20 20 20 20 20 54 72 61 63 65 50 72           TracePr
1c300 69 6f 72 69 74 79 2e 4c 6f 77 2c 20 74 72 61 63  iority.Low, trac
1c310 65 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20  eCallback,..    
1c320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c330 20 20 20 20 20 20 20 20 22 2e 4e 45 54 20 46 72          ".NET Fr
1c340 61 6d 65 77 6f 72 6b 20 6e 6f 74 20 66 6f 75 6e  amework not foun
1c350 64 2c 20 73 6b 69 70 70 69 6e 67 2e 2e 2e 22 2c  d, skipping...",
1c360 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1c370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
1c380 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
1c390 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1c3a0 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75           continu
1c3b0 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
1c3c0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
1c3d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c3e0 20 69 66 20 28 63 61 6c 6c 62 61 63 6b 20 3d 3d   if (callback ==
1c3f0 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
1c400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c410 63 6f 6e 74 69 6e 75 65 3b 0d 0a 0d 0a 20 20 20  continue;....   
1c420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c430 20 73 74 72 69 6e 67 20 64 69 72 65 63 74 6f 72   string director
1c440 79 20 3d 20 47 65 74 46 72 61 6d 65 77 6f 72 6b  y = GetFramework
1c450 44 69 72 65 63 74 6f 72 79 28 0d 0a 20 20 20 20  Directory(..    
1c460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c470 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 66 72 61      rootKey, fra
1c480 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 20 77  meworkVersion, w
1c490 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 3b  hatIf, verbose);
1c4a0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1c4b0 20 20 20 20 20 20 20 20 69 66 20 28 53 74 72 69          if (Stri
1c4c0 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79  ng.IsNullOrEmpty
1c4d0 28 64 69 72 65 63 74 6f 72 79 29 29 0d 0a 20 20  (directory))..  
1c4e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c4f0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
1c500 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
1c510 63 65 4f 70 73 2e 54 72 61 63 65 28 0d 0a 20 20  ceOps.Trace(..  
1c520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c530 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 50            TraceP
1c540 72 69 6f 72 69 74 79 2e 4c 6f 77 2c 20 74 72 61  riority.Low, tra
1c550 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69  ceCallback, Stri
1c560 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
1c570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c580 20 20 20 20 20 20 20 20 22 2e 4e 45 54 20 46 72          ".NET Fr
1c590 61 6d 65 77 6f 72 6b 20 7b 30 7d 20 64 69 72 65  amework {0} dire
1c5a0 63 74 6f 72 79 20 69 73 20 69 6e 76 61 6c 69 64  ctory is invalid
1c5b0 2c 20 22 20 2b 0d 0a 20 20 20 20 20 20 20 20 20  , " +..         
1c5c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c5d0 20 20 20 22 73 6b 69 70 70 69 6e 67 2e 2e 2e 22     "skipping..."
1c5e0 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 66 72 61  , ForDisplay(fra
1c5f0 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 29 29 2c  meworkVersion)),
1c600 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1c610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
1c620 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
1c630 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1c640 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75           continu
1c650 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
1c660 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
1c670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c680 20 64 69 72 65 63 74 6f 72 79 20 3d 20 50 61 74   directory = Pat
1c690 68 2e 43 6f 6d 62 69 6e 65 28 64 69 72 65 63 74  h.Combine(direct
1c6a0 6f 72 79 2c 20 22 43 6f 6e 66 69 67 22 29 3b 0d  ory, "Config");.
1c6b0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1c6c0 20 20 20 20 20 20 20 69 66 20 28 21 44 69 72 65         if (!Dire
1c6d0 63 74 6f 72 79 2e 45 78 69 73 74 73 28 64 69 72  ctory.Exists(dir
1c6e0 65 63 74 6f 72 79 29 29 0d 0a 20 20 20 20 20 20  ectory))..      
1c6f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
1c700 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1c710 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70           TraceOp
1c720 73 2e 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20  s.Trace(..      
1c730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c740 20 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72        TracePrior
1c750 69 74 79 2e 4c 6f 77 2c 20 74 72 61 63 65 43 61  ity.Low, traceCa
1c760 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46  llback, String.F
1c770 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
1c780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c790 20 20 20 20 22 2e 4e 45 54 20 46 72 61 6d 65 77      ".NET Framew
1c7a0 6f 72 6b 20 7b 30 7d 20 64 69 72 65 63 74 6f 72  ork {0} director
1c7b0 79 20 7b 31 7d 20 64 6f 65 73 20 6e 6f 74 20 65  y {1} does not e
1c7c0 78 69 73 74 2c 20 22 20 2b 0d 0a 20 20 20 20 20  xist, " +..     
1c7d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c7e0 20 20 20 20 20 20 20 22 73 6b 69 70 70 69 6e 67         "skipping
1c7f0 2e 2e 2e 22 2c 20 46 6f 72 44 69 73 70 6c 61 79  ...", ForDisplay
1c800 28 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f  (frameworkVersio
1c810 6e 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n),..           
1c820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c830 20 46 6f 72 44 69 73 70 6c 61 79 28 64 69 72 65   ForDisplay(dire
1c840 63 74 6f 72 79 29 29 2c 20 74 72 61 63 65 43 61  ctory)), traceCa
1c850 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
1c860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c870 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20      continue;.. 
1c880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c890 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
1c8a0 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
1c8b0 6e 67 20 66 69 6c 65 4e 61 6d 65 20 3d 20 50 61  ng fileName = Pa
1c8c0 74 68 2e 43 6f 6d 62 69 6e 65 28 64 69 72 65 63  th.Combine(direc
1c8d0 74 6f 72 79 2c 20 22 6d 61 63 68 69 6e 65 2e 63  tory, "machine.c
1c8e0 6f 6e 66 69 67 22 29 3b 0d 0a 0d 0a 20 20 20 20  onfig");....    
1c8f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c900 69 66 20 28 21 46 69 6c 65 2e 45 78 69 73 74 73  if (!File.Exists
1c910 28 66 69 6c 65 4e 61 6d 65 29 29 0d 0a 20 20 20  (fileName))..   
1c920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c930 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1c940 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
1c950 65 4f 70 73 2e 54 72 61 63 65 28 0d 0a 20 20 20  eOps.Trace(..   
1c960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c970 20 20 20 20 20 20 20 20 20 54 72 61 63 65 50 72           TracePr
1c980 69 6f 72 69 74 79 2e 4c 6f 77 2c 20 74 72 61 63  iority.Low, trac
1c990 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e  eCallback, Strin
1c9a0 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
1c9b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c9c0 20 20 20 20 20 20 20 22 2e 4e 45 54 20 46 72 61         ".NET Fra
1c9d0 6d 65 77 6f 72 6b 20 7b 30 7d 20 66 69 6c 65 20  mework {0} file 
1c9e0 7b 31 7d 20 64 6f 65 73 20 6e 6f 74 20 65 78 69  {1} does not exi
1c9f0 73 74 2c 20 22 20 2b 0d 0a 20 20 20 20 20 20 20  st, " +..       
1ca00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ca10 20 20 20 20 20 22 73 6b 69 70 70 69 6e 67 2e 2e       "skipping..
1ca20 2e 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 66  .", ForDisplay(f
1ca30 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 29  rameworkVersion)
1ca40 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
1ca50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46                 F
1ca60 6f 72 44 69 73 70 6c 61 79 28 66 69 6c 65 4e 61  orDisplay(fileNa
1ca70 6d 65 29 29 2c 20 74 72 61 63 65 43 61 74 65 67  me)), traceCateg
1ca80 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
1ca90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1caa0 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20   continue;..    
1cab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cac0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
1cad0 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 6c 6f           bool lo
1cae0 63 61 6c 53 61 76 65 64 20 3d 20 66 61 6c 73 65  calSaved = false
1caf0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
1cb00 20 20 20 20 20 20 20 20 20 69 66 20 28 21 63 61           if (!ca
1cb10 6c 6c 62 61 63 6b 28 0d 0a 20 20 20 20 20 20 20  llback(..       
1cb20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cb30 20 20 20 20 20 66 69 6c 65 4e 61 6d 65 2c 20 69       fileName, i
1cb40 6e 76 61 72 69 61 6e 74 2c 20 6e 61 6d 65 2c 20  nvariant, name, 
1cb50 64 65 73 63 72 69 70 74 69 6f 6e 2c 20 74 79 70  description, typ
1cb60 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20  eName,..        
1cb70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cb80 20 20 20 20 61 73 73 65 6d 62 6c 79 4e 61 6d 65      assemblyName
1cb90 2c 20 63 6c 69 65 6e 74 44 61 74 61 2c 20 77 68  , clientData, wh
1cba0 61 74 49 66 2c 20 76 65 72 62 6f 73 65 2c 0d 0a  atIf, verbose,..
1cbb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cbc0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20              ref 
1cbd0 6c 6f 63 61 6c 53 61 76 65 64 2c 20 72 65 66 20  localSaved, ref 
1cbe0 65 72 72 6f 72 29 29 0d 0a 20 20 20 20 20 20 20  error))..       
1cbf0 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
1cc00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cc10 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
1cc20 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
1cc30 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
1cc40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cc50 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20    else..        
1cc60 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
1cc70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cc80 20 20 20 20 20 20 20 69 66 20 28 6c 6f 63 61 6c         if (local
1cc90 53 61 76 65 64 20 26 26 20 21 73 61 76 65 64 29  Saved && !saved)
1cca0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1ccb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 61                sa
1ccc0 76 65 64 20 3d 20 74 72 75 65 3b 0d 0a 0d 0a 20  ved = true;.... 
1ccd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cce0 20 20 20 20 20 20 20 69 66 20 28 76 65 72 62 6f         if (verbo
1ccf0 73 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se)..           
1cd00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cd10 20 54 72 61 63 65 4f 70 73 2e 54 72 61 63 65 28   TraceOps.Trace(
1cd20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1cd30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cd40 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e    TracePriority.
1cd50 4c 6f 77 65 73 74 2c 0d 0a 20 20 20 20 20 20 20  Lowest,..       
1cd60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cd70 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
1cd80 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46  llback, String.F
1cd90 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
1cda0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cdb0 20 20 20 20 20 20 20 20 22 6c 6f 63 61 6c 53 61          "localSa
1cdc0 76 65 64 20 3d 20 7b 30 7d 2c 20 73 61 76 65 64  ved = {0}, saved
1cdd0 20 3d 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20   = {1}",..      
1cde0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cdf0 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73            ForDis
1ce00 70 6c 61 79 28 6c 6f 63 61 6c 53 61 76 65 64 29  play(localSaved)
1ce10 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 73 61 76  , ForDisplay(sav
1ce20 65 64 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  ed)),..         
1ce30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ce40 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
1ce50 67 6f 72 79 29 3b 0d 0a 20 20 20 20 20 20 20 20  gory);..        
1ce60 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
1ce70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
1ce80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
1ce90 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ...            r
1cea0 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20  eturn true;..   
1ceb0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
1cec0 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
1ced0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cee0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cef0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cf00 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
1cf10 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61       private sta
1cf20 74 69 63 20 62 6f 6f 6c 20 46 6f 72 45 61 63 68  tic bool ForEach
1cf30 46 72 61 6d 65 77 6f 72 6b 52 65 67 69 73 74 72  FrameworkRegistr
1cf40 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
1cf50 46 72 61 6d 65 77 6f 72 6b 4c 69 73 74 20 66 72  FrameworkList fr
1cf60 61 6d 65 77 6f 72 6b 4c 69 73 74 2c 0d 0a 20 20  ameworkList,..  
1cf70 20 20 20 20 20 20 20 20 20 20 46 72 61 6d 65 77            Framew
1cf80 6f 72 6b 52 65 67 69 73 74 72 79 43 61 6c 6c 62  orkRegistryCallb
1cf90 61 63 6b 20 63 61 6c 6c 62 61 63 6b 2c 0d 0a 20  ack callback,.. 
1cfa0 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63             objec
1cfb0 74 20 63 6c 69 65 6e 74 44 61 74 61 2c 0d 0a 20  t clientData,.. 
1cfc0 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
1cfd0 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20  whatIf,..       
1cfe0 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73       bool verbos
1cff0 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
1d000 72 65 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72  ref string error
1d010 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d  ..            ).
1d020 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
1d030 20 20 20 20 20 20 20 20 69 66 20 28 66 72 61 6d          if (fram
1d040 65 77 6f 72 6b 4c 69 73 74 20 3d 3d 20 6e 75 6c  eworkList == nul
1d050 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
1d060 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
1d070 20 20 20 65 72 72 6f 72 20 3d 20 22 69 6e 76 61     error = "inva
1d080 6c 69 64 20 66 72 61 6d 65 77 6f 72 6b 20 6c 69  lid framework li
1d090 73 74 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  st";..          
1d0a0 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
1d0b0 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se;..           
1d0c0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
1d0d0 20 20 52 65 67 69 73 74 72 79 4b 65 79 20 72 6f    RegistryKey ro
1d0e0 6f 74 4b 65 79 20 3d 20 66 72 61 6d 65 77 6f 72  otKey = framewor
1d0f0 6b 4c 69 73 74 2e 52 6f 6f 74 4b 65 79 3b 0d 0a  kList.RootKey;..
1d100 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
1d110 20 28 72 6f 6f 74 4b 65 79 20 3d 3d 20 6e 75 6c   (rootKey == nul
1d120 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
1d130 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
1d140 20 20 20 65 72 72 6f 72 20 3d 20 22 69 6e 76 61     error = "inva
1d150 6c 69 64 20 72 6f 6f 74 20 6b 65 79 22 3b 0d 0a  lid root key";..
1d160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d170 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20  return false;.. 
1d180 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
1d190 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
1d1a0 21 4f 62 6a 65 63 74 2e 52 65 66 65 72 65 6e 63  !Object.Referenc
1d1b0 65 45 71 75 61 6c 73 28 72 6f 6f 74 4b 65 79 2c  eEquals(rootKey,
1d1c0 20 52 65 67 69 73 74 72 79 2e 43 75 72 72 65 6e   Registry.Curren
1d1d0 74 55 73 65 72 29 20 26 26 0d 0a 20 20 20 20 20  tUser) &&..     
1d1e0 20 20 20 20 20 20 20 20 20 20 20 21 4f 62 6a 65             !Obje
1d1f0 63 74 2e 52 65 66 65 72 65 6e 63 65 45 71 75 61  ct.ReferenceEqua
1d200 6c 73 28 72 6f 6f 74 4b 65 79 2c 20 52 65 67 69  ls(rootKey, Regi
1d210 73 74 72 79 2e 4c 6f 63 61 6c 4d 61 63 68 69 6e  stry.LocalMachin
1d220 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e))..           
1d230 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1d240 20 20 20 20 65 72 72 6f 72 20 3d 20 22 72 6f 6f      error = "roo
1d250 74 20 6b 65 79 20 6d 75 73 74 20 62 65 20 70 65  t key must be pe
1d260 72 2d 75 73 65 72 20 6f 72 20 70 65 72 2d 6d 61  r-user or per-ma
1d270 63 68 69 6e 65 22 3b 0d 0a 20 20 20 20 20 20 20  chine";..       
1d280 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
1d290 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
1d2a0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
1d2b0 20 20 20 20 20 69 66 20 28 66 72 61 6d 65 77 6f       if (framewo
1d2c0 72 6b 4c 69 73 74 2e 4e 61 6d 65 73 20 3d 3d 20  rkList.Names == 
1d2d0 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
1d2e0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
1d2f0 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 6e        error = "n
1d300 6f 20 66 72 61 6d 65 77 6f 72 6b 20 6e 61 6d 65  o framework name
1d310 73 20 66 6f 75 6e 64 22 3b 0d 0a 20 20 20 20 20  s found";..     
1d320 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
1d330 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
1d340 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
1d350 20 20 20 20 20 20 20 69 66 20 28 66 72 61 6d 65         if (frame
1d360 77 6f 72 6b 4c 69 73 74 2e 56 65 72 73 69 6f 6e  workList.Version
1d370 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  s == null)..    
1d380 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
1d390 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
1d3a0 20 3d 20 22 6e 6f 20 66 72 61 6d 65 77 6f 72 6b   = "no framework
1d3b0 20 76 65 72 73 69 6f 6e 73 20 66 6f 75 6e 64 22   versions found"
1d3c0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
1d3d0 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
1d3e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
1d3f0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
1d400 66 20 28 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74  f (frameworkList
1d410 2e 50 6c 61 74 66 6f 72 6d 4e 61 6d 65 73 20 3d  .PlatformNames =
1d420 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
1d430 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1d440 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
1d450 22 6e 6f 20 70 6c 61 74 66 6f 72 6d 20 6e 61 6d  "no platform nam
1d460 65 73 20 66 6f 75 6e 64 22 3b 0d 0a 20 20 20 20  es found";..    
1d470 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
1d480 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
1d490 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
1d4a0 20 20 20 20 20 20 20 20 69 66 20 28 66 72 61 6d          if (fram
1d4b0 65 77 6f 72 6b 4c 69 73 74 2e 4e 61 6d 65 73 2e  eworkList.Names.
1d4c0 43 6f 75 6e 74 20 21 3d 20 66 72 61 6d 65 77 6f  Count != framewo
1d4d0 72 6b 4c 69 73 74 2e 50 6c 61 74 66 6f 72 6d 4e  rkList.PlatformN
1d4e0 61 6d 65 73 2e 43 6f 75 6e 74 29 0d 0a 20 20 20  ames.Count)..   
1d4f0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
1d500 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
1d510 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  r = String.Forma
1d520 74 28 22 66 72 61 6d 65 77 6f 72 6b 20 6e 61 6d  t("framework nam
1d530 65 20 63 6f 75 6e 74 20 7b 30 7d 20 64 6f 65 73  e count {0} does
1d540 20 6e 6f 74 20 22 20 2b 0d 0a 20 20 20 20 20 20   not " +..      
1d550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 6d                "m
1d560 61 74 63 68 20 70 6c 61 74 66 6f 72 6d 20 6e 61  atch platform na
1d570 6d 65 20 63 6f 75 6e 74 20 7b 31 7d 22 2c 20 66  me count {1}", f
1d580 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e 61 6d  rameworkList.Nam
1d590 65 73 2e 43 6f 75 6e 74 2c 0d 0a 20 20 20 20 20  es.Count,..     
1d5a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66                 f
1d5b0 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 50 6c 61  rameworkList.Pla
1d5c0 74 66 6f 72 6d 4e 61 6d 65 73 2e 43 6f 75 6e 74  tformNames.Count
1d5d0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
1d5e0 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
1d5f0 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se;..           
1d600 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
1d610 20 20 66 6f 72 20 28 69 6e 74 20 69 6e 64 65 78    for (int index
1d620 20 3d 20 30 3b 20 69 6e 64 65 78 20 3c 20 66 72   = 0; index < fr
1d630 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e 61 6d 65  ameworkList.Name
1d640 73 2e 43 6f 75 6e 74 3b 20 69 6e 64 65 78 2b 2b  s.Count; index++
1d650 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
1d660 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1d670 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
1d680 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 47        // NOTE: G
1d690 72 61 62 20 74 68 65 20 6e 61 6d 65 20 6f 66 20  rab the name of 
1d6a0 74 68 65 20 66 72 61 6d 65 77 6f 72 6b 20 28 65  the framework (e
1d6b0 2e 67 2e 20 22 2e 4e 45 54 46 72 61 6d 65 77 6f  .g. ".NETFramewo
1d6c0 72 6b 22 29 0d 0a 20 20 20 20 20 20 20 20 20 20  rk")..          
1d6d0 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 61        //       a
1d6e0 6e 64 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74  nd the name of t
1d6f0 68 65 20 70 6c 61 74 66 6f 72 6d 20 28 65 2e 67  he platform (e.g
1d700 2e 20 22 57 69 6e 64 6f 77 73 43 45 22 29 2e 0d  . "WindowsCE")..
1d710 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1d720 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
1d730 20 20 20 20 20 73 74 72 69 6e 67 20 66 72 61 6d       string fram
1d740 65 77 6f 72 6b 4e 61 6d 65 20 3d 20 66 72 61 6d  eworkName = fram
1d750 65 77 6f 72 6b 4c 69 73 74 2e 4e 61 6d 65 73 5b  eworkList.Names[
1d760 69 6e 64 65 78 5d 3b 0d 0a 20 20 20 20 20 20 20  index];..       
1d770 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
1d780 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 20 3d 20 66  platformName = f
1d790 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 50 6c 61  rameworkList.Pla
1d7a0 74 66 6f 72 6d 4e 61 6d 65 73 5b 69 6e 64 65 78  tformNames[index
1d7b0 5d 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  ];....          
1d7c0 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
1d7d0 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54            // NOT
1d7e0 45 3a 20 47 72 61 62 20 74 68 65 20 73 75 70 70  E: Grab the supp
1d7f0 6f 72 74 65 64 20 76 65 72 73 69 6f 6e 73 20 6f  orted versions o
1d800 66 20 74 68 69 73 20 70 61 72 74 69 63 75 6c 61  f this particula
1d810 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  r..             
1d820 20 20 20 2f 2f 20 20 20 20 20 20 20 66 72 61 6d     //       fram
1d830 65 77 6f 72 6b 2e 0d 0a 20 20 20 20 20 20 20 20  ework...        
1d840 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
1d850 20 20 20 20 20 20 20 20 20 20 20 20 56 65 72 73              Vers
1d860 69 6f 6e 4c 69 73 74 20 66 72 61 6d 65 77 6f 72  ionList framewor
1d870 6b 56 65 72 73 69 6f 6e 4c 69 73 74 3b 0d 0a 0d  kVersionList;...
1d880 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1d890 20 69 66 20 28 21 66 72 61 6d 65 77 6f 72 6b 4c   if (!frameworkL
1d8a0 69 73 74 2e 56 65 72 73 69 6f 6e 73 2e 54 72 79  ist.Versions.Try
1d8b0 47 65 74 56 61 6c 75 65 28 0d 0a 20 20 20 20 20  GetValue(..     
1d8c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d8d0 20 20 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65     frameworkName
1d8e0 2c 20 6f 75 74 20 66 72 61 6d 65 77 6f 72 6b 56  , out frameworkV
1d8f0 65 72 73 69 6f 6e 4c 69 73 74 29 20 7c 7c 0d 0a  ersionList) ||..
1d900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d910 20 20 20 20 28 66 72 61 6d 65 77 6f 72 6b 56 65      (frameworkVe
1d920 72 73 69 6f 6e 4c 69 73 74 20 3d 3d 20 6e 75 6c  rsionList == nul
1d930 6c 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  l))..           
1d940 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1d950 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74              cont
1d960 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  inue;..         
1d970 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
1d980 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 65              fore
1d990 61 63 68 20 28 56 65 72 73 69 6f 6e 20 66 72 61  ach (Version fra
1d9a0 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 20 69 6e  meworkVersion in
1d9b0 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f   frameworkVersio
1d9c0 6e 4c 69 73 74 29 0d 0a 20 20 20 20 20 20 20 20  nList)..        
1d9d0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
1d9e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
1d9f0 72 61 63 65 4f 70 73 2e 54 72 61 63 65 28 0d 0a  raceOps.Trace(..
1da00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1da10 20 20 20 20 20 20 20 20 54 72 61 63 65 50 72 69          TracePri
1da20 6f 72 69 74 79 2e 4c 6f 77 65 72 2c 20 74 72 61  ority.Lower, tra
1da30 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69  ceCallback, Stri
1da40 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
1da50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1da60 20 20 20 20 22 66 72 61 6d 65 77 6f 72 6b 4e 61      "frameworkNa
1da70 6d 65 20 3d 20 7b 30 7d 2c 20 66 72 61 6d 65 77  me = {0}, framew
1da80 6f 72 6b 56 65 72 73 69 6f 6e 20 3d 20 7b 31 7d  orkVersion = {1}
1da90 2c 20 22 20 2b 0d 0a 20 20 20 20 20 20 20 20 20  , " +..         
1daa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
1dab0 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 20 3d 20 7b  platformName = {
1dac0 32 7d 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  2}", ForDisplay(
1dad0 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 29 2c 0d  frameworkName),.
1dae0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1daf0 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70           ForDisp
1db00 6c 61 79 28 66 72 61 6d 65 77 6f 72 6b 56 65 72  lay(frameworkVer
1db10 73 69 6f 6e 29 2c 0d 0a 20 20 20 20 20 20 20 20  sion),..        
1db20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1db30 46 6f 72 44 69 73 70 6c 61 79 28 70 6c 61 74 66  ForDisplay(platf
1db40 6f 72 6d 4e 61 6d 65 29 29 2c 20 74 72 61 63 65  ormName)), trace
1db50 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
1db60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1db70 20 20 69 66 20 28 21 48 61 76 65 46 72 61 6d 65    if (!HaveFrame
1db80 77 6f 72 6b 28 0d 0a 20 20 20 20 20 20 20 20 20  work(..         
1db90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dba0 20 20 20 72 6f 6f 74 4b 65 79 2c 20 66 72 61 6d     rootKey, fram
1dbb0 65 77 6f 72 6b 4e 61 6d 65 2c 20 66 72 61 6d 65  eworkName, frame
1dbc0 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 0d 0a 20 20  workVersion,..  
1dbd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dbe0 20 20 20 20 20 20 20 20 20 20 70 6c 61 74 66 6f            platfo
1dbf0 72 6d 4e 61 6d 65 2c 20 77 68 61 74 49 66 2c 20  rmName, whatIf, 
1dc00 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20  verbose))..     
1dc10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
1dc20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1dc30 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f            TraceO
1dc40 70 73 2e 54 72 61 63 65 28 54 72 61 63 65 50 72  ps.Trace(TracePr
1dc50 69 6f 72 69 74 79 2e 4c 6f 77 2c 20 74 72 61 63  iority.Low, trac
1dc60 65 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20  eCallback,..    
1dc70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dc80 20 20 20 20 20 20 20 20 22 2e 4e 45 54 20 46 72          ".NET Fr
1dc90 61 6d 65 77 6f 72 6b 20 6e 6f 74 20 66 6f 75 6e  amework not foun
1dca0 64 2c 20 73 6b 69 70 70 69 6e 67 2e 2e 2e 22 2c  d, skipping...",
1dcb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1dcc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
1dcd0 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
1dce0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1dcf0 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75           continu
1dd00 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
1dd10 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
1dd20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dd30 20 69 66 20 28 63 61 6c 6c 62 61 63 6b 20 3d 3d   if (callback ==
1dd40 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
1dd50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dd60 63 6f 6e 74 69 6e 75 65 3b 0d 0a 0d 0a 20 20 20  continue;....   
1dd70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dd80 20 69 66 20 28 21 63 61 6c 6c 62 61 63 6b 28 0d   if (!callback(.
1dd90 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1dda0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f               roo
1ddb0 74 4b 65 79 2c 20 66 72 61 6d 65 77 6f 72 6b 4e  tKey, frameworkN
1ddc0 61 6d 65 2c 20 66 72 61 6d 65 77 6f 72 6b 56 65  ame, frameworkVe
1ddd0 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20  rsion,..        
1dde0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ddf0 20 20 20 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65      platformName
1de00 2c 20 63 6c 69 65 6e 74 44 61 74 61 2c 20 77 68  , clientData, wh
1de10 61 74 49 66 2c 20 76 65 72 62 6f 73 65 2c 0d 0a  atIf, verbose,..
1de20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1de30 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20              ref 
1de40 65 72 72 6f 72 29 29 0d 0a 20 20 20 20 20 20 20  error))..       
1de50 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
1de60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1de70 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
1de80 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
1de90 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
1dea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
1deb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
1dec0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
1ded0 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20  turn true;..    
1dee0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23      }..        #
1def0 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
1df00 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
1df10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1df20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1df30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1df40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
1df50 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
1df60 50 65 72 2d 56 69 73 75 61 6c 20 53 74 75 64 69  Per-Visual Studi
1df70 6f 20 56 65 72 73 69 6f 6e 20 48 61 6e 64 6c 69  o Version Handli
1df80 6e 67 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  ng..        priv
1df90 61 74 65 20 73 74 61 74 69 63 20 76 6f 69 64 20  ate static void 
1dfa0 49 6e 69 74 69 61 6c 69 7a 65 56 73 4c 69 73 74  InitializeVsList
1dfb0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 43  (..            C
1dfc0 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 63 6f 6e  onfiguration con
1dfd0 66 69 67 75 72 61 74 69 6f 6e 2c 0d 0a 20 20 20  figuration,..   
1dfe0 20 20 20 20 20 20 20 20 20 72 65 66 20 56 73 4c           ref VsL
1dff0 69 73 74 20 76 73 4c 69 73 74 0d 0a 20 20 20 20  ist vsList..    
1e000 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
1e010 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
1e020 20 20 69 66 20 28 76 73 4c 69 73 74 20 3d 3d 20    if (vsList == 
1e030 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
1e040 20 20 20 20 20 20 20 76 73 4c 69 73 74 20 3d 20         vsList = 
1e050 6e 65 77 20 56 73 4c 69 73 74 28 29 3b 0d 0a 0d  new VsList();...
1e060 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
1e070 28 76 73 4c 69 73 74 2e 52 6f 6f 74 4b 65 79 20  (vsList.RootKey 
1e080 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
1e090 20 20 20 20 20 20 20 20 20 20 76 73 4c 69 73 74            vsList
1e0a0 2e 52 6f 6f 74 4b 65 79 20 3d 20 52 65 67 69 73  .RootKey = Regis
1e0b0 74 72 79 2e 4c 6f 63 61 6c 4d 61 63 68 69 6e 65  try.LocalMachine
1e0c0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
1e0d0 20 69 66 20 28 76 73 4c 69 73 74 2e 56 65 72 73   if (vsList.Vers
1e0e0 69 6f 6e 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  ions == null).. 
1e0f0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
1e100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76 73                vs
1e110 4c 69 73 74 2e 56 65 72 73 69 6f 6e 73 20 3d 20  List.Versions = 
1e120 6e 65 77 20 56 65 72 73 69 6f 6e 4c 69 73 74 28  new VersionList(
1e130 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
1e140 20 20 20 20 20 20 2f 2f 20 76 73 4c 69 73 74 2e        // vsList.
1e150 56 65 72 73 69 6f 6e 73 2e 41 64 64 28 6e 65 77  Versions.Add(new
1e160 20 56 65 72 73 69 6f 6e 28 38 2c 20 30 29 29 3b   Version(8, 0));
1e170 20 2f 2f 20 56 69 73 75 61 6c 20 53 74 75 64 69   // Visual Studi
1e180 6f 20 32 30 30 35 0d 0a 0d 0a 20 20 20 20 20 20  o 2005....      
1e190 20 20 20 20 20 20 20 20 20 20 69 66 20 28 28 63            if ((c
1e1a0 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20  onfiguration == 
1e1b0 6e 75 6c 6c 29 20 7c 7c 20 21 63 6f 6e 66 69 67  null) || !config
1e1c0 75 72 61 74 69 6f 6e 2e 4e 6f 56 73 32 30 30 38  uration.NoVs2008
1e1d0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
1e1e0 20 20 20 20 20 20 20 76 73 4c 69 73 74 2e 56 65         vsList.Ve
1e1f0 72 73 69 6f 6e 73 2e 41 64 64 28 6e 65 77 20 56  rsions.Add(new V
1e200 65 72 73 69 6f 6e 28 39 2c 20 30 29 29 3b 20 2f  ersion(9, 0)); /
1e210 2f 20 56 69 73 75 61 6c 20 53 74 75 64 69 6f 20  / Visual Studio 
1e220 32 30 30 38 0d 0a 0d 0a 20 20 20 20 20 20 20 20  2008....        
1e230 20 20 20 20 20 20 20 20 69 66 20 28 28 63 6f 6e          if ((con
1e240 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20 6e 75  figuration == nu
1e250 6c 6c 29 20 7c 7c 20 21 63 6f 6e 66 69 67 75 72  ll) || !configur
1e260 61 74 69 6f 6e 2e 4e 6f 56 73 32 30 31 30 29 0d  ation.NoVs2010).
1e270 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1e280 20 20 20 20 20 76 73 4c 69 73 74 2e 56 65 72 73       vsList.Vers
1e290 69 6f 6e 73 2e 41 64 64 28 6e 65 77 20 56 65 72  ions.Add(new Ver
1e2a0 73 69 6f 6e 28 31 30 2c 20 30 29 29 3b 2f 2f 20  sion(10, 0));// 
1e2b0 56 69 73 75 61 6c 20 53 74 75 64 69 6f 20 32 30  Visual Studio 20
1e2c0 31 30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  10..            
1e2d0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
1e2e0 20 69 66 20 28 76 73 4c 69 73 74 2e 46 72 61 6d   if (vsList.Fram
1e2f0 65 77 6f 72 6b 56 65 72 73 69 6f 6e 73 20 3d 3d  eworkVersions ==
1e300 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
1e310 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1e320 20 20 20 20 20 20 20 76 73 4c 69 73 74 2e 46 72         vsList.Fr
1e330 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 73 20  ameworkVersions 
1e340 3d 20 6e 65 77 20 56 65 72 73 69 6f 6e 4c 69 73  = new VersionLis
1e350 74 4d 61 70 28 29 3b 0d 0a 0d 0a 20 20 20 20 20  tMap();....     
1e360 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 76 73             // vs
1e370 4c 69 73 74 2e 46 72 61 6d 65 77 6f 72 6b 56 65  List.FrameworkVe
1e380 72 73 69 6f 6e 73 2e 41 64 64 28 6e 65 77 20 56  rsions.Add(new V
1e390 65 72 73 69 6f 6e 28 38 2c 20 30 29 2c 0d 0a 20  ersion(8, 0),.. 
1e3a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1e3b0 2f 20 20 20 20 20 6e 65 77 20 56 65 72 73 69 6f  /     new Versio
1e3c0 6e 4c 69 73 74 28 6e 65 77 20 56 65 72 73 69 6f  nList(new Versio
1e3d0 6e 5b 5d 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  n[] {..         
1e3e0 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
1e3f0 20 20 6e 65 77 20 56 65 72 73 69 6f 6e 28 32 2c    new Version(2,
1e400 20 30 2c 20 35 30 37 32 37 29 20 7d 29 29 3b 0d   0, 50727) }));.
1e410 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1e420 20 20 20 69 66 20 28 28 63 6f 6e 66 69 67 75 72     if ((configur
1e430 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20 7c  ation == null) |
1e440 7c 20 21 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  | !configuration
1e450 2e 4e 6f 56 73 32 30 30 38 29 0d 0a 20 20 20 20  .NoVs2008)..    
1e460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e470 76 73 4c 69 73 74 2e 46 72 61 6d 65 77 6f 72 6b  vsList.Framework
1e480 56 65 72 73 69 6f 6e 73 2e 41 64 64 28 6e 65 77  Versions.Add(new
1e490 20 56 65 72 73 69 6f 6e 28 39 2c 20 30 29 2c 0d   Version(9, 0),.
1e4a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1e4b0 20 20 20 20 20 20 20 20 20 6e 65 77 20 56 65 72           new Ver
1e4c0 73 69 6f 6e 4c 69 73 74 28 6e 65 77 20 56 65 72  sionList(new Ver
1e4d0 73 69 6f 6e 5b 5d 20 7b 0d 0a 20 20 20 20 20 20  sion[] {..      
1e4e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e4f0 20 20 20 20 20 20 6e 65 77 20 56 65 72 73 69 6f        new Versio
1e500 6e 28 32 2c 20 30 2c 20 35 30 37 32 37 29 20 7d  n(2, 0, 50727) }
1e510 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ));....         
1e520 20 20 20 20 20 20 20 69 66 20 28 28 63 6f 6e 66         if ((conf
1e530 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c  iguration == nul
1e540 6c 29 20 7c 7c 20 21 63 6f 6e 66 69 67 75 72 61  l) || !configura
1e550 74 69 6f 6e 2e 4e 6f 56 73 32 30 31 30 29 0d 0a  tion.NoVs2010)..
1e560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e570 20 20 20 20 76 73 4c 69 73 74 2e 46 72 61 6d 65      vsList.Frame
1e580 77 6f 72 6b 56 65 72 73 69 6f 6e 73 2e 41 64 64  workVersions.Add
1e590 28 6e 65 77 20 56 65 72 73 69 6f 6e 28 31 30 2c  (new Version(10,
1e5a0 20 30 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20   0),..          
1e5b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 65                ne
1e5c0 77 20 56 65 72 73 69 6f 6e 4c 69 73 74 28 6e 65  w VersionList(ne
1e5d0 77 20 56 65 72 73 69 6f 6e 5b 5d 20 7b 0d 0a 20  w Version[] {.. 
1e5e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e5f0 20 20 20 20 20 20 20 20 20 20 20 6e 65 77 20 56             new V
1e600 65 72 73 69 6f 6e 28 32 2c 20 30 2c 20 35 30 37  ersion(2, 0, 507
1e610 32 37 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  27),..          
1e620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e630 20 20 20 20 20 20 6e 65 77 20 56 65 72 73 69 6f        new Versio
1e640 6e 28 34 2c 20 30 2c 20 33 30 33 31 39 29 20 7d  n(4, 0, 30319) }
1e650 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ));..           
1e660 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d   }..        }...
1e670 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
1e680 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e690 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e6a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e6b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e6c0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  ....        priv
1e6d0 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f 6c 20  ate static bool 
1e6e0 48 61 76 65 56 73 56 65 72 73 69 6f 6e 28 0d 0a  HaveVsVersion(..
1e6f0 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69              Regi
1e700 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c  stryKey rootKey,
1e710 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 56 65  ..            Ve
1e720 72 73 69 6f 6e 20 76 73 56 65 72 73 69 6f 6e 2c  rsion vsVersion,
1e730 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
1e740 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20  ol whatIf,..    
1e750 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72          bool ver
1e760 62 6f 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20  bose..          
1e770 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a    )..        {..
1e780 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
1e790 76 73 56 65 72 73 69 6f 6e 20 3d 3d 20 6e 75 6c  vsVersion == nul
1e7a0 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
1e7b0 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
1e7c0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
1e7d0 20 73 74 72 69 6e 67 20 66 6f 72 6d 61 74 20 3d   string format =
1e7e0 20 22 53 6f 66 74 77 61 72 65 5c 5c 4d 69 63 72   "Software\\Micr
1e7f0 6f 73 6f 66 74 5c 5c 56 69 73 75 61 6c 53 74 75  osoft\\VisualStu
1e800 64 69 6f 5c 5c 7b 30 7d 22 3b 0d 0a 20 20 20 20  dio\\{0}";..    
1e810 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6b          string k
1e820 65 79 4e 61 6d 65 20 3d 20 53 74 72 69 6e 67 2e  eyName = String.
1e830 46 6f 72 6d 61 74 28 66 6f 72 6d 61 74 2c 20 76  Format(format, v
1e840 73 56 65 72 73 69 6f 6e 29 3b 0d 0a 0d 0a 20 20  sVersion);....  
1e850 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20            using 
1e860 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79  (MockRegistryKey
1e870 20 6b 65 79 20 3d 20 52 65 67 69 73 74 72 79 48   key = RegistryH
1e880 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62 4b 65 79  elper.OpenSubKey
1e890 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
1e8a0 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20         rootKey, 
1e8b0 6b 65 79 4e 61 6d 65 2c 20 66 61 6c 73 65 2c 20  keyName, false, 
1e8c0 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29  whatIf, verbose)
1e8d0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
1e8e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1e8f0 20 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c    if (key == nul
1e900 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
1e910 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
1e920 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  alse;....       
1e930 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20           object 
1e940 76 61 6c 75 65 20 3d 20 52 65 67 69 73 74 72 79  value = Registry
1e950 48 65 6c 70 65 72 2e 47 65 74 56 61 6c 75 65 28  Helper.GetValue(
1e960 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1e970 20 20 20 20 20 20 6b 65 79 2c 20 22 49 6e 73 74        key, "Inst
1e980 61 6c 6c 44 69 72 22 2c 20 6e 75 6c 6c 2c 20 77  allDir", null, w
1e990 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 3b  hatIf, verbose);
1e9a0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1e9b0 20 20 20 20 69 66 20 28 21 28 76 61 6c 75 65 20      if (!(value 
1e9c0 69 73 20 73 74 72 69 6e 67 29 29 0d 0a 20 20 20  is string))..   
1e9d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e9e0 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
1e9f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1ea00 20 20 73 74 72 69 6e 67 20 64 69 72 65 63 74 6f    string directo
1ea10 72 79 20 3d 20 28 73 74 72 69 6e 67 29 76 61 6c  ry = (string)val
1ea20 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ue;....         
1ea30 20 20 20 20 20 20 20 69 66 20 28 53 74 72 69 6e         if (Strin
1ea40 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28  g.IsNullOrEmpty(
1ea50 64 69 72 65 63 74 6f 72 79 29 29 0d 0a 20 20 20  directory))..   
1ea60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ea70 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
1ea80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1ea90 20 20 69 66 20 28 21 44 69 72 65 63 74 6f 72 79    if (!Directory
1eaa0 2e 45 78 69 73 74 73 28 64 69 72 65 63 74 6f 72  .Exists(director
1eab0 79 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  y))..           
1eac0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
1ead0 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  false;....      
1eae0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
1eaf0 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20   true;..        
1eb00 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d      }..        }
1eb10 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
1eb20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1eb30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1eb40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1eb50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1eb60 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70  ///....        p
1eb70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 62 6f  rivate static bo
1eb80 6f 6c 20 46 6f 72 45 61 63 68 56 73 56 65 72 73  ol ForEachVsVers
1eb90 69 6f 6e 52 65 67 69 73 74 72 79 28 0d 0a 20 20  ionRegistry(..  
1eba0 20 20 20 20 20 20 20 20 20 20 56 73 4c 69 73 74            VsList
1ebb0 20 76 73 4c 69 73 74 2c 0d 0a 20 20 20 20 20 20   vsList,..      
1ebc0 20 20 20 20 20 20 56 69 73 75 61 6c 53 74 75 64        VisualStud
1ebd0 69 6f 52 65 67 69 73 74 72 79 43 61 6c 6c 62 61  ioRegistryCallba
1ebe0 63 6b 20 63 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20  ck callback,..  
1ebf0 20 20 20 20 20 20 20 20 20 20 50 61 63 6b 61 67            Packag
1ec00 65 20 70 61 63 6b 61 67 65 2c 0d 0a 20 20 20 20  e package,..    
1ec10 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 63          object c
1ec20 6c 69 65 6e 74 44 61 74 61 2c 0d 0a 20 20 20 20  lientData,..    
1ec30 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61          bool wha
1ec40 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf,..          
1ec50 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d    bool verbose,.
1ec60 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66  .            ref
1ec70 20 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20   string error.. 
1ec80 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20             )..  
1ec90 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1eca0 20 20 20 20 20 69 66 20 28 76 73 4c 69 73 74 20       if (vsList 
1ecb0 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
1ecc0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1ecd0 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
1ece0 20 22 69 6e 76 61 6c 69 64 20 56 53 20 6c 69 73   "invalid VS lis
1ecf0 74 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  t";..           
1ed00 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
1ed10 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
1ed20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
1ed30 20 52 65 67 69 73 74 72 79 4b 65 79 20 72 6f 6f   RegistryKey roo
1ed40 74 4b 65 79 20 3d 20 76 73 4c 69 73 74 2e 52 6f  tKey = vsList.Ro
1ed50 6f 74 4b 65 79 3b 0d 0a 0d 0a 20 20 20 20 20 20  otKey;....      
1ed60 20 20 20 20 20 20 69 66 20 28 72 6f 6f 74 4b 65        if (rootKe
1ed70 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  y == null)..    
1ed80 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
1ed90 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
1eda0 20 3d 20 22 69 6e 76 61 6c 69 64 20 72 6f 6f 74   = "invalid root
1edb0 20 6b 65 79 22 3b 0d 0a 20 20 20 20 20 20 20 20   key";..        
1edc0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
1edd0 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
1ede0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
1edf0 20 20 20 20 69 66 20 28 21 4f 62 6a 65 63 74 2e      if (!Object.
1ee00 52 65 66 65 72 65 6e 63 65 45 71 75 61 6c 73 28  ReferenceEquals(
1ee10 72 6f 6f 74 4b 65 79 2c 20 52 65 67 69 73 74 72  rootKey, Registr
1ee20 79 2e 43 75 72 72 65 6e 74 55 73 65 72 29 20 26  y.CurrentUser) &
1ee30 26 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  &..             
1ee40 20 20 20 21 4f 62 6a 65 63 74 2e 52 65 66 65 72     !Object.Refer
1ee50 65 6e 63 65 45 71 75 61 6c 73 28 72 6f 6f 74 4b  enceEquals(rootK
1ee60 65 79 2c 20 52 65 67 69 73 74 72 79 2e 4c 6f 63  ey, Registry.Loc
1ee70 61 6c 4d 61 63 68 69 6e 65 29 29 0d 0a 20 20 20  alMachine))..   
1ee80 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
1ee90 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
1eea0 72 20 3d 20 22 72 6f 6f 74 20 6b 65 79 20 6d 75  r = "root key mu
1eeb0 73 74 20 62 65 20 70 65 72 2d 75 73 65 72 20 6f  st be per-user o
1eec0 72 20 70 65 72 2d 6d 61 63 68 69 6e 65 22 3b 0d  r per-machine";.
1eed0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1eee0 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
1eef0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
1ef00 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
1ef10 28 76 73 4c 69 73 74 2e 56 65 72 73 69 6f 6e 73  (vsList.Versions
1ef20 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
1ef30 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
1ef40 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
1ef50 3d 20 22 6e 6f 20 56 53 20 76 65 72 73 69 6f 6e  = "no VS version
1ef60 73 20 66 6f 75 6e 64 22 3b 0d 0a 20 20 20 20 20  s found";..     
1ef70 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
1ef80 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
1ef90 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
1efa0 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 28         foreach (
1efb0 56 65 72 73 69 6f 6e 20 76 73 56 65 72 73 69 6f  Version vsVersio
1efc0 6e 20 69 6e 20 76 73 4c 69 73 74 2e 56 65 72 73  n in vsList.Vers
1efd0 69 6f 6e 73 29 0d 0a 20 20 20 20 20 20 20 20 20  ions)..         
1efe0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
1eff0 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 54        TraceOps.T
1f000 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20  race(..         
1f010 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
1f020 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 72 2c 20  Priority.Lower, 
1f030 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53  traceCallback, S
1f040 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
1f050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f060 20 20 20 22 76 73 56 65 72 73 69 6f 6e 20 3d 20     "vsVersion = 
1f070 7b 30 7d 22 2c 20 46 6f 72 44 69 73 70 6c 61 79  {0}", ForDisplay
1f080 28 76 73 56 65 72 73 69 6f 6e 29 29 2c 0d 0a 20  (vsVersion)),.. 
1f090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f0a0 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
1f0b0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
1f0c0 20 20 20 20 20 20 69 66 20 28 21 48 61 76 65 56        if (!HaveV
1f0d0 73 56 65 72 73 69 6f 6e 28 72 6f 6f 74 4b 65 79  sVersion(rootKey
1f0e0 2c 20 76 73 56 65 72 73 69 6f 6e 2c 20 77 68 61  , vsVersion, wha
1f0f0 74 49 66 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a  tIf, verbose))..
1f100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f110 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
1f120 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e         TraceOps.
1f130 54 72 61 63 65 28 54 72 61 63 65 50 72 69 6f 72  Trace(TracePrior
1f140 69 74 79 2e 4c 6f 77 2c 20 74 72 61 63 65 43 61  ity.Low, traceCa
1f150 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20  llback,..       
1f160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f170 20 22 56 69 73 75 61 6c 20 53 74 75 64 69 6f 20   "Visual Studio 
1f180 76 65 72 73 69 6f 6e 20 6e 6f 74 20 66 6f 75 6e  version not foun
1f190 64 2c 20 73 6b 69 70 70 69 6e 67 2e 2e 2e 22 2c  d, skipping...",
1f1a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1f1b0 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
1f1c0 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
1f1d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f1e0 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20   continue;..    
1f1f0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
1f200 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1f210 20 69 66 20 28 63 61 6c 6c 62 61 63 6b 20 3d 3d   if (callback ==
1f220 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
1f230 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74              cont
1f240 69 6e 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  inue;....       
1f250 20 20 20 20 20 20 20 20 20 69 66 20 28 21 63 61           if (!ca
1f260 6c 6c 62 61 63 6b 28 0d 0a 20 20 20 20 20 20 20  llback(..       
1f270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f280 20 72 6f 6f 74 4b 65 79 2c 20 76 73 56 65 72 73   rootKey, vsVers
1f290 69 6f 6e 2c 20 70 61 63 6b 61 67 65 2c 20 63 6c  ion, package, cl
1f2a0 69 65 6e 74 44 61 74 61 2c 20 77 68 61 74 49 66  ientData, whatIf
1f2b0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
1f2c0 20 20 20 20 20 20 20 20 20 20 20 76 65 72 62 6f             verbo
1f2d0 73 65 2c 20 72 65 66 20 65 72 72 6f 72 29 29 0d  se, ref error)).
1f2e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1f2f0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1f300 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
1f310 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
1f320 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
1f330 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
1f340 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72         return tr
1f350 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ue;..        }..
1f360 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69          #endregi
1f370 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f  on....        //
1f380 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f390 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f3a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f3b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f3c0 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
1f3d0 20 23 72 65 67 69 6f 6e 20 43 6f 6e 66 69 67 75   #region Configu
1f3e0 72 61 74 69 6f 6e 20 46 69 6c 65 20 48 61 6e 64  ration File Hand
1f3f0 6c 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 70 72  ling..        pr
1f400 69 76 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f  ivate static boo
1f410 6c 20 41 64 64 44 62 50 72 6f 76 69 64 65 72 46  l AddDbProviderF
1f420 61 63 74 6f 72 79 28 0d 0a 20 20 20 20 20 20 20  actory(..       
1f430 20 20 20 20 20 73 74 72 69 6e 67 20 66 69 6c 65       string file
1f440 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  Name,..         
1f450 20 20 20 73 74 72 69 6e 67 20 69 6e 76 61 72 69     string invari
1f460 61 6e 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ant,..          
1f470 20 20 73 74 72 69 6e 67 20 6e 61 6d 65 2c 0d 0a    string name,..
1f480 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
1f490 6e 67 20 64 65 73 63 72 69 70 74 69 6f 6e 2c 0d  ng description,.
1f4a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72  .            str
1f4b0 69 6e 67 20 74 79 70 65 4e 61 6d 65 2c 0d 0a 20  ing typeName,.. 
1f4c0 20 20 20 20 20 20 20 20 20 20 20 41 73 73 65 6d             Assem
1f4d0 62 6c 79 4e 61 6d 65 20 61 73 73 65 6d 62 6c 79  blyName assembly
1f4e0 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  Name,..         
1f4f0 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d     bool whatIf,.
1f500 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
1f510 6c 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20  l verbose,..    
1f520 20 20 20 20 20 20 20 20 72 65 66 20 62 6f 6f 6c          ref bool
1f530 20 73 61 76 65 64 2c 0d 0a 20 20 20 20 20 20 20   saved,..       
1f540 20 20 20 20 20 72 65 66 20 73 74 72 69 6e 67 20       ref string 
1f550 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20  error..         
1f560 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d     )..        {.
1f570 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
1f580 6c 20 64 69 72 74 79 20 3d 20 66 61 6c 73 65 3b  l dirty = false;
1f590 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 58 6d  ..            Xm
1f5a0 6c 44 6f 63 75 6d 65 6e 74 20 64 6f 63 75 6d 65  lDocument docume
1f5b0 6e 74 20 3d 20 6e 65 77 20 58 6d 6c 44 6f 63 75  nt = new XmlDocu
1f5c0 6d 65 6e 74 28 29 3b 0d 0a 0d 0a 20 20 20 20 20  ment();....     
1f5d0 20 20 20 20 20 20 20 64 6f 63 75 6d 65 6e 74 2e         document.
1f5e0 50 72 65 73 65 72 76 65 57 68 69 74 65 73 70 61  PreserveWhitespa
1f5f0 63 65 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20  ce = true;..    
1f600 20 20 20 20 20 20 20 20 64 6f 63 75 6d 65 6e 74          document
1f610 2e 4c 6f 61 64 28 66 69 6c 65 4e 61 6d 65 29 3b  .Load(fileName);
1f620 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1f630 58 6d 6c 45 6c 65 6d 65 6e 74 20 65 6c 65 6d 65  XmlElement eleme
1f640 6e 74 20 3d 20 64 6f 63 75 6d 65 6e 74 2e 53 65  nt = document.Se
1f650 6c 65 63 74 53 69 6e 67 6c 65 4e 6f 64 65 28 53  lectSingleNode(S
1f660 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
1f670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 58                 X
1f680 50 61 74 68 46 6f 72 41 64 64 45 6c 65 6d 65 6e  PathForAddElemen
1f690 74 2c 20 69 6e 76 61 72 69 61 6e 74 29 29 20 61  t, invariant)) a
1f6a0 73 20 58 6d 6c 45 6c 65 6d 65 6e 74 3b 0d 0a 0d  s XmlElement;...
1f6b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
1f6c0 28 65 6c 65 6d 65 6e 74 20 3d 3d 20 6e 75 6c 6c  (element == null
1f6d0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
1f6e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1f6f0 20 20 73 74 72 69 6e 67 5b 5d 20 65 6c 65 6d 65    string[] eleme
1f700 6e 74 4e 61 6d 65 73 20 3d 20 7b 0d 0a 20 20 20  ntNames = {..   
1f710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f720 20 20 20 20 20 22 73 79 73 74 65 6d 2e 64 61 74       "system.dat
1f730 61 22 2c 20 22 44 62 50 72 6f 76 69 64 65 72 46  a", "DbProviderF
1f740 61 63 74 6f 72 69 65 73 22 0d 0a 20 20 20 20 20  actories"..     
1f750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
1f760 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
1f770 20 20 20 20 20 58 6d 6c 45 6c 65 6d 65 6e 74 20       XmlElement 
1f780 70 72 65 76 69 6f 75 73 45 6c 65 6d 65 6e 74 20  previousElement 
1f790 3d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  =..             
1f7a0 20 20 20 20 20 20 20 64 6f 63 75 6d 65 6e 74 2e         document.
1f7b0 44 6f 63 75 6d 65 6e 74 45 6c 65 6d 65 6e 74 3b  DocumentElement;
1f7c0 20 2f 2a 20 63 6f 6e 66 69 67 75 72 61 74 69 6f   /* configuratio
1f7d0 6e 20 2a 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  n */....        
1f7e0 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20          foreach 
1f7f0 28 73 74 72 69 6e 67 20 65 6c 65 6d 65 6e 74 4e  (string elementN
1f800 61 6d 65 20 69 6e 20 65 6c 65 6d 65 6e 74 4e 61  ame in elementNa
1f810 6d 65 73 29 0d 0a 20 20 20 20 20 20 20 20 20 20  mes)..          
1f820 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1f830 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 65               ele
1f840 6d 65 6e 74 20 3d 20 70 72 65 76 69 6f 75 73 45  ment = previousE
1f850 6c 65 6d 65 6e 74 2e 53 65 6c 65 63 74 53 69 6e  lement.SelectSin
1f860 67 6c 65 4e 6f 64 65 28 0d 0a 20 20 20 20 20 20  gleNode(..      
1f870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f880 20 20 65 6c 65 6d 65 6e 74 4e 61 6d 65 29 20 61    elementName) a
1f890 73 20 58 6d 6c 45 6c 65 6d 65 6e 74 3b 0d 0a 0d  s XmlElement;...
1f8a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1f8b0 20 20 20 20 20 69 66 20 28 65 6c 65 6d 65 6e 74       if (element
1f8c0 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
1f8d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
1f8e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1f8f0 20 20 20 20 20 20 20 20 20 20 65 6c 65 6d 65 6e            elemen
1f900 74 20 3d 20 64 6f 63 75 6d 65 6e 74 2e 43 72 65  t = document.Cre
1f910 61 74 65 45 6c 65 6d 65 6e 74 28 0d 0a 20 20 20  ateElement(..   
1f920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f930 20 20 20 20 20 20 20 20 20 65 6c 65 6d 65 6e 74           element
1f940 4e 61 6d 65 2c 20 53 74 72 69 6e 67 2e 45 6d 70  Name, String.Emp
1f950 74 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ty);....        
1f960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f970 70 72 65 76 69 6f 75 73 45 6c 65 6d 65 6e 74 2e  previousElement.
1f980 41 70 70 65 6e 64 43 68 69 6c 64 28 65 6c 65 6d  AppendChild(elem
1f990 65 6e 74 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ent);..         
1f9a0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
1f9b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f9c0 20 20 20 20 70 72 65 76 69 6f 75 73 45 6c 65 6d      previousElem
1f9d0 65 6e 74 20 3d 20 65 6c 65 6d 65 6e 74 3b 0d 0a  ent = element;..
1f9e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f9f0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
1fa00 20 20 20 20 20 65 6c 65 6d 65 6e 74 20 3d 20 64       element = d
1fa10 6f 63 75 6d 65 6e 74 2e 43 72 65 61 74 65 45 6c  ocument.CreateEl
1fa20 65 6d 65 6e 74 28 0d 0a 20 20 20 20 20 20 20 20  ement(..        
1fa30 20 20 20 20 20 20 20 20 20 20 20 20 22 61 64 64              "add
1fa40 22 2c 20 53 74 72 69 6e 67 2e 45 6d 70 74 79 29  ", String.Empty)
1fa50 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
1fa60 20 20 20 20 20 70 72 65 76 69 6f 75 73 45 6c 65       previousEle
1fa70 6d 65 6e 74 2e 41 70 70 65 6e 64 43 68 69 6c 64  ment.AppendChild
1fa80 28 65 6c 65 6d 65 6e 74 29 3b 0d 0a 0d 0a 20 20  (element);....  
1fa90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 69                di
1faa0 72 74 79 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20  rty = true;..   
1fab0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
1fac0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21 53            if (!S
1fad0 74 72 69 6e 67 2e 45 71 75 61 6c 73 28 65 6c 65  tring.Equals(ele
1fae0 6d 65 6e 74 2e 47 65 74 41 74 74 72 69 62 75 74  ment.GetAttribut
1faf0 65 28 22 6e 61 6d 65 22 29 2c 0d 0a 20 20 20 20  e("name"),..    
1fb00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fb10 6e 61 6d 65 2c 20 53 74 72 69 6e 67 43 6f 6d 70  name, StringComp
1fb20 61 72 69 73 6f 6e 2e 49 6e 76 61 72 69 61 6e 74  arison.Invariant
1fb30 43 75 6c 74 75 72 65 29 29 0d 0a 20 20 20 20 20  Culture))..     
1fb40 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
1fb50 20 20 20 20 20 20 20 20 20 20 65 6c 65 6d 65 6e            elemen
1fb60 74 2e 53 65 74 41 74 74 72 69 62 75 74 65 28 22  t.SetAttribute("
1fb70 6e 61 6d 65 22 2c 20 6e 61 6d 65 29 3b 0d 0a 20  name", name);.. 
1fb80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
1fb90 69 72 74 79 20 3d 20 74 72 75 65 3b 0d 0a 20 20  irty = true;..  
1fba0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
1fbb0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21             if (!
1fbc0 53 74 72 69 6e 67 2e 45 71 75 61 6c 73 28 65 6c  String.Equals(el
1fbd0 65 6d 65 6e 74 2e 47 65 74 41 74 74 72 69 62 75  ement.GetAttribu
1fbe0 74 65 28 22 69 6e 76 61 72 69 61 6e 74 22 29 2c  te("invariant"),
1fbf0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1fc00 20 20 20 20 20 20 69 6e 76 61 72 69 61 6e 74 2c        invariant,
1fc10 20 53 74 72 69 6e 67 43 6f 6d 70 61 72 69 73 6f   StringCompariso
1fc20 6e 2e 49 6e 76 61 72 69 61 6e 74 43 75 6c 74 75  n.InvariantCultu
1fc30 72 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  re))..          
1fc40 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
1fc50 20 20 20 20 20 65 6c 65 6d 65 6e 74 2e 53 65 74       element.Set
1fc60 41 74 74 72 69 62 75 74 65 28 22 69 6e 76 61 72  Attribute("invar
1fc70 69 61 6e 74 22 2c 20 69 6e 76 61 72 69 61 6e 74  iant", invariant
1fc80 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
1fc90 20 20 20 20 64 69 72 74 79 20 3d 20 74 72 75 65      dirty = true
1fca0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
1fcb0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1fcc0 69 66 20 28 21 53 74 72 69 6e 67 2e 45 71 75 61  if (!String.Equa
1fcd0 6c 73 28 65 6c 65 6d 65 6e 74 2e 47 65 74 41 74  ls(element.GetAt
1fce0 74 72 69 62 75 74 65 28 22 64 65 73 63 72 69 70  tribute("descrip
1fcf0 74 69 6f 6e 22 29 2c 0d 0a 20 20 20 20 20 20 20  tion"),..       
1fd00 20 20 20 20 20 20 20 20 20 20 20 20 20 64 65 73               des
1fd10 63 72 69 70 74 69 6f 6e 2c 20 53 74 72 69 6e 67  cription, String
1fd20 43 6f 6d 70 61 72 69 73 6f 6e 2e 49 6e 76 61 72  Comparison.Invar
1fd30 69 61 6e 74 43 75 6c 74 75 72 65 29 29 0d 0a 20  iantCulture)).. 
1fd40 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
1fd50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c                el
1fd60 65 6d 65 6e 74 2e 53 65 74 41 74 74 72 69 62 75  ement.SetAttribu
1fd70 74 65 28 22 64 65 73 63 72 69 70 74 69 6f 6e 22  te("description"
1fd80 2c 20 64 65 73 63 72 69 70 74 69 6f 6e 29 3b 0d  , description);.
1fd90 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1fda0 20 64 69 72 74 79 20 3d 20 74 72 75 65 3b 0d 0a   dirty = true;..
1fdb0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
1fdc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72  .            str
1fdd0 69 6e 67 20 66 75 6c 6c 54 79 70 65 4e 61 6d 65  ing fullTypeName
1fde0 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74   = String.Format
1fdf0 28 22 7b 30 7d 2c 20 7b 31 7d 22 2c 0d 0a 20 20  ("{0}, {1}",..  
1fe00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 79                ty
1fe10 70 65 4e 61 6d 65 2c 20 61 73 73 65 6d 62 6c 79  peName, assembly
1fe20 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  Name);....      
1fe30 20 20 20 20 20 20 69 66 20 28 21 53 74 72 69 6e        if (!Strin
1fe40 67 2e 45 71 75 61 6c 73 28 65 6c 65 6d 65 6e 74  g.Equals(element
1fe50 2e 47 65 74 41 74 74 72 69 62 75 74 65 28 22 74  .GetAttribute("t
1fe60 79 70 65 22 29 2c 0d 0a 20 20 20 20 20 20 20 20  ype"),..        
1fe70 20 20 20 20 20 20 20 20 20 20 20 20 66 75 6c 6c              full
1fe80 54 79 70 65 4e 61 6d 65 2c 20 53 74 72 69 6e 67  TypeName, String
1fe90 43 6f 6d 70 61 72 69 73 6f 6e 2e 49 6e 76 61 72  Comparison.Invar
1fea0 69 61 6e 74 43 75 6c 74 75 72 65 29 29 0d 0a 20  iantCulture)).. 
1feb0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
1fec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c                el
1fed0 65 6d 65 6e 74 2e 53 65 74 41 74 74 72 69 62 75  ement.SetAttribu
1fee0 74 65 28 22 74 79 70 65 22 2c 20 66 75 6c 6c 54  te("type", fullT
1fef0 79 70 65 4e 61 6d 65 29 3b 0d 0a 20 20 20 20 20  ypeName);..     
1ff00 20 20 20 20 20 20 20 20 20 20 20 64 69 72 74 79             dirty
1ff10 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20   = true;..      
1ff20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
1ff30 20 20 20 20 20 20 20 69 66 20 28 64 69 72 74 79         if (dirty
1ff40 20 7c 7c 20 77 68 61 74 49 66 29 0d 0a 20 20 20   || whatIf)..   
1ff50 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
1ff60 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
1ff70 76 65 72 62 6f 73 65 29 0d 0a 20 20 20 20 20 20  verbose)..      
1ff80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
1ff90 61 63 65 4f 70 73 2e 54 72 61 63 65 28 0d 0a 20  aceOps.Trace(.. 
1ffa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ffb0 20 20 20 20 20 20 20 54 72 61 63 65 50 72 69 6f         TracePrio
1ffc0 72 69 74 79 2e 48 69 67 68 65 73 74 2c 20 74 72  rity.Highest, tr
1ffd0 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72  aceCallback, Str
1ffe0 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
1fff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20000 20 20 20 20 20 22 65 6c 65 6d 65 6e 74 20 3d 20       "element = 
20010 7b 30 7d 22 2c 20 46 6f 72 44 69 73 70 6c 61 79  {0}", ForDisplay
20020 28 65 6c 65 6d 65 6e 74 29 29 2c 20 74 72 61 63  (element)), trac
20030 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
20040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
20050 66 20 28 21 77 68 61 74 49 66 29 0d 0a 20 20 20  f (!whatIf)..   
20060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20070 20 64 6f 63 75 6d 65 6e 74 2e 53 61 76 65 28 66   document.Save(f
20080 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20  ileName);....   
20090 20 20 20 20 20 20 20 20 20 20 20 20 20 73 61 76               sav
200a0 65 64 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20  ed = true;..    
200b0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
200c0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
200d0 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d  true;..        }
200e0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
200f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20100 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20110 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20120 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20130 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70  ///....        p
20140 72 69 76 61 74 65 20 73 74 61 74 69 63 20 62 6f  rivate static bo
20150 6f 6c 20 52 65 6d 6f 76 65 44 62 50 72 6f 76 69  ol RemoveDbProvi
20160 64 65 72 46 61 63 74 6f 72 79 28 0d 0a 20 20 20  derFactory(..   
20170 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
20180 66 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20  fileName,..     
20190 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 69 6e         string in
201a0 76 61 72 69 61 6e 74 2c 0d 0a 20 20 20 20 20 20  variant,..      
201b0 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49        bool whatI
201c0 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f,..            
201d0 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a 20  bool verbose,.. 
201e0 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20 62             ref b
201f0 6f 6f 6c 20 73 61 76 65 64 2c 0d 0a 20 20 20 20  ool saved,..    
20200 20 20 20 20 20 20 20 20 72 65 66 20 73 74 72 69          ref stri
20210 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20  ng error..      
20220 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
20230 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
20240 62 6f 6f 6c 20 64 69 72 74 79 20 3d 20 66 61 6c  bool dirty = fal
20250 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se;..           
20260 20 58 6d 6c 44 6f 63 75 6d 65 6e 74 20 64 6f 63   XmlDocument doc
20270 75 6d 65 6e 74 20 3d 20 6e 65 77 20 58 6d 6c 44  ument = new XmlD
20280 6f 63 75 6d 65 6e 74 28 29 3b 0d 0a 0d 0a 20 20  ocument();....  
20290 20 20 20 20 20 20 20 20 20 20 64 6f 63 75 6d 65            docume
202a0 6e 74 2e 50 72 65 73 65 72 76 65 57 68 69 74 65  nt.PreserveWhite
202b0 73 70 61 63 65 20 3d 20 74 72 75 65 3b 0d 0a 20  space = true;.. 
202c0 20 20 20 20 20 20 20 20 20 20 20 64 6f 63 75 6d             docum
202d0 65 6e 74 2e 4c 6f 61 64 28 66 69 6c 65 4e 61 6d  ent.Load(fileNam
202e0 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
202f0 20 20 20 58 6d 6c 45 6c 65 6d 65 6e 74 20 65 6c     XmlElement el
20300 65 6d 65 6e 74 20 3d 20 64 6f 63 75 6d 65 6e 74  ement = document
20310 2e 53 65 6c 65 63 74 53 69 6e 67 6c 65 4e 6f 64  .SelectSingleNod
20320 65 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  e(String.Format(
20330 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
20340 20 20 58 50 61 74 68 46 6f 72 41 64 64 45 6c 65    XPathForAddEle
20350 6d 65 6e 74 2c 20 69 6e 76 61 72 69 61 6e 74 29  ment, invariant)
20360 29 20 61 73 20 58 6d 6c 45 6c 65 6d 65 6e 74 3b  ) as XmlElement;
20370 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
20380 69 66 20 28 65 6c 65 6d 65 6e 74 20 21 3d 20 6e  if (element != n
20390 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
203a0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
203b0 20 20 20 20 20 65 6c 65 6d 65 6e 74 2e 50 61 72       element.Par
203c0 65 6e 74 4e 6f 64 65 2e 52 65 6d 6f 76 65 43 68  entNode.RemoveCh
203d0 69 6c 64 28 65 6c 65 6d 65 6e 74 29 3b 0d 0a 20  ild(element);.. 
203e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
203f0 69 72 74 79 20 3d 20 74 72 75 65 3b 0d 0a 20 20  irty = true;..  
20400 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
20410 20 20 20 20 20 20 20 20 20 20 20 65 6c 65 6d 65             eleme
20420 6e 74 20 3d 20 64 6f 63 75 6d 65 6e 74 2e 53 65  nt = document.Se
20430 6c 65 63 74 53 69 6e 67 6c 65 4e 6f 64 65 28 53  lectSingleNode(S
20440 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
20450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 58                 X
20460 50 61 74 68 46 6f 72 52 65 6d 6f 76 65 45 6c 65  PathForRemoveEle
20470 6d 65 6e 74 2c 20 69 6e 76 61 72 69 61 6e 74 29  ment, invariant)
20480 29 20 61 73 20 58 6d 6c 45 6c 65 6d 65 6e 74 3b  ) as XmlElement;
20490 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
204a0 69 66 20 28 65 6c 65 6d 65 6e 74 20 21 3d 20 6e  if (element != n
204b0 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
204c0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
204d0 20 20 20 20 20 65 6c 65 6d 65 6e 74 2e 50 61 72       element.Par
204e0 65 6e 74 4e 6f 64 65 2e 52 65 6d 6f 76 65 43 68  entNode.RemoveCh
204f0 69 6c 64 28 65 6c 65 6d 65 6e 74 29 3b 0d 0a 20  ild(element);.. 
20500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
20510 69 72 74 79 20 3d 20 74 72 75 65 3b 0d 0a 20 20  irty = true;..  
20520 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
20530 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 64             if (d
20540 69 72 74 79 20 7c 7c 20 77 68 61 74 49 66 29 0d  irty || whatIf).
20550 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
20560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20570 69 66 20 28 76 65 72 62 6f 73 65 29 0d 0a 20 20  if (verbose)..  
20580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20590 20 20 54 72 61 63 65 4f 70 73 2e 54 72 61 63 65    TraceOps.Trace
205a0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
205b0 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
205c0 50 72 69 6f 72 69 74 79 2e 48 69 67 68 65 73 74  Priority.Highest
205d0 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c  , traceCallback,
205e0 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
205f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
20600 20 20 20 20 20 20 20 20 20 22 65 6c 65 6d 65 6e           "elemen
20610 74 20 3d 20 7b 30 7d 22 2c 20 46 6f 72 44 69 73  t = {0}", ForDis
20620 70 6c 61 79 28 65 6c 65 6d 65 6e 74 29 29 2c 20  play(element)), 
20630 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
20640 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
20650 20 20 20 69 66 20 28 21 77 68 61 74 49 66 29 0d     if (!whatIf).
20660 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
20670 20 20 20 20 20 64 6f 63 75 6d 65 6e 74 2e 53 61       document.Sa
20680 76 65 28 66 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d  ve(fileName);...
20690 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
206a0 20 73 61 76 65 64 20 3d 20 74 72 75 65 3b 0d 0a   saved = true;..
206b0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
206c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
206d0 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20  urn true;..     
206e0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
206f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20700 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20710 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20720 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20730 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
20740 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
20750 63 20 62 6f 6f 6c 20 50 72 6f 63 65 73 73 44 62  c bool ProcessDb
20760 50 72 6f 76 69 64 65 72 46 61 63 74 6f 72 79 28  ProviderFactory(
20770 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
20780 72 69 6e 67 20 66 69 6c 65 4e 61 6d 65 2c 0d 0a  ring fileName,..
20790 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
207a0 6e 67 20 69 6e 76 61 72 69 61 6e 74 2c 0d 0a 20  ng invariant,.. 
207b0 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
207c0 67 20 6e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20  g name,..       
207d0 20 20 20 20 20 73 74 72 69 6e 67 20 64 65 73 63       string desc
207e0 72 69 70 74 69 6f 6e 2c 0d 0a 20 20 20 20 20 20  ription,..      
207f0 20 20 20 20 20 20 73 74 72 69 6e 67 20 74 79 70        string typ
20800 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20  eName,..        
20810 20 20 20 20 41 73 73 65 6d 62 6c 79 4e 61 6d 65      AssemblyName
20820 20 61 73 73 65 6d 62 6c 79 4e 61 6d 65 2c 0d 0a   assemblyName,..
20830 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65              obje
20840 63 74 20 63 6c 69 65 6e 74 44 61 74 61 2c 0d 0a  ct clientData,..
20850 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
20860 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20   whatIf,..      
20870 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f        bool verbo
20880 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se,..           
20890 20 72 65 66 20 62 6f 6f 6c 20 73 61 76 65 64 2c   ref bool saved,
208a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
208b0 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a  f string error..
208c0 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20              ).. 
208d0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
208e0 20 20 20 20 20 20 41 6e 79 50 61 69 72 3c 73 74        AnyPair<st
208f0 72 69 6e 67 2c 20 62 6f 6f 6c 3e 20 70 61 69 72  ring, bool> pair
20900 20 3d 20 63 6c 69 65 6e 74 44 61 74 61 20 61 73   = clientData as
20910 20 41 6e 79 50 61 69 72 3c 73 74 72 69 6e 67 2c   AnyPair<string,
20920 20 62 6f 6f 6c 3e 3b 0d 0a 0d 0a 20 20 20 20 20   bool>;....     
20930 20 20 20 20 20 20 20 69 66 20 28 70 61 69 72 20         if (pair 
20940 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
20950 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
20960 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
20970 20 22 69 6e 76 61 6c 69 64 20 66 72 61 6d 65 77   "invalid framew
20980 6f 72 6b 20 63 6f 6e 66 69 67 20 63 61 6c 6c 62  ork config callb
20990 61 63 6b 20 64 61 74 61 22 3b 0d 0a 20 20 20 20  ack data";..    
209a0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
209b0 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
209c0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
209d0 20 20 20 20 20 20 20 20 69 66 20 28 70 61 69 72          if (pair
209e0 2e 59 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  .Y)..           
209f0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
20a00 20 20 20 20 72 65 74 75 72 6e 20 52 65 6d 6f 76      return Remov
20a10 65 44 62 50 72 6f 76 69 64 65 72 46 61 63 74 6f  eDbProviderFacto
20a20 72 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ry(..           
20a30 20 20 20 20 20 20 20 20 20 66 69 6c 65 4e 61 6d           fileNam
20a40 65 2c 20 69 6e 76 61 72 69 61 6e 74 2c 20 77 68  e, invariant, wh
20a50 61 74 49 66 2c 20 76 65 72 62 6f 73 65 2c 20 72  atIf, verbose, r
20a60 65 66 20 73 61 76 65 64 2c 0d 0a 20 20 20 20 20  ef saved,..     
20a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
20a80 65 66 20 65 72 72 6f 72 29 20 26 26 0d 0a 20 20  ef error) &&..  
20a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 41 64                Ad
20aa0 64 44 62 50 72 6f 76 69 64 65 72 46 61 63 74 6f  dDbProviderFacto
20ab0 72 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ry(..           
20ac0 20 20 20 20 20 20 20 20 20 66 69 6c 65 4e 61 6d           fileNam
20ad0 65 2c 20 69 6e 76 61 72 69 61 6e 74 2c 20 6e 61  e, invariant, na
20ae0 6d 65 2c 20 64 65 73 63 72 69 70 74 69 6f 6e 2c  me, description,
20af0 20 74 79 70 65 4e 61 6d 65 2c 0d 0a 20 20 20 20   typeName,..    
20b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20b10 61 73 73 65 6d 62 6c 79 4e 61 6d 65 2c 20 77 68  assemblyName, wh
20b20 61 74 49 66 2c 20 76 65 72 62 6f 73 65 2c 20 72  atIf, verbose, r
20b30 65 66 20 73 61 76 65 64 2c 20 72 65 66 20 65 72  ef saved, ref er
20b40 72 6f 72 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ror);..         
20b50 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
20b60 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20    else..        
20b70 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
20b80 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 52 65         return Re
20b90 6d 6f 76 65 44 62 50 72 6f 76 69 64 65 72 46 61  moveDbProviderFa
20ba0 63 74 6f 72 79 28 0d 0a 20 20 20 20 20 20 20 20  ctory(..        
20bb0 20 20 20 20 20 20 20 20 20 20 20 20 66 69 6c 65              file
20bc0 4e 61 6d 65 2c 20 69 6e 76 61 72 69 61 6e 74 2c  Name, invariant,
20bd0 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65   whatIf, verbose
20be0 2c 20 72 65 66 20 73 61 76 65 64 2c 0d 0a 20 20  , ref saved,..  
20bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20c00 20 20 72 65 66 20 65 72 72 6f 72 29 3b 0d 0a 20    ref error);.. 
20c10 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
20c20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
20c30 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
20c40 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
20c50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20c60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20c70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20c80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
20c90 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f  ..        #regio
20ca0 6e 20 41 73 73 65 6d 62 6c 79 20 46 6f 6c 64 65  n Assembly Folde
20cb0 72 73 20 48 61 6e 64 6c 69 6e 67 0d 0a 20 20 20  rs Handling..   
20cc0 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61       private sta
20cd0 74 69 63 20 73 74 72 69 6e 67 20 47 65 74 41 73  tic string GetAs
20ce0 73 65 6d 62 6c 79 46 6f 6c 64 65 72 73 4b 65 79  semblyFoldersKey
20cf0 4e 61 6d 65 28 0d 0a 20 20 20 20 20 20 20 20 20  Name(..         
20d00 20 20 20 73 74 72 69 6e 67 20 66 72 61 6d 65 77     string framew
20d10 6f 72 6b 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20  orkName,..      
20d20 20 20 20 20 20 20 56 65 72 73 69 6f 6e 20 66 72        Version fr
20d30 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 0d  ameworkVersion,.
20d40 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72  .            str
20d50 69 6e 67 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65  ing platformName
20d60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d  ..            ).
20d70 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
20d80 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 66          string f
20d90 6f 72 6d 61 74 20 3d 20 21 53 74 72 69 6e 67 2e  ormat = !String.
20da0 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 70 6c  IsNullOrEmpty(pl
20db0 61 74 66 6f 72 6d 4e 61 6d 65 29 20 3f 0d 0a 20  atformName) ?.. 
20dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
20dd0 53 6f 66 74 77 61 72 65 5c 5c 4d 69 63 72 6f 73  Software\\Micros
20de0 6f 66 74 5c 5c 7b 30 7d 5c 5c 76 7b 31 7d 5c 5c  oft\\{0}\\v{1}\\
20df0 7b 32 7d 5c 5c 41 73 73 65 6d 62 6c 79 46 6f 6c  {2}\\AssemblyFol
20e00 64 65 72 73 45 78 22 20 3a 0d 0a 20 20 20 20 20  dersEx" :..     
20e10 20 20 20 20 20 20 20 20 20 20 20 22 53 6f 66 74             "Soft
20e20 77 61 72 65 5c 5c 4d 69 63 72 6f 73 6f 66 74 5c  ware\\Microsoft\
20e30 5c 7b 30 7d 5c 5c 76 7b 31 7d 5c 5c 41 73 73 65  \{0}\\v{1}\\Asse
20e40 6d 62 6c 79 46 6f 6c 64 65 72 73 45 78 22 3b 0d  mblyFoldersEx";.
20e50 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ...            r
20e60 65 74 75 72 6e 20 53 74 72 69 6e 67 2e 46 6f 72  eturn String.For
20e70 6d 61 74 28 66 6f 72 6d 61 74 2c 20 66 72 61 6d  mat(format, fram
20e80 65 77 6f 72 6b 4e 61 6d 65 2c 20 66 72 61 6d 65  eworkName, frame
20e90 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 0d 0a 20 20  workVersion,..  
20ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 6c                pl
20eb0 61 74 66 6f 72 6d 4e 61 6d 65 29 3b 0d 0a 20 20  atformName);..  
20ec0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
20ed0 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
20ee0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20ef0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20f00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20f10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
20f20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
20f30 61 74 69 63 20 62 6f 6f 6c 20 41 64 64 54 6f 41  atic bool AddToA
20f40 73 73 65 6d 62 6c 79 46 6f 6c 64 65 72 73 28 0d  ssemblyFolders(.
20f50 0a 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67  .            Reg
20f60 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79  istryKey rootKey
20f70 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  ,..            s
20f80 74 72 69 6e 67 20 66 72 61 6d 65 77 6f 72 6b 4e  tring frameworkN
20f90 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ame,..          
20fa0 20 20 56 65 72 73 69 6f 6e 20 66 72 61 6d 65 77    Version framew
20fb0 6f 72 6b 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20  orkVersion,..   
20fc0 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
20fd0 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c 0d 0a 20  platformName,.. 
20fe0 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
20ff0 67 20 73 75 62 4b 65 79 4e 61 6d 65 2c 0d 0a 20  g subKeyName,.. 
21000 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
21010 67 20 64 69 72 65 63 74 6f 72 79 2c 0d 0a 20 20  g directory,..  
21020 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77            bool w
21030 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20  hatIf,..        
21040 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65      bool verbose
21050 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ,..            r
21060 65 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72 0d  ef string error.
21070 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a  .            )..
21080 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
21090 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6b 65         string ke
210a0 79 4e 61 6d 65 20 3d 20 47 65 74 41 73 73 65 6d  yName = GetAssem
210b0 62 6c 79 46 6f 6c 64 65 72 73 4b 65 79 4e 61 6d  blyFoldersKeyNam
210c0 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
210d0 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d      frameworkNam
210e0 65 2c 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73  e, frameworkVers
210f0 69 6f 6e 2c 20 70 6c 61 74 66 6f 72 6d 4e 61 6d  ion, platformNam
21100 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
21110 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65     using (MockRe
21120 67 69 73 74 72 79 4b 65 79 20 6b 65 79 20 3d 20  gistryKey key = 
21130 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 4f  RegistryHelper.O
21140 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20  penSubKey(..    
21150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21160 72 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e 61 6d 65  rootKey, keyName
21170 2c 20 74 72 75 65 2c 20 77 68 61 74 49 66 2c 20  , true, whatIf, 
21180 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20  verbose))..     
21190 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
211a0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6b 65            if (ke
211b0 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  y == null)..    
211c0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
211d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
211e0 20 20 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e     error = Strin
211f0 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
21200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21210 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20 6f 70     "could not op
21220 65 6e 20 72 65 67 69 73 74 72 79 20 6b 65 79 3a  en registry key:
21230 20 7b 30 7d 5c 5c 7b 31 7d 22 2c 0d 0a 20 20 20   {0}\\{1}",..   
21240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21250 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 6b 65       rootKey, ke
21260 79 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  yName);....     
21270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
21280 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
21290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
212a0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
212b0 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65     using (MockRe
212c0 67 69 73 74 72 79 4b 65 79 20 73 75 62 4b 65 79  gistryKey subKey
212d0 20 3d 20 52 65 67 69 73 74 72 79 48 65 6c 70 65   = RegistryHelpe
212e0 72 2e 43 72 65 61 74 65 53 75 62 4b 65 79 28 0d  r.CreateSubKey(.
212f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
21300 20 20 20 20 20 20 20 20 20 6b 65 79 2c 20 73 75           key, su
21310 62 4b 65 79 4e 61 6d 65 2c 20 77 68 61 74 49 66  bKeyName, whatIf
21320 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20  , verbose))..   
21330 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
21340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21350 20 20 20 20 69 66 20 28 73 75 62 4b 65 79 20 3d      if (subKey =
21360 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
21370 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
21380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21390 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
213a0 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
213b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
213c0 20 20 20 20 20 20 20 20 20 20 20 20 22 63 6f 75              "cou
213d0 6c 64 20 6e 6f 74 20 63 72 65 61 74 65 20 72 65  ld not create re
213e0 67 69 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c  gistry key: {0}\
213f0 5c 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20  \{1}",..        
21400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21410 20 20 20 20 6b 65 79 2c 20 73 75 62 4b 65 79 4e      key, subKeyN
21420 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ame);....       
21430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21440 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
21450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21460 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
21470 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67               Reg
21480 69 73 74 72 79 48 65 6c 70 65 72 2e 53 65 74 56  istryHelper.SetV
21490 61 6c 75 65 28 0d 0a 20 20 20 20 20 20 20 20 20  alue(..         
214a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
214b0 75 62 4b 65 79 2c 20 6e 75 6c 6c 2c 20 64 69 72  ubKey, null, dir
214c0 65 63 74 6f 72 79 2c 20 77 68 61 74 49 66 2c 20  ectory, whatIf, 
214d0 76 65 72 62 6f 73 65 29 3b 0d 0a 20 20 20 20 20  verbose);..     
214e0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
214f0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
21500 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
21510 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20  n true;..       
21520 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f   }....        //
21530 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21540 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21550 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21560 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21570 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
21580 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
21590 62 6f 6f 6c 20 52 65 6d 6f 76 65 46 72 6f 6d 41  bool RemoveFromA
215a0 73 73 65 6d 62 6c 79 46 6f 6c 64 65 72 73 28 0d  ssemblyFolders(.
215b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67  .            Reg
215c0 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79  istryKey rootKey
215d0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  ,..            s
215e0 74 72 69 6e 67 20 66 72 61 6d 65 77 6f 72 6b 4e  tring frameworkN
215f0 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ame,..          
21600 20 20 56 65 72 73 69 6f 6e 20 66 72 61 6d 65 77    Version framew
21610 6f 72 6b 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20  orkVersion,..   
21620 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
21630 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c 0d 0a 20  platformName,.. 
21640 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
21650 67 20 73 75 62 4b 65 79 4e 61 6d 65 2c 0d 0a 20  g subKeyName,.. 
21660 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
21670 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20  whatIf,..       
21680 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73       bool verbos
21690 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
216a0 72 65 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72  ref string error
216b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d  ..            ).
216c0 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
216d0 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 6b          string k
216e0 65 79 4e 61 6d 65 20 3d 20 47 65 74 41 73 73 65  eyName = GetAsse
216f0 6d 62 6c 79 46 6f 6c 64 65 72 73 4b 65 79 4e 61  mblyFoldersKeyNa
21700 6d 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me(..           
21710 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4e 61       frameworkNa
21720 6d 65 2c 20 66 72 61 6d 65 77 6f 72 6b 56 65 72  me, frameworkVer
21730 73 69 6f 6e 2c 20 70 6c 61 74 66 6f 72 6d 4e 61  sion, platformNa
21740 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  me);....        
21750 20 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52      using (MockR
21760 65 67 69 73 74 72 79 4b 65 79 20 6b 65 79 20 3d  egistryKey key =
21770 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e   RegistryHelper.
21780 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20  OpenSubKey(..   
21790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
217a0 20 72 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e 61 6d   rootKey, keyNam
217b0 65 2c 20 66 61 6c 73 65 2c 20 77 68 61 74 49 66  e, false, whatIf
217c0 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20  , verbose))..   
217d0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
217e0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
217f0 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  key == null)..  
21800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
21810 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
21820 20 20 20 20 20 65 72 72 6f 72 20 3d 20 53 74 72       error = Str
21830 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
21840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21850 20 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20       "could not 
21860 6f 70 65 6e 20 72 65 67 69 73 74 72 79 20 6b 65  open registry ke
21870 79 3a 20 7b 30 7d 5c 5c 7b 31 7d 22 2c 0d 0a 20  y: {0}\\{1}",.. 
21880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21890 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20         rootKey, 
218a0 6b 65 79 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20  keyName);....   
218b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
218c0 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
218d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
218e0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
218f0 20 20 20 20 20 52 65 67 69 73 74 72 79 48 65 6c       RegistryHel
21900 70 65 72 2e 44 65 6c 65 74 65 53 75 62 4b 65 79  per.DeleteSubKey
21910 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
21920 20 20 20 20 20 20 20 6b 65 79 2c 20 73 75 62 4b         key, subK
21930 65 79 4e 61 6d 65 2c 20 77 68 61 74 49 66 2c 20  eyName, whatIf, 
21940 76 65 72 62 6f 73 65 29 3b 0d 0a 20 20 20 20 20  verbose);..     
21950 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
21960 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74          return t
21970 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  rue;..        }.
21980 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
21990 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
219a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
219b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
219c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
219d0 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72  //....        pr
219e0 69 76 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f  ivate static boo
219f0 6c 20 50 72 6f 63 65 73 73 41 73 73 65 6d 62 6c  l ProcessAssembl
21a00 79 46 6f 6c 64 65 72 73 28 0d 0a 20 20 20 20 20  yFolders(..     
21a10 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79 4b         RegistryK
21a20 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20  ey rootKey,..   
21a30 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
21a40 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 0d 0a  frameworkName,..
21a50 20 20 20 20 20 20 20 20 20 20 20 20 56 65 72 73              Vers
21a60 69 6f 6e 20 66 72 61 6d 65 77 6f 72 6b 56 65 72  ion frameworkVer
21a70 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20  sion,..         
21a80 20 20 20 73 74 72 69 6e 67 20 70 6c 61 74 66 6f     string platfo
21a90 72 6d 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20  rmName,..       
21aa0 20 20 20 20 20 6f 62 6a 65 63 74 20 63 6c 69 65       object clie
21ab0 6e 74 44 61 74 61 2c 0d 0a 20 20 20 20 20 20 20  ntData,..       
21ac0 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66       bool whatIf
21ad0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
21ae0 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20  ool verbose,..  
21af0 20 20 20 20 20 20 20 20 20 20 72 65 66 20 73 74            ref st
21b00 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20 20  ring error..    
21b10 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
21b20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
21b30 20 20 41 6e 79 50 61 69 72 3c 73 74 72 69 6e 67    AnyPair<string
21b40 2c 20 62 6f 6f 6c 3e 20 70 61 69 72 20 3d 20 63  , bool> pair = c
21b50 6c 69 65 6e 74 44 61 74 61 20 61 73 20 41 6e 79  lientData as Any
21b60 50 61 69 72 3c 73 74 72 69 6e 67 2c 20 62 6f 6f  Pair<string, boo
21b70 6c 3e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  l>;....         
21b80 20 20 20 69 66 20 28 70 61 69 72 20 3d 3d 20 6e     if (pair == n
21b90 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
21ba0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
21bb0 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69 6e       error = "in
21bc0 76 61 6c 69 64 20 66 72 61 6d 65 77 6f 72 6b 20  valid framework 
21bd0 63 61 6c 6c 62 61 63 6b 20 64 61 74 61 22 3b 0d  callback data";.
21be0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
21bf0 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
21c00 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
21c10 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
21c20 28 70 61 69 72 2e 59 29 0d 0a 20 20 20 20 20 20  (pair.Y)..      
21c30 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
21c40 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
21c50 52 65 6d 6f 76 65 46 72 6f 6d 41 73 73 65 6d 62  RemoveFromAssemb
21c60 6c 79 46 6f 6c 64 65 72 73 28 0d 0a 20 20 20 20  lyFolders(..    
21c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21c80 72 6f 6f 74 4b 65 79 2c 20 66 72 61 6d 65 77 6f  rootKey, framewo
21c90 72 6b 4e 61 6d 65 2c 20 66 72 61 6d 65 77 6f 72  rkName, framewor
21ca0 6b 56 65 72 73 69 6f 6e 2c 20 70 6c 61 74 66 6f  kVersion, platfo
21cb0 72 6d 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20  rmName,..       
21cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 4c 65 67               Leg
21cd0 61 63 79 50 72 6f 6a 65 63 74 4e 61 6d 65 2c 20  acyProjectName, 
21ce0 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 2c  whatIf, verbose,
21cf0 20 72 65 66 20 65 72 72 6f 72 29 20 26 26 0d 0a   ref error) &&..
21d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21d10 41 64 64 54 6f 41 73 73 65 6d 62 6c 79 46 6f 6c  AddToAssemblyFol
21d20 64 65 72 73 28 0d 0a 20 20 20 20 20 20 20 20 20  ders(..         
21d30 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b             rootK
21d40 65 79 2c 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d  ey, frameworkNam
21d50 65 2c 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73  e, frameworkVers
21d60 69 6f 6e 2c 20 70 6c 61 74 66 6f 72 6d 4e 61 6d  ion, platformNam
21d70 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
21d80 20 20 20 20 20 20 20 20 50 72 6f 6a 65 63 74 4e          ProjectN
21d90 61 6d 65 2c 20 70 61 69 72 2e 58 2c 20 77 68 61  ame, pair.X, wha
21da0 74 49 66 2c 20 76 65 72 62 6f 73 65 2c 20 72 65  tIf, verbose, re
21db0 66 20 65 72 72 6f 72 29 3b 0d 0a 20 20 20 20 20  f error);..     
21dc0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
21dd0 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20        else..    
21de0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
21df0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
21e00 6e 20 52 65 6d 6f 76 65 46 72 6f 6d 41 73 73 65  n RemoveFromAsse
21e10 6d 62 6c 79 46 6f 6c 64 65 72 73 28 0d 0a 20 20  mblyFolders(..  
21e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21e30 20 20 72 6f 6f 74 4b 65 79 2c 20 66 72 61 6d 65    rootKey, frame
21e40 77 6f 72 6b 4e 61 6d 65 2c 20 66 72 61 6d 65 77  workName, framew
21e50 6f 72 6b 56 65 72 73 69 6f 6e 2c 20 70 6c 61 74  orkVersion, plat
21e60 66 6f 72 6d 4e 61 6d 65 2c 0d 0a 20 20 20 20 20  formName,..     
21e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 50                 P
21e80 72 6f 6a 65 63 74 4e 61 6d 65 2c 20 77 68 61 74  rojectName, what
21e90 49 66 2c 20 76 65 72 62 6f 73 65 2c 20 72 65 66  If, verbose, ref
21ea0 20 65 72 72 6f 72 29 3b 0d 0a 20 20 20 20 20 20   error);..      
21eb0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
21ec0 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64   }..        #end
21ed0 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
21ee0 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
21ef0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21f00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21f10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21f20 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
21f30 20 20 20 20 20 23 72 65 67 69 6f 6e 20 56 69 73       #region Vis
21f40 75 61 6c 20 53 74 75 64 69 6f 20 48 61 6e 64 6c  ual Studio Handl
21f50 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 70 72 69  ing..        pri
21f60 76 61 74 65 20 73 74 61 74 69 63 20 73 74 72 69  vate static stri
21f70 6e 67 20 47 65 74 56 73 4b 65 79 4e 61 6d 65 28  ng GetVsKeyName(
21f80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 56 65  ..            Ve
21f90 72 73 69 6f 6e 20 76 73 56 65 72 73 69 6f 6e 0d  rsion vsVersion.
21fa0 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a  .            )..
21fb0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
21fc0 20 20 20 20 20 20 20 69 66 20 28 76 73 56 65 72         if (vsVer
21fd0 73 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  sion == null).. 
21fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
21ff0 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20  eturn null;.... 
22000 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
22010 6e 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  n String.Format(
22020 22 53 6f 66 74 77 61 72 65 5c 5c 4d 69 63 72 6f  "Software\\Micro
22030 73 6f 66 74 5c 5c 56 69 73 75 61 6c 53 74 75 64  soft\\VisualStud
22040 69 6f 5c 5c 7b 30 7d 22 2c 0d 0a 20 20 20 20 20  io\\{0}",..     
22050 20 20 20 20 20 20 20 20 20 20 20 76 73 56 65 72             vsVer
22060 73 69 6f 6e 29 3b 0d 0a 20 20 20 20 20 20 20 20  sion);..        
22070 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  }....        ///
22080 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22090 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
220a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
220b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
220c0 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
220d0 23 72 65 67 69 6f 6e 20 56 69 73 75 61 6c 20 53  #region Visual S
220e0 74 75 64 69 6f 20 56 65 72 73 69 6f 6e 20 48 61  tudio Version Ha
220f0 6e 64 6c 69 6e 67 0d 0a 20 20 20 20 20 20 20 20  ndling..        
22100 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 62  private static b
22110 6f 6f 6c 20 41 64 64 56 73 56 65 72 73 69 6f 6e  ool AddVsVersion
22120 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 52  (..            R
22130 65 67 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b  egistryKey rootK
22140 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey,..           
22150 20 56 65 72 73 69 6f 6e 20 76 73 56 65 72 73 69   Version vsVersi
22160 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on,..           
22170 20 50 61 63 6b 61 67 65 20 70 61 63 6b 61 67 65   Package package
22180 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6f  ,..            o
22190 62 6a 65 63 74 20 63 6c 69 65 6e 74 44 61 74 61  bject clientData
221a0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
221b0 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20  ool whatIf,..   
221c0 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65           bool ve
221d0 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 20  rbose,..        
221e0 20 20 20 20 72 65 66 20 73 74 72 69 6e 67 20 65      ref string e
221f0 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20  rror..          
22200 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a    )..        {..
22210 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
22220 76 73 56 65 72 73 69 6f 6e 20 21 3d 20 6e 75 6c  vsVersion != nul
22230 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
22240 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
22250 20 20 20 56 73 4c 69 73 74 20 76 73 4c 69 73 74     VsList vsList
22260 20 3d 20 63 6c 69 65 6e 74 44 61 74 61 20 61 73   = clientData as
22270 20 56 73 4c 69 73 74 3b 0d 0a 0d 0a 20 20 20 20   VsList;....    
22280 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
22290 76 73 4c 69 73 74 20 21 3d 20 6e 75 6c 6c 29 0d  vsList != null).
222a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
222b0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
222c0 20 20 20 20 20 20 20 20 69 66 20 28 76 73 4c 69          if (vsLi
222d0 73 74 2e 49 6e 73 74 61 6c 6c 65 64 56 65 72 73  st.InstalledVers
222e0 69 6f 6e 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  ions == null).. 
222f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22300 20 20 20 20 20 20 20 76 73 4c 69 73 74 2e 49 6e         vsList.In
22310 73 74 61 6c 6c 65 64 56 65 72 73 69 6f 6e 73 20  stalledVersions 
22320 3d 20 6e 65 77 20 56 65 72 73 69 6f 6e 4c 69 73  = new VersionLis
22330 74 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  t();....        
22340 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
22350 21 76 73 4c 69 73 74 2e 49 6e 73 74 61 6c 6c 65  !vsList.Installe
22360 64 56 65 72 73 69 6f 6e 73 2e 43 6f 6e 74 61 69  dVersions.Contai
22370 6e 73 28 76 73 56 65 72 73 69 6f 6e 29 29 0d 0a  ns(vsVersion))..
22380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22390 20 20 20 20 20 20 20 20 76 73 4c 69 73 74 2e 49          vsList.I
223a0 6e 73 74 61 6c 6c 65 64 56 65 72 73 69 6f 6e 73  nstalledVersions
223b0 2e 41 64 64 28 76 73 56 65 72 73 69 6f 6e 29 3b  .Add(vsVersion);
223c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
223d0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
223e0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
223f0 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a    return true;..
22400 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
22410 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
22420 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
22430 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22440 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22450 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22460 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22470 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67  ....        #reg
22480 69 6f 6e 20 56 69 73 75 61 6c 20 53 74 75 64 69  ion Visual Studi
22490 6f 20 44 61 74 61 20 53 6f 75 72 63 65 20 48 61  o Data Source Ha
224a0 6e 64 6c 69 6e 67 0d 0a 20 20 20 20 20 20 20 20  ndling..        
224b0 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 62  private static b
224c0 6f 6f 6c 20 41 64 64 56 73 44 61 74 61 53 6f 75  ool AddVsDataSou
224d0 72 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  rce(..          
224e0 20 20 52 65 67 69 73 74 72 79 4b 65 79 20 72 6f    RegistryKey ro
224f0 6f 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20  otKey,..        
22500 20 20 20 20 56 65 72 73 69 6f 6e 20 76 73 56 65      Version vsVe
22510 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20  rsion,..        
22520 20 20 20 20 50 61 63 6b 61 67 65 20 70 61 63 6b      Package pack
22530 61 67 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  age,..          
22540 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a    bool whatIf,..
22550 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
22560 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20   verbose,..     
22570 20 20 20 20 20 20 20 72 65 66 20 73 74 72 69 6e         ref strin
22580 67 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20  g error..       
22590 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
225a0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  {..            i
225b0 66 20 28 76 73 56 65 72 73 69 6f 6e 20 3d 3d 20  f (vsVersion == 
225c0 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
225d0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
225e0 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69        error = "i
225f0 6e 76 61 6c 69 64 20 56 53 20 76 65 72 73 69 6f  nvalid VS versio
22600 6e 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n";..           
22610 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
22620 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
22630 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
22640 20 69 66 20 28 70 61 63 6b 61 67 65 20 3d 3d 20   if (package == 
22650 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
22660 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
22670 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69        error = "i
22680 6e 76 61 6c 69 64 20 56 53 20 70 61 63 6b 61 67  nvalid VS packag
22690 65 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e";..           
226a0 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
226b0 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
226c0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
226d0 20 73 74 72 69 6e 67 20 6b 65 79 4e 61 6d 65 20   string keyName 
226e0 3d 20 47 65 74 56 73 4b 65 79 4e 61 6d 65 28 76  = GetVsKeyName(v
226f0 73 56 65 72 73 69 6f 6e 29 3b 0d 0a 0d 0a 20 20  sVersion);....  
22700 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20            using 
22710 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79  (MockRegistryKey
22720 20 6b 65 79 20 3d 20 52 65 67 69 73 74 72 79 48   key = RegistryH
22730 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62 4b 65 79  elper.OpenSubKey
22740 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
22750 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20         rootKey, 
22760 6b 65 79 4e 61 6d 65 2c 20 66 61 6c 73 65 2c 20  keyName, false, 
22770 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29  whatIf, verbose)
22780 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
22790 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
227a0 20 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c    if (key == nul
227b0 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
227c0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
227d0 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
227e0 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74   = String.Format
227f0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
22800 20 20 20 20 20 20 20 20 20 20 20 22 63 6f 75 6c             "coul
22810 64 20 6e 6f 74 20 6f 70 65 6e 20 72 65 67 69 73  d not open regis
22820 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 7b 31  try key: {0}\\{1
22830 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }",..           
22840 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f               roo
22850 74 4b 65 79 2c 20 6b 65 79 4e 61 6d 65 29 3b 0d  tKey, keyName);.
22860 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
22870 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
22880 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lse;..          
22890 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
228a0 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67             using
228b0 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65   (MockRegistryKe
228c0 79 20 73 75 62 4b 65 79 20 3d 20 52 65 67 69 73  y subKey = Regis
228d0 74 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75  tryHelper.OpenSu
228e0 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20  bKey(..         
228f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b                 k
22900 65 79 2c 20 22 44 61 74 61 53 6f 75 72 63 65 73  ey, "DataSources
22910 22 2c 20 74 72 75 65 2c 20 77 68 61 74 49 66 2c  ", true, whatIf,
22920 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20   verbose))..    
22930 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
22940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22950 20 20 20 69 66 20 28 73 75 62 4b 65 79 20 3d 3d     if (subKey ==
22960 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
22970 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
22980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22990 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 53         error = S
229a0 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
229b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
229c0 20 20 20 20 20 20 20 20 20 20 20 22 63 6f 75 6c             "coul
229d0 64 20 6e 6f 74 20 6f 70 65 6e 20 72 65 67 69 73  d not open regis
229e0 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 44 61  try key: {0}\\Da
229f0 74 61 53 6f 75 72 63 65 73 22 2c 0d 0a 20 20 20  taSources",..   
22a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22a10 20 20 20 20 20 20 20 20 20 6b 65 79 29 3b 0d 0a           key);..
22a20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
22a30 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
22a40 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
22a50 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
22a60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
22a70 20 20 20 20 20 20 75 73 69 6e 67 20 28 4d 6f 63        using (Moc
22a80 6b 52 65 67 69 73 74 72 79 4b 65 79 20 64 61 74  kRegistryKey dat
22a90 61 53 6f 75 72 63 65 4b 65 79 20 3d 0d 0a 20 20  aSourceKey =..  
22aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22ab0 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74            Regist
22ac0 72 79 48 65 6c 70 65 72 2e 43 72 65 61 74 65 53  ryHelper.CreateS
22ad0 75 62 4b 65 79 28 73 75 62 4b 65 79 2c 0d 0a 20  ubKey(subKey,.. 
22ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22af0 20 20 20 20 20 20 20 20 20 20 20 70 61 63 6b 61             packa
22b00 67 65 2e 44 61 74 61 53 6f 75 72 63 65 49 64 2e  ge.DataSourceId.
22b10 54 6f 53 74 72 69 6e 67 28 56 73 49 64 46 6f 72  ToString(VsIdFor
22b20 6d 61 74 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  mat),..         
22b30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22b40 20 20 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f     whatIf, verbo
22b50 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  se))..          
22b60 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
22b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22b80 20 20 20 20 20 69 66 20 28 64 61 74 61 53 6f 75       if (dataSou
22b90 72 63 65 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d  rceKey == null).
22ba0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
22bb0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
22bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22bd0 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
22be0 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
22bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22c10 22 63 6f 75 6c 64 20 6e 6f 74 20 63 72 65 61 74  "could not creat
22c20 65 20 72 65 67 69 73 74 72 79 20 6b 65 79 3a 20  e registry key: 
22c30 7b 30 7d 5c 5c 7b 31 7d 22 2c 20 6b 65 79 2c 0d  {0}\\{1}", key,.
22c40 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
22c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22c60 20 70 61 63 6b 61 67 65 2e 44 61 74 61 53 6f 75   package.DataSou
22c70 72 63 65 49 64 2e 54 6f 53 74 72 69 6e 67 28 56  rceId.ToString(V
22c80 73 49 64 46 6f 72 6d 61 74 29 29 3b 0d 0a 0d 0a  sIdFormat));....
22c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22ca0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
22cb0 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
22cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22cd0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
22ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22cf0 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 53  RegistryHelper.S
22d00 65 74 56 61 6c 75 65 28 0d 0a 20 20 20 20 20 20  etValue(..      
22d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22d20 20 20 20 20 20 20 64 61 74 61 53 6f 75 72 63 65        dataSource
22d30 4b 65 79 2c 20 6e 75 6c 6c 2c 20 53 74 72 69 6e  Key, null, Strin
22d40 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
22d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22d60 20 20 20 20 20 20 20 22 7b 30 7d 20 44 61 74 61         "{0} Data
22d70 62 61 73 65 20 46 69 6c 65 22 2c 20 50 72 6f 6a  base File", Proj
22d80 65 63 74 4e 61 6d 65 29 2c 20 77 68 61 74 49 66  ectName), whatIf
22d90 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
22da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76                 v
22db0 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20  erbose);....    
22dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22dd0 20 20 20 20 52 65 67 69 73 74 72 79 48 65 6c 70      RegistryHelp
22de0 65 72 2e 43 72 65 61 74 65 53 75 62 4b 65 79 28  er.CreateSubKey(
22df0 64 61 74 61 53 6f 75 72 63 65 4b 65 79 2c 0d 0a  dataSourceKey,..
22e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22e10 20 20 20 20 20 20 20 20 20 20 20 20 53 74 72 69              Stri
22e20 6e 67 2e 46 6f 72 6d 61 74 28 22 53 75 70 70 6f  ng.Format("Suppo
22e30 72 74 69 6e 67 50 72 6f 76 69 64 65 72 73 5c 5c  rtingProviders\\
22e40 7b 30 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  {0}",..         
22e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22e60 20 20 20 70 61 63 6b 61 67 65 2e 44 61 74 61 50     package.DataP
22e70 72 6f 76 69 64 65 72 49 64 2e 54 6f 53 74 72 69  roviderId.ToStri
22e80 6e 67 28 56 73 49 64 46 6f 72 6d 61 74 29 29 2c  ng(VsIdFormat)),
22e90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
22ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 77 68                wh
22eb0 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d  atIf, verbose);.
22ec0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
22ed0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
22ee0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
22ef0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
22f00 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74          return t
22f10 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  rue;..        }.
22f20 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
22f30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22f40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22f50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22f60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22f70 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72  //....        pr
22f80 69 76 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f  ivate static boo
22f90 6c 20 52 65 6d 6f 76 65 56 73 44 61 74 61 53 6f  l RemoveVsDataSo
22fa0 75 72 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20  urce(..         
22fb0 20 20 20 52 65 67 69 73 74 72 79 4b 65 79 20 72     RegistryKey r
22fc0 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20  ootKey,..       
22fd0 20 20 20 20 20 56 65 72 73 69 6f 6e 20 76 73 56       Version vsV
22fe0 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20  ersion,..       
22ff0 20 20 20 20 20 50 61 63 6b 61 67 65 20 70 61 63       Package pac
23000 6b 61 67 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  kage,..         
23010 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d     bool whatIf,.
23020 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
23030 6c 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20  l verbose,..    
23040 20 20 20 20 20 20 20 20 72 65 66 20 73 74 72 69          ref stri
23050 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20  ng error..      
23060 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
23070 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
23080 69 66 20 28 76 73 56 65 72 73 69 6f 6e 20 3d 3d  if (vsVersion ==
23090 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
230a0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
230b0 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22         error = "
230c0 69 6e 76 61 6c 69 64 20 56 53 20 76 65 72 73 69  invalid VS versi
230d0 6f 6e 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  on";..          
230e0 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
230f0 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se;..           
23100 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
23110 20 20 69 66 20 28 70 61 63 6b 61 67 65 20 3d 3d    if (package ==
23120 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
23130 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
23140 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22         error = "
23150 69 6e 76 61 6c 69 64 20 56 53 20 70 61 63 6b 61  invalid VS packa
23160 67 65 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ge";..          
23170 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
23180 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se;..           
23190 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
231a0 20 20 73 74 72 69 6e 67 20 6b 65 79 4e 61 6d 65    string keyName
231b0 20 3d 20 47 65 74 56 73 4b 65 79 4e 61 6d 65 28   = GetVsKeyName(
231c0 76 73 56 65 72 73 69 6f 6e 29 3b 0d 0a 0d 0a 20  vsVersion);.... 
231d0 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67             using
231e0 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65   (MockRegistryKe
231f0 79 20 6b 65 79 20 3d 20 52 65 67 69 73 74 72 79  y key = Registry
23200 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62 4b 65  Helper.OpenSubKe
23210 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
23220 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c          rootKey,
23230 20 6b 65 79 4e 61 6d 65 2c 20 66 61 6c 73 65 2c   keyName, false,
23240 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65   whatIf, verbose
23250 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
23260 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
23270 20 20 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75     if (key == nu
23280 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
23290 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
232a0 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
232b0 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  r = String.Forma
232c0 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
232d0 20 20 20 20 20 20 20 20 20 20 20 20 22 63 6f 75              "cou
232e0 6c 64 20 6e 6f 74 20 6f 70 65 6e 20 72 65 67 69  ld not open regi
232f0 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 7b  stry key: {0}\\{
23300 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  1}",..          
23310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f                ro
23320 6f 74 4b 65 79 2c 20 6b 65 79 4e 61 6d 65 29 3b  otKey, keyName);
23330 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
23340 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
23350 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
23360 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
23370 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e              usin
23380 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b  g (MockRegistryK
23390 65 79 20 73 75 62 4b 65 79 20 3d 20 52 65 67 69  ey subKey = Regi
233a0 73 74 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53  stryHelper.OpenS
233b0 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20  ubKey(..        
233c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
233d0 6b 65 79 2c 20 22 44 61 74 61 53 6f 75 72 63 65  key, "DataSource
233e0 73 22 2c 20 74 72 75 65 2c 20 77 68 61 74 49 66  s", true, whatIf
233f0 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20  , verbose))..   
23400 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
23410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23420 20 20 20 20 69 66 20 28 73 75 62 4b 65 79 20 3d      if (subKey =
23430 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
23440 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
23450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23460 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
23470 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
23480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23490 20 20 20 20 20 20 20 20 20 20 20 20 22 63 6f 75              "cou
234a0 6c 64 20 6e 6f 74 20 6f 70 65 6e 20 72 65 67 69  ld not open regi
234b0 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 44  stry key: {0}\\D
234c0 61 74 61 53 6f 75 72 63 65 73 22 2c 0d 0a 20 20  ataSources",..  
234d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
234e0 20 20 20 20 20 20 20 20 20 20 6b 65 79 29 3b 0d            key);.
234f0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
23500 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
23510 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
23520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
23530 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
23540 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79 48         RegistryH
23550 65 6c 70 65 72 2e 44 65 6c 65 74 65 53 75 62 4b  elper.DeleteSubK
23560 65 79 54 72 65 65 28 0d 0a 20 20 20 20 20 20 20  eyTree(..       
23570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23580 20 73 75 62 4b 65 79 2c 20 70 61 63 6b 61 67 65   subKey, package
23590 2e 44 61 74 61 53 6f 75 72 63 65 49 64 2e 54 6f  .DataSourceId.To
235a0 53 74 72 69 6e 67 28 56 73 49 64 46 6f 72 6d 61  String(VsIdForma
235b0 74 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  t),..           
235c0 20 20 20 20 20 20 20 20 20 20 20 20 20 77 68 61               wha
235d0 74 49 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a  tIf, verbose);..
235e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
235f0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
23600 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
23610 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20  return true;..  
23620 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
23630 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
23640 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23650 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23660 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23670 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
23680 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
23690 61 74 69 63 20 62 6f 6f 6c 20 50 72 6f 63 65 73  atic bool Proces
236a0 73 56 73 44 61 74 61 53 6f 75 72 63 65 28 0d 0a  sVsDataSource(..
236b0 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69              Regi
236c0 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c  stryKey rootKey,
236d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 56 65  ..            Ve
236e0 72 73 69 6f 6e 20 76 73 56 65 72 73 69 6f 6e 2c  rsion vsVersion,
236f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 50 61  ..            Pa
23700 63 6b 61 67 65 20 70 61 63 6b 61 67 65 2c 0d 0a  ckage package,..
23710 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65              obje
23720 63 74 20 63 6c 69 65 6e 74 44 61 74 61 2c 0d 0a  ct clientData,..
23730 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
23740 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20   whatIf,..      
23750 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f        bool verbo
23760 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se,..           
23770 20 72 65 66 20 73 74 72 69 6e 67 20 65 72 72 6f   ref string erro
23780 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29  r..            )
23790 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
237a0 20 20 20 20 20 20 20 20 20 69 66 20 28 70 61 63           if (pac
237b0 6b 61 67 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  kage == null).. 
237c0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
237d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
237e0 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 56  ror = "invalid V
237f0 53 20 70 61 63 6b 61 67 65 22 3b 0d 0a 20 20 20  S package";..   
23800 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
23810 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  urn false;..    
23820 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
23830 20 20 20 20 20 20 20 20 20 41 6e 79 50 61 69 72           AnyPair
23840 3c 73 74 72 69 6e 67 2c 20 62 6f 6f 6c 3e 20 70  <string, bool> p
23850 61 69 72 20 3d 20 63 6c 69 65 6e 74 44 61 74 61  air = clientData
23860 20 61 73 20 41 6e 79 50 61 69 72 3c 73 74 72 69   as AnyPair<stri
23870 6e 67 2c 20 62 6f 6f 6c 3e 3b 0d 0a 0d 0a 20 20  ng, bool>;....  
23880 20 20 20 20 20 20 20 20 20 20 69 66 20 28 70 61            if (pa
23890 69 72 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ir == null)..   
238a0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
238b0 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
238c0 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 56 53 20  r = "invalid VS 
238d0 63 61 6c 6c 62 61 63 6b 20 64 61 74 61 22 3b 0d  callback data";.
238e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
238f0 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
23900 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
23910 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
23920 28 70 61 69 72 2e 59 29 0d 0a 20 20 20 20 20 20  (pair.Y)..      
23930 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
23940 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
23950 41 64 64 56 73 44 61 74 61 53 6f 75 72 63 65 28  AddVsDataSource(
23960 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
23970 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 76        rootKey, v
23980 73 56 65 72 73 69 6f 6e 2c 20 70 61 63 6b 61 67  sVersion, packag
23990 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f  e, whatIf, verbo
239a0 73 65 2c 20 72 65 66 20 65 72 72 6f 72 29 3b 0d  se, ref error);.
239b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
239c0 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65              else
239d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
239e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
239f0 20 72 65 74 75 72 6e 20 52 65 6d 6f 76 65 56 73   return RemoveVs
23a00 44 61 74 61 53 6f 75 72 63 65 28 0d 0a 20 20 20  DataSource(..   
23a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23a20 20 72 6f 6f 74 4b 65 79 2c 20 76 73 56 65 72 73   rootKey, vsVers
23a30 69 6f 6e 2c 20 70 61 63 6b 61 67 65 2c 20 77 68  ion, package, wh
23a40 61 74 49 66 2c 20 76 65 72 62 6f 73 65 2c 20 72  atIf, verbose, r
23a50 65 66 20 65 72 72 6f 72 29 3b 0d 0a 20 20 20 20  ef error);..    
23a60 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
23a70 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65     }..        #e
23a80 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
23a90 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
23aa0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23ab0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23ac0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23ad0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
23ae0 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 56         #region V
23af0 69 73 75 61 6c 20 53 74 75 64 69 6f 20 44 61 74  isual Studio Dat
23b00 61 20 50 72 6f 76 69 64 65 72 20 48 61 6e 64 6c  a Provider Handl
23b10 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 70 72 69  ing..        pri
23b20 76 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f 6c  vate static bool
23b30 20 41 64 64 56 73 44 61 74 61 50 72 6f 76 69 64   AddVsDataProvid
23b40 65 72 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  er(..           
23b50 20 52 65 67 69 73 74 72 79 4b 65 79 20 72 6f 6f   RegistryKey roo
23b60 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20  tKey,..         
23b70 20 20 20 56 65 72 73 69 6f 6e 20 76 73 56 65 72     Version vsVer
23b80 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20  sion,..         
23b90 20 20 20 50 61 63 6b 61 67 65 20 70 61 63 6b 61     Package packa
23ba0 67 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ge,..           
23bb0 20 73 74 72 69 6e 67 20 66 69 6c 65 4e 61 6d 65   string fileName
23bc0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
23bd0 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20  ool whatIf,..   
23be0 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65           bool ve
23bf0 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 20  rbose,..        
23c00 20 20 20 20 72 65 66 20 73 74 72 69 6e 67 20 65      ref string e
23c10 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20  rror..          
23c20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a    )..        {..
23c30 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
23c40 76 73 56 65 72 73 69 6f 6e 20 3d 3d 20 6e 75 6c  vsVersion == nul
23c50 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
23c60 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
23c70 20 20 20 65 72 72 6f 72 20 3d 20 22 69 6e 76 61     error = "inva
23c80 6c 69 64 20 56 53 20 76 65 72 73 69 6f 6e 22 3b  lid VS version";
23c90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
23ca0 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
23cb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
23cc0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
23cd0 20 28 70 61 63 6b 61 67 65 20 3d 3d 20 6e 75 6c   (package == nul
23ce0 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
23cf0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
23d00 20 20 20 65 72 72 6f 72 20 3d 20 22 69 6e 76 61     error = "inva
23d10 6c 69 64 20 56 53 20 70 61 63 6b 61 67 65 22 3b  lid VS package";
23d20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
23d30 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
23d40 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
23d50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
23d60 72 69 6e 67 20 6b 65 79 4e 61 6d 65 20 3d 20 47  ring keyName = G
23d70 65 74 56 73 4b 65 79 4e 61 6d 65 28 76 73 56 65  etVsKeyName(vsVe
23d80 72 73 69 6f 6e 29 3b 0d 0a 0d 0a 20 20 20 20 20  rsion);....     
23d90 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 4d 6f         using (Mo
23da0 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65  ckRegistryKey ke
23db0 79 20 3d 20 52 65 67 69 73 74 72 79 48 65 6c 70  y = RegistryHelp
23dc0 65 72 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a  er.OpenSubKey(..
23dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23de0 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 6b 65 79      rootKey, key
23df0 4e 61 6d 65 2c 20 66 61 6c 73 65 2c 20 77 68 61  Name, false, wha
23e00 74 49 66 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a  tIf, verbose))..
23e10 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
23e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
23e30 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d  f (key == null).
23e40 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
23e50 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
23e60 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
23e70 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a  String.Format(..
23e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23e90 20 20 20 20 20 20 20 20 22 63 6f 75 6c 64 20 6e          "could n
23ea0 6f 74 20 6f 70 65 6e 20 72 65 67 69 73 74 72 79  ot open registry
23eb0 20 6b 65 79 3a 20 7b 30 7d 5c 5c 7b 31 7d 22 2c   key: {0}\\{1}",
23ec0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
23ed0 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65            rootKe
23ee0 79 2c 20 6b 65 79 4e 61 6d 65 29 3b 0d 0a 0d 0a  y, keyName);....
23ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23f00 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
23f10 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
23f20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
23f30 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 4d          using (M
23f40 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 73  ockRegistryKey s
23f50 75 62 4b 65 79 20 3d 20 52 65 67 69 73 74 72 79  ubKey = Registry
23f60 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62 4b 65  Helper.OpenSubKe
23f70 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
23f80 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 2c              key,
23f90 20 22 44 61 74 61 50 72 6f 76 69 64 65 72 73 22   "DataProviders"
23fa0 2c 20 74 72 75 65 2c 20 77 68 61 74 49 66 2c 20  , true, whatIf, 
23fb0 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20  verbose))..     
23fc0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
23fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23fe0 20 20 69 66 20 28 73 75 62 4b 65 79 20 3d 3d 20    if (subKey == 
23ff0 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
24000 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
24010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24020 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 53 74        error = St
24030 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
24040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24050 20 20 20 20 20 20 20 20 20 20 22 63 6f 75 6c 64            "could
24060 20 6e 6f 74 20 6f 70 65 6e 20 72 65 67 69 73 74   not open regist
24070 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 44 61 74  ry key: {0}\\Dat
24080 61 50 72 6f 76 69 64 65 72 73 22 2c 0d 0a 20 20  aProviders",..  
24090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
240a0 20 20 20 20 20 20 20 20 20 20 6b 65 79 29 3b 0d            key);.
240b0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
240c0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
240d0 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
240e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
240f0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
24100 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 4d 6f         using (Mo
24110 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 64 61  ckRegistryKey da
24120 74 61 50 72 6f 76 69 64 65 72 4b 65 79 20 3d 0d  taProviderKey =.
24130 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
24140 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67               Reg
24150 69 73 74 72 79 48 65 6c 70 65 72 2e 43 72 65 61  istryHelper.Crea
24160 74 65 53 75 62 4b 65 79 28 73 75 62 4b 65 79 2c  teSubKey(subKey,
24170 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
24180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 61                pa
24190 63 6b 61 67 65 2e 44 61 74 61 50 72 6f 76 69 64  ckage.DataProvid
241a0 65 72 49 64 2e 54 6f 53 74 72 69 6e 67 28 56 73  erId.ToString(Vs
241b0 49 64 46 6f 72 6d 61 74 29 2c 0d 0a 20 20 20 20  IdFormat),..    
241c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
241d0 20 20 20 20 20 20 20 20 77 68 61 74 49 66 2c 20          whatIf, 
241e0 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20  verbose))..     
241f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
24200 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
24210 20 20 20 20 20 20 20 20 20 20 69 66 20 28 64 61            if (da
24220 74 61 50 72 6f 76 69 64 65 72 4b 65 79 20 3d 3d  taProviderKey ==
24230 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
24240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24250 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
24260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
24270 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f  rror = String.Fo
24280 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
24290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
242a0 20 20 20 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f         "could no
242b0 74 20 63 72 65 61 74 65 20 72 65 67 69 73 74 72  t create registr
242c0 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 7b 31 7d 22  y key: {0}\\{1}"
242d0 2c 20 6b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20  , key,..        
242e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
242f0 20 20 20 20 20 20 20 20 70 61 63 6b 61 67 65 2e          package.
24300 44 61 74 61 50 72 6f 76 69 64 65 72 49 64 2e 54  DataProviderId.T
24310 6f 53 74 72 69 6e 67 28 56 73 49 64 46 6f 72 6d  oString(VsIdForm
24320 61 74 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  at));....       
24330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24340 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
24350 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
24360 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
24370 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
24380 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72           Registr
24390 79 48 65 6c 70 65 72 2e 53 65 74 56 61 6c 75 65  yHelper.SetValue
243a0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
243b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
243c0 61 74 61 50 72 6f 76 69 64 65 72 4b 65 79 2c 20  ataProviderKey, 
243d0 6e 75 6c 6c 2c 20 44 65 73 63 72 69 70 74 69 6f  null, Descriptio
243e0 6e 2c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20  n, whatIf,..    
243f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24400 20 20 20 20 20 20 20 20 76 65 72 62 6f 73 65 29          verbose)
24410 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
24420 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67               Reg
24430 69 73 74 72 79 48 65 6c 70 65 72 2e 53 65 74 56  istryHelper.SetV
24440 61 6c 75 65 28 0d 0a 20 20 20 20 20 20 20 20 20  alue(..         
24450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24460 20 20 20 64 61 74 61 50 72 6f 76 69 64 65 72 4b     dataProviderK
24470 65 79 2c 20 22 49 6e 76 61 72 69 61 6e 74 4e 61  ey, "InvariantNa
24480 6d 65 22 2c 20 49 6e 76 61 72 69 61 6e 74 4e 61  me", InvariantNa
24490 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me,..           
244a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
244b0 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65   whatIf, verbose
244c0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
244d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65                Re
244e0 67 69 73 74 72 79 48 65 6c 70 65 72 2e 53 65 74  gistryHelper.Set
244f0 56 61 6c 75 65 28 0d 0a 20 20 20 20 20 20 20 20  Value(..        
24500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24510 20 20 20 20 64 61 74 61 50 72 6f 76 69 64 65 72      dataProvider
24520 4b 65 79 2c 20 22 54 65 63 68 6e 6f 6c 6f 67 79  Key, "Technology
24530 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
24540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24550 70 61 63 6b 61 67 65 2e 41 64 6f 4e 65 74 54 65  package.AdoNetTe
24560 63 68 6e 6f 6c 6f 67 79 49 64 2e 54 6f 53 74 72  chnologyId.ToStr
24570 69 6e 67 28 56 73 49 64 46 6f 72 6d 61 74 29 2c  ing(VsIdFormat),
24580 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
24590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 77 68                wh
245a0 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d  atIf, verbose);.
245b0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
245c0 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73             Regis
245d0 74 72 79 48 65 6c 70 65 72 2e 53 65 74 56 61 6c  tryHelper.SetVal
245e0 75 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue(..           
245f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24600 20 64 61 74 61 50 72 6f 76 69 64 65 72 4b 65 79   dataProviderKey
24610 2c 20 22 43 6f 64 65 42 61 73 65 22 2c 20 66 69  , "CodeBase", fi
24620 6c 65 4e 61 6d 65 2c 20 77 68 61 74 49 66 2c 0d  leName, whatIf,.
24630 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
24640 20 20 20 20 20 20 20 20 20 20 20 20 20 76 65 72               ver
24650 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  bose);....      
24660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24670 20 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72    RegistryHelper
24680 2e 53 65 74 56 61 6c 75 65 28 0d 0a 20 20 20 20  .SetValue(..    
24690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
246a0 20 20 20 20 20 20 20 20 64 61 74 61 50 72 6f 76          dataProv
246b0 69 64 65 72 4b 65 79 2c 20 22 46 61 63 74 6f 72  iderKey, "Factor
246c0 79 53 65 72 76 69 63 65 22 2c 0d 0a 20 20 20 20  yService",..    
246d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
246e0 20 20 20 20 20 20 20 20 70 61 63 6b 61 67 65 2e          package.
246f0 53 65 72 76 69 63 65 49 64 2e 54 6f 53 74 72 69  ServiceId.ToStri
24700 6e 67 28 56 73 49 64 46 6f 72 6d 61 74 29 2c 20  ng(VsIdFormat), 
24710 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20  whatIf,..       
24720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24730 20 20 20 20 20 76 65 72 62 6f 73 65 29 3b 0d 0a       verbose);..
24740 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
24750 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74            Regist
24760 72 79 48 65 6c 70 65 72 2e 43 72 65 61 74 65 53  ryHelper.CreateS
24770 75 62 4b 65 79 28 64 61 74 61 50 72 6f 76 69 64  ubKey(dataProvid
24780 65 72 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20  erKey,..        
24790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
247a0 20 20 20 20 22 53 75 70 70 6f 72 74 65 64 4f 62      "SupportedOb
247b0 6a 65 63 74 73 5c 5c 44 61 74 61 43 6f 6e 6e 65  jects\\DataConne
247c0 63 74 69 6f 6e 55 49 43 6f 6e 74 72 6f 6c 22 2c  ctionUIControl",
247d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
247e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 77 68                wh
247f0 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d  atIf, verbose);.
24800 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
24810 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73             Regis
24820 74 72 79 48 65 6c 70 65 72 2e 43 72 65 61 74 65  tryHelper.Create
24830 53 75 62 4b 65 79 28 64 61 74 61 50 72 6f 76 69  SubKey(dataProvi
24840 64 65 72 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20  derKey,..       
24850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24860 20 20 20 20 20 22 53 75 70 70 6f 72 74 65 64 4f       "SupportedO
24870 62 6a 65 63 74 73 5c 5c 44 61 74 61 43 6f 6e 6e  bjects\\DataConn
24880 65 63 74 69 6f 6e 50 72 6f 70 65 72 74 69 65 73  ectionProperties
24890 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
248a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
248b0 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29  whatIf, verbose)
248c0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
248d0 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67               Reg
248e0 69 73 74 72 79 48 65 6c 70 65 72 2e 43 72 65 61  istryHelper.Crea
248f0 74 65 53 75 62 4b 65 79 28 64 61 74 61 50 72 6f  teSubKey(dataPro
24900 76 69 64 65 72 4b 65 79 2c 0d 0a 20 20 20 20 20  viderKey,..     
24910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24920 20 20 20 20 20 20 20 22 53 75 70 70 6f 72 74 65         "Supporte
24930 64 4f 62 6a 65 63 74 73 5c 5c 44 61 74 61 43 6f  dObjects\\DataCo
24940 6e 6e 65 63 74 69 6f 6e 53 75 70 70 6f 72 74 22  nnectionSupport"
24950 2c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20  , whatIf,..     
24960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24970 20 20 20 20 20 20 20 76 65 72 62 6f 73 65 29 3b         verbose);
24980 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
24990 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69              Regi
249a0 73 74 72 79 48 65 6c 70 65 72 2e 43 72 65 61 74  stryHelper.Creat
249b0 65 53 75 62 4b 65 79 28 64 61 74 61 50 72 6f 76  eSubKey(dataProv
249c0 69 64 65 72 4b 65 79 2c 0d 0a 20 20 20 20 20 20  iderKey,..      
249d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
249e0 20 20 20 20 20 20 22 53 75 70 70 6f 72 74 65 64        "Supported
249f0 4f 62 6a 65 63 74 73 5c 5c 44 61 74 61 4f 62 6a  Objects\\DataObj
24a00 65 63 74 53 75 70 70 6f 72 74 22 2c 20 77 68 61  ectSupport", wha
24a10 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf,..          
24a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24a30 20 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20    verbose);.... 
24a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24a50 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79 48         RegistryH
24a60 65 6c 70 65 72 2e 43 72 65 61 74 65 53 75 62 4b  elper.CreateSubK
24a70 65 79 28 64 61 74 61 50 72 6f 76 69 64 65 72 4b  ey(dataProviderK
24a80 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey,..           
24a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24aa0 20 22 53 75 70 70 6f 72 74 65 64 4f 62 6a 65 63   "SupportedObjec
24ab0 74 73 5c 5c 44 61 74 61 56 69 65 77 53 75 70 70  ts\\DataViewSupp
24ac0 6f 72 74 22 2c 20 77 68 61 74 49 66 2c 0d 0a 20  ort", whatIf,.. 
24ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24ae0 20 20 20 20 20 20 20 20 20 20 20 76 65 72 62 6f             verbo
24af0 73 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  se);..          
24b00 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
24b10 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
24b20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
24b30 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
24b40 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20  urn true;..     
24b50 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
24b60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24b70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24b80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24b90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24ba0 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
24bb0 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
24bc0 63 20 62 6f 6f 6c 20 52 65 6d 6f 76 65 56 73 44  c bool RemoveVsD
24bd0 61 74 61 50 72 6f 76 69 64 65 72 28 0d 0a 20 20  ataProvider(..  
24be0 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74            Regist
24bf0 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a  ryKey rootKey,..
24c00 20 20 20 20 20 20 20 20 20 20 20 20 56 65 72 73              Vers
24c10 69 6f 6e 20 76 73 56 65 72 73 69 6f 6e 2c 0d 0a  ion vsVersion,..
24c20 20 20 20 20 20 20 20 20 20 20 20 20 50 61 63 6b              Pack
24c30 61 67 65 20 70 61 63 6b 61 67 65 2c 0d 0a 20 20  age package,..  
24c40 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77            bool w
24c50 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20  hatIf,..        
24c60 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65      bool verbose
24c70 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ,..            r
24c80 65 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72 0d  ef string error.
24c90 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a  .            )..
24ca0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
24cb0 20 20 20 20 20 20 20 69 66 20 28 76 73 56 65 72         if (vsVer
24cc0 73 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  sion == null).. 
24cd0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
24ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
24cf0 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 56  ror = "invalid V
24d00 53 20 76 65 72 73 69 6f 6e 22 3b 0d 0a 20 20 20  S version";..   
24d10 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
24d20 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  urn false;..    
24d30 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
24d40 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
24d50 6b 65 79 4e 61 6d 65 20 3d 20 47 65 74 56 73 4b  keyName = GetVsK
24d60 65 79 4e 61 6d 65 28 76 73 56 65 72 73 69 6f 6e  eyName(vsVersion
24d70 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
24d80 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67    using (MockReg
24d90 69 73 74 72 79 4b 65 79 20 6b 65 79 20 3d 20 52  istryKey key = R
24da0 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 4f 70  egistryHelper.Op
24db0 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20  enSubKey(..     
24dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
24dd0 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e 61 6d 65 2c  ootKey, keyName,
24de0 20 66 61 6c 73 65 2c 20 77 68 61 74 49 66 2c 20   false, whatIf, 
24df0 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20  verbose))..     
24e00 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
24e10 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6b 65            if (ke
24e20 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  y == null)..    
24e30 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
24e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24e50 20 20 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e     error = Strin
24e60 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
24e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24e80 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20 6f 70     "could not op
24e90 65 6e 20 72 65 67 69 73 74 72 79 20 6b 65 79 3a  en registry key:
24ea0 20 7b 30 7d 5c 5c 7b 31 7d 22 2c 0d 0a 20 20 20   {0}\\{1}",..   
24eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24ec0 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 6b 65       rootKey, ke
24ed0 79 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  yName);....     
24ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
24ef0 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
24f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
24f10 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
24f20 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65     using (MockRe
24f30 67 69 73 74 72 79 4b 65 79 20 73 75 62 4b 65 79  gistryKey subKey
24f40 20 3d 20 52 65 67 69 73 74 72 79 48 65 6c 70 65   = RegistryHelpe
24f50 72 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20  r.OpenSubKey(.. 
24f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24f70 20 20 20 20 20 20 20 6b 65 79 2c 20 22 44 61 74         key, "Dat
24f80 61 50 72 6f 76 69 64 65 72 73 22 2c 20 74 72 75  aProviders", tru
24f90 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f  e, whatIf, verbo
24fa0 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  se))..          
24fb0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
24fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
24fd0 28 73 75 62 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29  (subKey == null)
24fe0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
24ff0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
25000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25010 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e   error = String.
25020 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
25030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25040 20 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20       "could not 
25050 6f 70 65 6e 20 72 65 67 69 73 74 72 79 20 6b 65  open registry ke
25060 79 3a 20 7b 30 7d 5c 5c 44 61 74 61 50 72 6f 76  y: {0}\\DataProv
25070 69 64 65 72 73 22 2c 0d 0a 20 20 20 20 20 20 20  iders",..       
25080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25090 20 20 20 20 20 6b 65 79 29 3b 0d 0a 0d 0a 20 20       key);....  
250a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
250b0 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
250c0 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se;..           
250d0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
250e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
250f0 20 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72    RegistryHelper
25100 2e 44 65 6c 65 74 65 53 75 62 4b 65 79 54 72 65  .DeleteSubKeyTre
25110 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
25120 20 20 20 20 20 20 20 20 20 20 20 20 73 75 62 4b              subK
25130 65 79 2c 20 70 61 63 6b 61 67 65 2e 44 61 74 61  ey, package.Data
25140 50 72 6f 76 69 64 65 72 49 64 2e 54 6f 53 74 72  ProviderId.ToStr
25150 69 6e 67 28 56 73 49 64 46 6f 72 6d 61 74 29 2c  ing(VsIdFormat),
25160 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
25170 20 20 20 20 20 20 20 20 20 20 77 68 61 74 49 66            whatIf
25180 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a 20 20 20  , verbose);..   
25190 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
251a0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
251b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
251c0 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20  urn true;..     
251d0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
251e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
251f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25200 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25210 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25220 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
25230 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
25240 63 20 62 6f 6f 6c 20 50 72 6f 63 65 73 73 56 73  c bool ProcessVs
25250 44 61 74 61 50 72 6f 76 69 64 65 72 28 0d 0a 20  DataProvider(.. 
25260 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73             Regis
25270 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d  tryKey rootKey,.
25280 0a 20 20 20 20 20 20 20 20 20 20 20 20 56 65 72  .            Ver
25290 73 69 6f 6e 20 76 73 56 65 72 73 69 6f 6e 2c 0d  sion vsVersion,.
252a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 50 61 63  .            Pac
252b0 6b 61 67 65 20 70 61 63 6b 61 67 65 2c 0d 0a 20  kage package,.. 
252c0 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63             objec
252d0 74 20 63 6c 69 65 6e 74 44 61 74 61 2c 0d 0a 20  t clientData,.. 
252e0 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
252f0 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20  whatIf,..       
25300 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73       bool verbos
25310 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
25320 72 65 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72  ref string error
25330 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d  ..            ).
25340 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
25350 20 20 20 20 20 20 20 20 41 6e 79 50 61 69 72 3c          AnyPair<
25360 73 74 72 69 6e 67 2c 20 62 6f 6f 6c 3e 20 70 61  string, bool> pa
25370 69 72 20 3d 20 63 6c 69 65 6e 74 44 61 74 61 20  ir = clientData 
25380 61 73 20 41 6e 79 50 61 69 72 3c 73 74 72 69 6e  as AnyPair<strin
25390 67 2c 20 62 6f 6f 6c 3e 3b 0d 0a 0d 0a 20 20 20  g, bool>;....   
253a0 20 20 20 20 20 20 20 20 20 69 66 20 28 70 61 69           if (pai
253b0 72 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  r == null)..    
253c0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
253d0 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
253e0 20 3d 20 22 69 6e 76 61 6c 69 64 20 56 53 20 63   = "invalid VS c
253f0 61 6c 6c 62 61 63 6b 20 64 61 74 61 22 3b 0d 0a  allback data";..
25400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25410 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20  return false;.. 
25420 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
25430 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
25440 70 61 69 72 2e 59 29 0d 0a 20 20 20 20 20 20 20  pair.Y)..       
25450 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
25460 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 41          return A
25470 64 64 56 73 44 61 74 61 50 72 6f 76 69 64 65 72  ddVsDataProvider
25480 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
25490 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20         rootKey, 
254a0 76 73 56 65 72 73 69 6f 6e 2c 20 70 61 63 6b 61  vsVersion, packa
254b0 67 65 2c 20 70 61 69 72 2e 58 2c 0d 0a 20 20 20  ge, pair.X,..   
254c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
254d0 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65   whatIf, verbose
254e0 2c 20 72 65 66 20 65 72 72 6f 72 29 3b 0d 0a 20  , ref error);.. 
254f0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
25500 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a            else..
25510 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
25520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
25530 65 74 75 72 6e 20 52 65 6d 6f 76 65 56 73 44 61  eturn RemoveVsDa
25540 74 61 50 72 6f 76 69 64 65 72 28 0d 0a 20 20 20  taProvider(..   
25550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25560 20 72 6f 6f 74 4b 65 79 2c 20 76 73 56 65 72 73   rootKey, vsVers
25570 69 6f 6e 2c 20 70 61 63 6b 61 67 65 2c 20 77 68  ion, package, wh
25580 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20  atIf,..         
25590 20 20 20 20 20 20 20 20 20 20 20 76 65 72 62 6f             verbo
255a0 73 65 2c 20 72 65 66 20 65 72 72 6f 72 29 3b 0d  se, ref error);.
255b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
255c0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
255d0 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
255e0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
255f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25600 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25610 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25620 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25630 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67  ....        #reg
25640 69 6f 6e 20 56 69 73 75 61 6c 20 53 74 75 64 69  ion Visual Studi
25650 6f 20 50 61 63 6b 61 67 65 20 48 61 6e 64 6c 69  o Package Handli
25660 6e 67 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  ng..        priv
25670 61 74 65 20 73 74 61 74 69 63 20 76 6f 69 64 20  ate static void 
25680 49 6e 69 74 69 61 6c 69 7a 65 56 73 50 61 63 6b  InitializeVsPack
25690 61 67 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  age(..          
256a0 20 20 72 65 66 20 50 61 63 6b 61 67 65 20 70 61    ref Package pa
256b0 63 6b 61 67 65 0d 0a 20 20 20 20 20 20 20 20 20  ckage..         
256c0 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d     )..        {.
256d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
256e0 28 70 61 63 6b 61 67 65 20 3d 3d 20 6e 75 6c 6c  (package == null
256f0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
25700 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
25710 20 20 70 61 63 6b 61 67 65 20 3d 20 6e 65 77 20    package = new 
25720 50 61 63 6b 61 67 65 28 29 3b 0d 0a 0d 0a 20 20  Package();....  
25730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 61                pa
25740 63 6b 61 67 65 2e 41 64 6f 4e 65 74 54 65 63 68  ckage.AdoNetTech
25750 6e 6f 6c 6f 67 79 49 64 20 3d 20 6e 65 77 20 47  nologyId = new G
25760 75 69 64 28 0d 0a 20 20 20 20 20 20 20 20 20 20  uid(..          
25770 20 20 20 20 20 20 20 20 20 20 22 37 37 41 42 39            "77AB9
25780 41 39 44 2d 37 38 42 39 2d 34 42 41 37 2d 39 31  A9D-78B9-4BA7-91
25790 41 43 2d 38 37 33 46 35 33 33 38 46 31 44 32 22  AC-873F5338F1D2"
257a0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
257b0 20 20 20 20 20 20 70 61 63 6b 61 67 65 2e 50 61        package.Pa
257c0 63 6b 61 67 65 49 64 20 3d 20 6e 65 77 20 47 75  ckageId = new Gu
257d0 69 64 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  id(..           
257e0 20 20 20 20 20 20 20 20 20 22 44 43 42 45 36 43           "DCBE6C
257f0 38 44 2d 30 45 35 37 2d 34 30 39 39 2d 41 31 38  8D-0E57-4099-A18
25800 33 2d 39 38 46 46 37 34 43 36 34 44 39 43 22 29  3-98FF74C64D9C")
25810 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
25820 20 20 20 20 20 70 61 63 6b 61 67 65 2e 53 65 72       package.Ser
25830 76 69 63 65 49 64 20 3d 20 6e 65 77 20 47 75 69  viceId = new Gui
25840 64 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d(..            
25850 20 20 20 20 20 20 20 20 22 44 43 42 45 36 43 38          "DCBE6C8
25860 44 2d 30 45 35 37 2d 34 30 39 39 2d 41 31 38 33  D-0E57-4099-A183
25870 2d 39 38 46 46 37 34 43 36 34 44 39 44 22 29 3b  -98FF74C64D9D");
25880 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
25890 20 20 20 20 70 61 63 6b 61 67 65 2e 44 61 74 61      package.Data
258a0 53 6f 75 72 63 65 49 64 20 3d 20 6e 65 77 20 47  SourceId = new G
258b0 75 69 64 28 0d 0a 20 20 20 20 20 20 20 20 20 20  uid(..          
258c0 20 20 20 20 20 20 20 20 20 20 22 30 45 42 41 41            "0EBAA
258d0 42 36 45 2d 43 41 38 30 2d 34 42 34 41 2d 38 44  B6E-CA80-4B4A-8D
258e0 44 46 2d 43 42 45 36 42 46 30 35 38 43 37 31 22  DF-CBE6BF058C71"
258f0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
25900 20 20 20 20 20 20 70 61 63 6b 61 67 65 2e 44 61        package.Da
25910 74 61 50 72 6f 76 69 64 65 72 49 64 20 3d 20 6e  taProviderId = n
25920 65 77 20 47 75 69 64 28 0d 0a 20 20 20 20 20 20  ew Guid(..      
25930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 30                "0
25940 45 42 41 41 42 36 45 2d 43 41 38 30 2d 34 42 34  EBAAB6E-CA80-4B4
25950 41 2d 38 44 44 46 2d 43 42 45 36 42 46 30 35 38  A-8DDF-CBE6BF058
25960 43 37 30 22 29 3b 0d 0a 20 20 20 20 20 20 20 20  C70");..        
25970 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d      }..        }
25980 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
25990 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
259a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
259b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
259c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
259d0 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70  ///....        p
259e0 72 69 76 61 74 65 20 73 74 61 74 69 63 20 62 6f  rivate static bo
259f0 6f 6c 20 41 64 64 56 73 50 61 63 6b 61 67 65 28  ol AddVsPackage(
25a00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 52 65  ..            Re
25a10 67 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65  gistryKey rootKe
25a20 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y,..            
25a30 56 65 72 73 69 6f 6e 20 76 73 56 65 72 73 69 6f  Version vsVersio
25a40 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n,..            
25a50 50 61 63 6b 61 67 65 20 70 61 63 6b 61 67 65 2c  Package package,
25a60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
25a70 72 69 6e 67 20 66 69 6c 65 4e 61 6d 65 2c 0d 0a  ring fileName,..
25a80 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
25a90 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20   whatIf,..      
25aa0 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f        bool verbo
25ab0 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se,..           
25ac0 20 72 65 66 20 73 74 72 69 6e 67 20 65 72 72 6f   ref string erro
25ad0 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29  r..            )
25ae0 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
25af0 20 20 20 20 20 20 20 20 20 69 66 20 28 76 73 56           if (vsV
25b00 65 72 73 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 0d  ersion == null).
25b10 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
25b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25b30 65 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64  error = "invalid
25b40 20 56 53 20 76 65 72 73 69 6f 6e 22 3b 0d 0a 20   VS version";.. 
25b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
25b60 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
25b70 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
25b80 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 70             if (p
25b90 61 63 6b 61 67 65 20 3d 3d 20 6e 75 6c 6c 29 0d  ackage == null).
25ba0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
25bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25bc0 65 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64  error = "invalid
25bd0 20 56 53 20 70 61 63 6b 61 67 65 22 3b 0d 0a 20   VS package";.. 
25be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
25bf0 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
25c00 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
25c10 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
25c20 67 20 6b 65 79 4e 61 6d 65 20 3d 20 47 65 74 56  g keyName = GetV
25c30 73 4b 65 79 4e 61 6d 65 28 76 73 56 65 72 73 69  sKeyName(vsVersi
25c40 6f 6e 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  on);....        
25c50 20 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52      using (MockR
25c60 65 67 69 73 74 72 79 4b 65 79 20 6b 65 79 20 3d  egistryKey key =
25c70 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e   RegistryHelper.
25c80 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20  OpenSubKey(..   
25c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25ca0 20 72 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e 61 6d   rootKey, keyNam
25cb0 65 2c 20 66 61 6c 73 65 2c 20 77 68 61 74 49 66  e, false, whatIf
25cc0 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20  , verbose))..   
25cd0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
25ce0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
25cf0 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  key == null)..  
25d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
25d10 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
25d20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 53 74 72       error = Str
25d30 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
25d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25d50 20 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20       "could not 
25d60 6f 70 65 6e 20 72 65 67 69 73 74 72 79 20 6b 65  open registry ke
25d70 79 3a 20 7b 30 7d 5c 5c 7b 31 7d 22 2c 0d 0a 20  y: {0}\\{1}",.. 
25d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25d90 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20         rootKey, 
25da0 6b 65 79 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20  keyName);....   
25db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25dc0 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
25dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25de0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
25df0 20 20 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b       using (Mock
25e00 52 65 67 69 73 74 72 79 4b 65 79 20 73 75 62 4b  RegistryKey subK
25e10 65 79 20 3d 20 52 65 67 69 73 74 72 79 48 65 6c  ey = RegistryHel
25e20 70 65 72 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d  per.OpenSubKey(.
25e30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
25e40 20 20 20 20 20 20 20 20 20 6b 65 79 2c 20 22 50           key, "P
25e50 61 63 6b 61 67 65 73 22 2c 20 74 72 75 65 2c 20  ackages", true, 
25e60 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29  whatIf, verbose)
25e70 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
25e80 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
25e90 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73 75            if (su
25ea0 62 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  bKey == null).. 
25eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25ec0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
25ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
25ee0 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72  ror = String.For
25ef0 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
25f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25f10 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20 6f 70 65    "could not ope
25f20 6e 20 72 65 67 69 73 74 72 79 20 6b 65 79 3a 20  n registry key: 
25f30 7b 30 7d 5c 5c 50 61 63 6b 61 67 65 73 22 2c 0d  {0}\\Packages",.
25f40 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
25f50 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79               key
25f60 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
25f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
25f80 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
25f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25fa0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
25fb0 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20            using 
25fc0 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79  (MockRegistryKey
25fd0 20 70 61 63 6b 61 67 65 4b 65 79 20 3d 20 52 65   packageKey = Re
25fe0 67 69 73 74 72 79 48 65 6c 70 65 72 2e 43 72 65  gistryHelper.Cre
25ff0 61 74 65 53 75 62 4b 65 79 28 0d 0a 20 20 20 20  ateSubKey(..    
26000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26010 20 20 20 20 20 20 20 20 73 75 62 4b 65 79 2c 20          subKey, 
26020 70 61 63 6b 61 67 65 2e 50 61 63 6b 61 67 65 49  package.PackageI
26030 64 2e 54 6f 53 74 72 69 6e 67 28 56 73 49 64 46  d.ToString(VsIdF
26040 6f 72 6d 61 74 29 2c 20 77 68 61 74 49 66 2c 0d  ormat), whatIf,.
26050 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
26060 20 20 20 20 20 20 20 20 20 20 20 20 20 76 65 72               ver
26070 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20  bose))..        
26080 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
26090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
260a0 20 20 20 20 20 20 20 69 66 20 28 70 61 63 6b 61         if (packa
260b0 67 65 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  geKey == null)..
260c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
260d0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
260e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
260f0 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 53         error = S
26100 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
26110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
26130 63 6f 75 6c 64 20 6e 6f 74 20 63 72 65 61 74 65  could not create
26140 20 72 65 67 69 73 74 72 79 20 6b 65 79 3a 20 7b   registry key: {
26150 30 7d 5c 5c 7b 31 7d 22 2c 0d 0a 20 20 20 20 20  0}\\{1}",..     
26160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26170 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 2c 20             key, 
26180 70 61 63 6b 61 67 65 2e 50 61 63 6b 61 67 65 49  package.PackageI
26190 64 2e 54 6f 53 74 72 69 6e 67 28 56 73 49 64 46  d.ToString(VsIdF
261a0 6f 72 6d 61 74 29 29 3b 0d 0a 0d 0a 20 20 20 20  ormat));....    
261b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
261c0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
261d0 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
261e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
261f0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
26200 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69              Regi
26210 73 74 72 79 48 65 6c 70 65 72 2e 53 65 74 56 61  stryHelper.SetVa
26220 6c 75 65 28 70 61 63 6b 61 67 65 4b 65 79 2c 20  lue(packageKey, 
26230 6e 75 6c 6c 2c 20 53 74 72 69 6e 67 2e 46 6f 72  null, String.For
26240 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
26250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26260 20 20 22 7b 30 7d 20 44 65 73 69 67 6e 65 72 20    "{0} Designer 
26270 50 61 63 6b 61 67 65 22 2c 20 50 72 6f 6a 65 63  Package", Projec
26280 74 4e 61 6d 65 29 2c 20 77 68 61 74 49 66 2c 0d  tName), whatIf,.
26290 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
262a0 20 20 20 20 20 20 20 20 20 20 20 20 20 76 65 72               ver
262b0 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  bose);....      
262c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
262d0 20 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72    RegistryHelper
262e0 2e 53 65 74 56 61 6c 75 65 28 70 61 63 6b 61 67  .SetValue(packag
262f0 65 4b 65 79 2c 20 22 43 6c 61 73 73 22 2c 0d 0a  eKey, "Class",..
26300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26310 20 20 20 20 20 20 20 20 20 20 20 20 22 53 51 4c              "SQL
26320 69 74 65 2e 44 65 73 69 67 6e 65 72 2e 53 51 4c  ite.Designer.SQL
26330 69 74 65 50 61 63 6b 61 67 65 22 2c 20 77 68 61  itePackage", wha
26340 74 49 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a  tIf, verbose);..
26350 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
26360 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74            Regist
26370 72 79 48 65 6c 70 65 72 2e 53 65 74 56 61 6c 75  ryHelper.SetValu
26380 65 28 70 61 63 6b 61 67 65 4b 65 79 2c 20 22 43  e(packageKey, "C
26390 6f 64 65 42 61 73 65 22 2c 0d 0a 20 20 20 20 20  odeBase",..     
263a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
263b0 20 20 20 20 20 20 20 66 69 6c 65 4e 61 6d 65 2c         fileName,
263c0 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65   whatIf, verbose
263d0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
263e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65                Re
263f0 67 69 73 74 72 79 48 65 6c 70 65 72 2e 53 65 74  gistryHelper.Set
26400 56 61 6c 75 65 28 70 61 63 6b 61 67 65 4b 65 79  Value(packageKey
26410 2c 20 22 49 44 22 2c 20 34 30 30 2c 20 77 68 61  , "ID", 400, wha
26420 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf,..          
26430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26440 20 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20    verbose);.... 
26450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26460 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79 48         RegistryH
26470 65 6c 70 65 72 2e 53 65 74 56 61 6c 75 65 28 70  elper.SetValue(p
26480 61 63 6b 61 67 65 4b 65 79 2c 20 22 49 6e 70 72  ackageKey, "Inpr
26490 6f 63 53 65 72 76 65 72 33 32 22 2c 0d 0a 20 20  ocServer32",..  
264a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
264b0 20 20 20 20 20 20 20 20 20 20 50 61 74 68 2e 43            Path.C
264c0 6f 6d 62 69 6e 65 28 45 6e 76 69 72 6f 6e 6d 65  ombine(Environme
264d0 6e 74 2e 53 79 73 74 65 6d 44 69 72 65 63 74 6f  nt.SystemDirecto
264e0 72 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ry,..           
264f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26500 20 20 20 20 20 22 6d 73 63 6f 72 65 65 2e 64 6c       "mscoree.dl
26510 6c 22 29 2c 20 77 68 61 74 49 66 2c 20 76 65 72  l"), whatIf, ver
26520 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  bose);....      
26530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26540 20 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72    RegistryHelper
26550 2e 53 65 74 56 61 6c 75 65 28 70 61 63 6b 61 67  .SetValue(packag
26560 65 4b 65 79 2c 20 22 43 6f 6d 70 61 6e 79 4e 61  eKey, "CompanyNa
26570 6d 65 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  me",..          
26580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26590 20 20 22 68 74 74 70 3a 2f 2f 73 79 73 74 65 6d    "http://system
265a0 2e 64 61 74 61 2e 73 71 6c 69 74 65 2e 6f 72 67  .data.sqlite.org
265b0 2f 22 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62  /", whatIf, verb
265c0 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ose);....       
265d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
265e0 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e   RegistryHelper.
265f0 53 65 74 56 61 6c 75 65 28 70 61 63 6b 61 67 65  SetValue(package
26600 4b 65 79 2c 20 22 4d 69 6e 45 64 69 74 69 6f 6e  Key, "MinEdition
26610 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
26620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26630 22 73 74 61 6e 64 61 72 64 22 2c 20 77 68 61 74  "standard", what
26640 49 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d  If, verbose);...
26650 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
26660 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72           Registr
26670 79 48 65 6c 70 65 72 2e 53 65 74 56 61 6c 75 65  yHelper.SetValue
26680 28 70 61 63 6b 61 67 65 4b 65 79 2c 20 22 50 72  (packageKey, "Pr
26690 6f 64 75 63 74 4e 61 6d 65 22 2c 0d 0a 20 20 20  oductName",..   
266a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
266b0 20 20 20 20 20 20 20 20 20 53 74 72 69 6e 67 2e           String.
266c0 46 6f 72 6d 61 74 28 22 7b 30 7d 20 44 65 73 69  Format("{0} Desi
266d0 67 6e 65 72 20 50 61 63 6b 61 67 65 22 2c 20 50  gner Package", P
266e0 72 6f 6a 65 63 74 4e 61 6d 65 29 2c 0d 0a 20 20  rojectName),..  
266f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26700 20 20 20 20 20 20 20 20 20 20 77 68 61 74 49 66            whatIf
26710 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20  , verbose);.... 
26720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26730 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79 48         RegistryH
26740 65 6c 70 65 72 2e 53 65 74 56 61 6c 75 65 28 70  elper.SetValue(p
26750 61 63 6b 61 67 65 4b 65 79 2c 20 22 50 72 6f 64  ackageKey, "Prod
26760 75 63 74 56 65 72 73 69 6f 6e 22 2c 0d 0a 20 20  uctVersion",..  
26770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26780 20 20 20 20 20 20 20 20 20 20 22 31 2e 30 22 2c            "1.0",
26790 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65   whatIf, verbose
267a0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
267b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 75 73                us
267c0 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72  ing (MockRegistr
267d0 79 4b 65 79 20 74 6f 6f 6c 62 6f 78 4b 65 79 20  yKey toolboxKey 
267e0 3d 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72  = RegistryHelper
267f0 2e 43 72 65 61 74 65 53 75 62 4b 65 79 28 0d 0a  .CreateSubKey(..
26800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26820 70 61 63 6b 61 67 65 4b 65 79 2c 20 22 54 6f 6f  packageKey, "Too
26830 6c 62 6f 78 22 2c 20 77 68 61 74 49 66 2c 20 76  lbox", whatIf, v
26840 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20  erbose))..      
26850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26860 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
26870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26880 20 69 66 20 28 74 6f 6f 6c 62 6f 78 4b 65 79 20   if (toolboxKey 
26890 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
268a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
268b0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
268c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
268d0 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
268e0 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
268f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
26900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26910 20 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20       "could not 
26920 63 72 65 61 74 65 20 72 65 67 69 73 74 72 79 20  create registry 
26930 6b 65 79 3a 20 7b 30 7d 5c 5c 54 6f 6f 6c 62 6f  key: {0}\\Toolbo
26940 78 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  x",..           
26950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26960 20 20 20 20 20 20 20 20 20 70 61 63 6b 61 67 65           package
26970 4b 65 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  Key);....       
26980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26990 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
269a0 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
269b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
269c0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
269d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
269e0 20 20 20 20 20 52 65 67 69 73 74 72 79 48 65 6c       RegistryHel
269f0 70 65 72 2e 53 65 74 56 61 6c 75 65 28 0d 0a 20  per.SetValue(.. 
26a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
26a20 6f 6f 6c 62 6f 78 4b 65 79 2c 20 22 44 65 66 61  oolboxKey, "Defa
26a30 75 6c 74 20 49 74 65 6d 73 22 2c 20 33 2c 20 77  ult Items", 3, w
26a40 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20  hatIf,..        
26a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26a60 20 20 20 20 20 20 20 20 76 65 72 62 6f 73 65 29          verbose)
26a70 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
26a80 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
26a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26aa0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
26ab0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
26ac0 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20            using 
26ad0 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79  (MockRegistryKey
26ae0 20 73 75 62 4b 65 79 20 3d 20 52 65 67 69 73 74   subKey = Regist
26af0 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62  ryHelper.OpenSub
26b00 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  Key(..          
26b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65                ke
26b20 79 2c 20 22 4d 65 6e 75 73 22 2c 20 74 72 75 65  y, "Menus", true
26b30 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73  , whatIf, verbos
26b40 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e))..           
26b50 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
26b60 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
26b70 73 75 62 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d  subKey == null).
26b80 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
26b90 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
26ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26bb0 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46  error = String.F
26bc0 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
26bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26be0 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20 6f      "could not o
26bf0 70 65 6e 20 72 65 67 69 73 74 72 79 20 6b 65 79  pen registry key
26c00 3a 20 7b 30 7d 5c 5c 4d 65 6e 75 73 22 2c 0d 0a  : {0}\\Menus",..
26c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26c20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 29              key)
26c30 3b 0d 0a 0d 0a 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 72 65 74               ret
26c50 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  urn false;..    
26c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26c70 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
26c80 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72           Registr
26c90 79 48 65 6c 70 65 72 2e 53 65 74 56 61 6c 75 65  yHelper.SetValue
26ca0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
26cb0 20 20 20 20 20 20 20 20 20 20 20 73 75 62 4b 65             subKe
26cc0 79 2c 20 70 61 63 6b 61 67 65 2e 50 61 63 6b 61  y, package.Packa
26cd0 67 65 49 64 2e 54 6f 53 74 72 69 6e 67 28 56 73  geId.ToString(Vs
26ce0 49 64 46 6f 72 6d 61 74 29 2c 0d 0a 20 20 20 20  IdFormat),..    
26cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26d00 20 20 20 20 22 2c 20 31 30 30 30 2c 20 33 22 2c      ", 1000, 3",
26d10 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65   whatIf, verbose
26d20 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
26d30 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
26d40 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28           using (
26d50 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20  MockRegistryKey 
26d60 73 75 62 4b 65 79 20 3d 20 52 65 67 69 73 74 72  subKey = Registr
26d70 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62 4b  yHelper.OpenSubK
26d80 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey(..           
26d90 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79               key
26da0 2c 20 22 53 65 72 76 69 63 65 73 22 2c 20 74 72  , "Services", tr
26db0 75 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62  ue, whatIf, verb
26dc0 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ose))..         
26dd0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
26de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
26df0 20 28 73 75 62 4b 65 79 20 3d 3d 20 6e 75 6c 6c   (subKey == null
26e00 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
26e10 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
26e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26e30 20 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67    error = String
26e40 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
26e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26e60 20 20 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74        "could not
26e70 20 6f 70 65 6e 20 72 65 67 69 73 74 72 79 20 6b   open registry k
26e80 65 79 3a 20 7b 30 7d 5c 5c 53 65 72 76 69 63 65  ey: {0}\\Service
26e90 73 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s",..           
26ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26eb0 20 6b 65 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20   key);....      
26ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26ed0 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
26ee0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
26ef0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
26f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 75 73                us
26f10 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72  ing (MockRegistr
26f20 79 4b 65 79 20 73 65 72 76 69 63 65 4b 65 79 20  yKey serviceKey 
26f30 3d 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72  = RegistryHelper
26f40 2e 43 72 65 61 74 65 53 75 62 4b 65 79 28 0d 0a  .CreateSubKey(..
26f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26f60 20 20 20 20 20 20 20 20 20 20 20 20 73 75 62 4b              subK
26f70 65 79 2c 20 70 61 63 6b 61 67 65 2e 53 65 72 76  ey, package.Serv
26f80 69 63 65 49 64 2e 54 6f 53 74 72 69 6e 67 28 56  iceId.ToString(V
26f90 73 49 64 46 6f 72 6d 61 74 29 2c 20 77 68 61 74  sIdFormat), what
26fa0 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  If,..           
26fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26fc0 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20   verbose))..    
26fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26fe0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
26ff0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73             if (s
27000 65 72 76 69 63 65 4b 65 79 20 3d 3d 20 6e 75 6c  erviceKey == nul
27010 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
27020 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
27030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27040 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
27050 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74   = String.Format
27060 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
27070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27080 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20 63 72     "could not cr
27090 65 61 74 65 20 72 65 67 69 73 74 72 79 20 6b 65  eate registry ke
270a0 79 3a 20 7b 30 7d 5c 5c 7b 31 7d 22 2c 0d 0a 20  y: {0}\\{1}",.. 
270b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
270c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b                 k
270d0 65 79 2c 20 70 61 63 6b 61 67 65 2e 53 65 72 76  ey, package.Serv
270e0 69 63 65 49 64 2e 54 6f 53 74 72 69 6e 67 28 56  iceId.ToString(V
270f0 73 49 64 46 6f 72 6d 61 74 29 29 3b 0d 0a 0d 0a  sIdFormat));....
27100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27110 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
27120 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
27130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27140 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
27150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27160 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 53  RegistryHelper.S
27170 65 74 56 61 6c 75 65 28 73 65 72 76 69 63 65 4b  etValue(serviceK
27180 65 79 2c 20 6e 75 6c 6c 2c 0d 0a 20 20 20 20 20  ey, null,..     
27190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
271a0 20 20 20 20 20 20 20 70 61 63 6b 61 67 65 2e 50         package.P
271b0 61 63 6b 61 67 65 49 64 2e 54 6f 53 74 72 69 6e  ackageId.ToStrin
271c0 67 28 56 73 49 64 46 6f 72 6d 61 74 29 2c 20 77  g(VsIdFormat), w
271d0 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20  hatIf,..        
271e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
271f0 20 20 20 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d      verbose);...
27200 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
27210 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72           Registr
27220 79 48 65 6c 70 65 72 2e 53 65 74 56 61 6c 75 65  yHelper.SetValue
27230 28 73 65 72 76 69 63 65 4b 65 79 2c 20 22 4e 61  (serviceKey, "Na
27240 6d 65 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  me",..          
27250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27260 20 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28    String.Format(
27270 22 7b 30 7d 20 44 65 73 69 67 6e 65 72 20 53 65  "{0} Designer Se
27280 72 76 69 63 65 22 2c 20 50 72 6f 6a 65 63 74 4e  rvice", ProjectN
27290 61 6d 65 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  ame),..         
272a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
272b0 20 20 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f     whatIf, verbo
272c0 73 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  se);..          
272d0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
272e0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
272f0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
27300 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
27310 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20  urn true;..     
27320 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
27330 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27340 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27350 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27360 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27370 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
27380 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
27390 63 20 62 6f 6f 6c 20 52 65 6d 6f 76 65 56 73 50  c bool RemoveVsP
273a0 61 63 6b 61 67 65 28 0d 0a 20 20 20 20 20 20 20  ackage(..       
273b0 20 20 20 20 20 52 65 67 69 73 74 72 79 4b 65 79       RegistryKey
273c0 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 20 20   rootKey,..     
273d0 20 20 20 20 20 20 20 56 65 72 73 69 6f 6e 20 76         Version v
273e0 73 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20  sVersion,..     
273f0 20 20 20 20 20 20 20 50 61 63 6b 61 67 65 20 70         Package p
27400 61 63 6b 61 67 65 2c 0d 0a 20 20 20 20 20 20 20  ackage,..       
27410 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66       bool whatIf
27420 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
27430 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20  ool verbose,..  
27440 20 20 20 20 20 20 20 20 20 20 72 65 66 20 73 74            ref st
27450 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20 20  ring error..    
27460 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
27470 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
27480 20 20 69 66 20 28 76 73 56 65 72 73 69 6f 6e 20    if (vsVersion 
27490 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
274a0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
274b0 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
274c0 20 22 69 6e 76 61 6c 69 64 20 56 53 20 76 65 72   "invalid VS ver
274d0 73 69 6f 6e 22 3b 0d 0a 20 20 20 20 20 20 20 20  sion";..        
274e0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
274f0 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
27500 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
27510 20 20 20 20 69 66 20 28 70 61 63 6b 61 67 65 20      if (package 
27520 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
27530 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
27540 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
27550 20 22 69 6e 76 61 6c 69 64 20 56 53 20 70 61 63   "invalid VS pac
27560 6b 61 67 65 22 3b 0d 0a 20 20 20 20 20 20 20 20  kage";..        
27570 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
27580 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
27590 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
275a0 20 20 20 20 73 74 72 69 6e 67 20 6b 65 79 4e 61      string keyNa
275b0 6d 65 20 3d 20 47 65 74 56 73 4b 65 79 4e 61 6d  me = GetVsKeyNam
275c0 65 28 76 73 56 65 72 73 69 6f 6e 29 3b 0d 0a 0d  e(vsVersion);...
275d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69  .            usi
275e0 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79  ng (MockRegistry
275f0 4b 65 79 20 6b 65 79 20 3d 20 52 65 67 69 73 74  Key key = Regist
27600 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62  ryHelper.OpenSub
27610 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  Key(..          
27620 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65            rootKe
27630 79 2c 20 6b 65 79 4e 61 6d 65 2c 20 66 61 6c 73  y, keyName, fals
27640 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f  e, whatIf, verbo
27650 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  se))..          
27660 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
27670 20 20 20 20 20 69 66 20 28 6b 65 79 20 3d 3d 20       if (key == 
27680 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
27690 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
276a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
276b0 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72  ror = String.For
276c0 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
276d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 63                "c
276e0 6f 75 6c 64 20 6e 6f 74 20 6f 70 65 6e 20 72 65  ould not open re
276f0 67 69 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c  gistry key: {0}\
27700 5c 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20  \{1}",..        
27710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27720 72 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e 61 6d 65  rootKey, keyName
27730 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
27740 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
27750 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
27760 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
27770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 75 73                us
27780 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72  ing (MockRegistr
27790 79 4b 65 79 20 73 75 62 4b 65 79 20 3d 20 52 65  yKey subKey = Re
277a0 67 69 73 74 72 79 48 65 6c 70 65 72 2e 4f 70 65  gistryHelper.Ope
277b0 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20  nSubKey(..      
277c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
277d0 20 20 6b 65 79 2c 20 22 50 61 63 6b 61 67 65 73    key, "Packages
277e0 22 2c 20 74 72 75 65 2c 20 77 68 61 74 49 66 2c  ", true, whatIf,
277f0 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20   verbose))..    
27800 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
27810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27820 20 20 20 69 66 20 28 73 75 62 4b 65 79 20 3d 3d     if (subKey ==
27830 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
27840 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
27850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27860 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 53         error = S
27870 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
27880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27890 20 20 20 20 20 20 20 20 20 20 20 22 63 6f 75 6c             "coul
278a0 64 20 6e 6f 74 20 6f 70 65 6e 20 72 65 67 69 73  d not open regis
278b0 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 50 61  try key: {0}\\Pa
278c0 63 6b 61 67 65 73 22 2c 0d 0a 20 20 20 20 20 20  ckages",..      
278d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
278e0 20 20 20 20 20 20 6b 65 79 29 3b 0d 0a 0d 0a 20        key);.... 
278f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27900 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
27910 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lse;..          
27920 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
27930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27940 20 20 20 52 65 67 69 73 74 72 79 48 65 6c 70 65     RegistryHelpe
27950 72 2e 44 65 6c 65 74 65 53 75 62 4b 65 79 54 72  r.DeleteSubKeyTr
27960 65 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ee(..           
27970 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79               key
27980 2c 20 70 61 63 6b 61 67 65 2e 50 61 63 6b 61 67  , package.Packag
27990 65 49 64 2e 54 6f 53 74 72 69 6e 67 28 56 73 49  eId.ToString(VsI
279a0 64 46 6f 72 6d 61 74 29 2c 20 77 68 61 74 49 66  dFormat), whatIf
279b0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
279c0 20 20 20 20 20 20 20 20 20 20 20 76 65 72 62 6f             verbo
279d0 73 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  se);..          
279e0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
279f0 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67             using
27a00 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65   (MockRegistryKe
27a10 79 20 73 75 62 4b 65 79 20 3d 20 52 65 67 69 73  y subKey = Regis
27a20 74 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75  tryHelper.OpenSu
27a30 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20  bKey(..         
27a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b                 k
27a50 65 79 2c 20 22 4d 65 6e 75 73 22 2c 20 74 72 75  ey, "Menus", tru
27a60 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f  e, whatIf, verbo
27a70 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  se))..          
27a80 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
27a90 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
27aa0 28 73 75 62 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29  (subKey == null)
27ab0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
27ac0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
27ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27ae0 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e   error = String.
27af0 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
27b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27b10 20 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20       "could not 
27b20 6f 70 65 6e 20 72 65 67 69 73 74 72 79 20 6b 65  open registry ke
27b30 79 3a 20 7b 30 7d 5c 5c 4d 65 6e 75 73 22 2c 0d  y: {0}\\Menus",.
27b40 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
27b50 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79               key
27b60 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
27b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
27b80 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
27b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27ba0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
27bb0 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74            Regist
27bc0 72 79 48 65 6c 70 65 72 2e 44 65 6c 65 74 65 56  ryHelper.DeleteV
27bd0 61 6c 75 65 28 0d 0a 20 20 20 20 20 20 20 20 20  alue(..         
27be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
27bf0 75 62 4b 65 79 2c 20 70 61 63 6b 61 67 65 2e 50  ubKey, package.P
27c00 61 63 6b 61 67 65 49 64 2e 54 6f 53 74 72 69 6e  ackageId.ToStrin
27c10 67 28 56 73 49 64 46 6f 72 6d 61 74 29 2c 20 77  g(VsIdFormat), w
27c20 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20  hatIf,..        
27c30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27c40 76 65 72 62 6f 73 65 29 3b 0d 0a 20 20 20 20 20  verbose);..     
27c50 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
27c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27c70 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73  using (MockRegis
27c80 74 72 79 4b 65 79 20 73 75 62 4b 65 79 20 3d 20  tryKey subKey = 
27c90 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 4f  RegistryHelper.O
27ca0 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20  penSubKey(..    
27cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27cc0 20 20 20 20 6b 65 79 2c 20 22 53 65 72 76 69 63      key, "Servic
27cd0 65 73 22 2c 20 74 72 75 65 2c 20 77 68 61 74 49  es", true, whatI
27ce0 66 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20  f, verbose))..  
27cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
27d00 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
27d10 20 20 20 20 20 69 66 20 28 73 75 62 4b 65 79 20       if (subKey 
27d20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
27d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
27d40 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
27d50 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
27d60 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
27d70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
27d80 20 20 20 20 20 20 20 20 20 20 20 20 20 22 63 6f               "co
27d90 75 6c 64 20 6e 6f 74 20 6f 70 65 6e 20 72 65 67  uld not open reg
27da0 69 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c  istry key: {0}\\
27db0 53 65 72 76 69 63 65 73 22 2c 0d 0a 20 20 20 20  Services",..    
27dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27dd0 20 20 20 20 20 20 20 20 6b 65 79 29 3b 0d 0a 0d          key);...
27de0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
27df0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
27e00 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
27e10 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
27e20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
27e30 20 20 20 20 20 52 65 67 69 73 74 72 79 48 65 6c       RegistryHel
27e40 70 65 72 2e 44 65 6c 65 74 65 53 75 62 4b 65 79  per.DeleteSubKey
27e50 54 72 65 65 28 0d 0a 20 20 20 20 20 20 20 20 20  Tree(..         
27e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
27e70 75 62 4b 65 79 2c 20 70 61 63 6b 61 67 65 2e 53  ubKey, package.S
27e80 65 72 76 69 63 65 49 64 2e 54 6f 53 74 72 69 6e  erviceId.ToStrin
27e90 67 28 56 73 49 64 46 6f 72 6d 61 74 29 2c 20 77  g(VsIdFormat), w
27ea0 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20  hatIf,..        
27eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27ec0 76 65 72 62 6f 73 65 29 3b 0d 0a 20 20 20 20 20  verbose);..     
27ed0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
27ee0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
27ef0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
27f00 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20  n true;..       
27f10 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f   }....        //
27f20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27f30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27f40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27f50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27f60 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
27f70 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
27f80 62 6f 6f 6c 20 50 72 6f 63 65 73 73 56 73 50 61  bool ProcessVsPa
27f90 63 6b 61 67 65 28 0d 0a 20 20 20 20 20 20 20 20  ckage(..        
27fa0 20 20 20 20 52 65 67 69 73 74 72 79 4b 65 79 20      RegistryKey 
27fb0 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20  rootKey,..      
27fc0 20 20 20 20 20 20 56 65 72 73 69 6f 6e 20 76 73        Version vs
27fd0 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20  Version,..      
27fe0 20 20 20 20 20 20 50 61 63 6b 61 67 65 20 70 61        Package pa
27ff0 63 6b 61 67 65 2c 0d 0a 20 20 20 20 20 20 20 20  ckage,..        
28000 20 20 20 20 6f 62 6a 65 63 74 20 63 6c 69 65 6e      object clien
28010 74 44 61 74 61 2c 0d 0a 20 20 20 20 20 20 20 20  tData,..        
28020 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c      bool whatIf,
28030 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
28040 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20  ol verbose,..   
28050 20 20 20 20 20 20 20 20 20 72 65 66 20 73 74 72           ref str
28060 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20 20 20  ing error..     
28070 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
28080 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
28090 20 41 6e 79 50 61 69 72 3c 73 74 72 69 6e 67 2c   AnyPair<string,
280a0 20 62 6f 6f 6c 3e 20 70 61 69 72 20 3d 20 63 6c   bool> pair = cl
280b0 69 65 6e 74 44 61 74 61 20 61 73 20 41 6e 79 50  ientData as AnyP
280c0 61 69 72 3c 73 74 72 69 6e 67 2c 20 62 6f 6f 6c  air<string, bool
280d0 3e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  >;....          
280e0 20 20 69 66 20 28 70 61 69 72 20 3d 3d 20 6e 75    if (pair == nu
280f0 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
28100 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
28110 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69 6e 76      error = "inv
28120 61 6c 69 64 20 56 53 20 63 61 6c 6c 62 61 63 6b  alid VS callback
28130 20 64 61 74 61 22 3b 0d 0a 20 20 20 20 20 20 20   data";..       
28140 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
28150 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
28160 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
28170 20 20 20 20 20 69 66 20 28 70 61 69 72 2e 59 29       if (pair.Y)
28180 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
28190 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
281a0 20 72 65 74 75 72 6e 20 41 64 64 56 73 50 61 63   return AddVsPac
281b0 6b 61 67 65 28 0d 0a 20 20 20 20 20 20 20 20 20  kage(..         
281c0 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b             rootK
281d0 65 79 2c 20 76 73 56 65 72 73 69 6f 6e 2c 20 70  ey, vsVersion, p
281e0 61 63 6b 61 67 65 2c 20 70 61 69 72 2e 58 2c 20  ackage, pair.X, 
281f0 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20  whatIf,..       
28200 20 20 20 20 20 20 20 20 20 20 20 20 20 76 65 72               ver
28210 62 6f 73 65 2c 20 72 65 66 20 65 72 72 6f 72 29  bose, ref error)
28220 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
28230 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 65 6c  ..            el
28240 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  se..            
28250 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
28260 20 20 20 72 65 74 75 72 6e 20 52 65 6d 6f 76 65     return Remove
28270 56 73 50 61 63 6b 61 67 65 28 0d 0a 20 20 20 20  VsPackage(..    
28280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28290 72 6f 6f 74 4b 65 79 2c 20 76 73 56 65 72 73 69  rootKey, vsVersi
282a0 6f 6e 2c 20 70 61 63 6b 61 67 65 2c 20 77 68 61  on, package, wha
282b0 74 49 66 2c 20 76 65 72 62 6f 73 65 2c 0d 0a 20  tIf, verbose,.. 
282c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
282d0 20 20 20 72 65 66 20 65 72 72 6f 72 29 3b 0d 0a     ref error);..
282e0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
282f0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
28300 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 20 20    #endregion..  
28310 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
28320 0d 0a 0d 0a 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28360 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28370 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23  ///....        #
28380 72 65 67 69 6f 6e 20 41 70 70 6c 69 63 61 74 69  region Applicati
28390 6f 6e 20 45 6e 74 72 79 20 50 6f 69 6e 74 0d 0a  on Entry Point..
283a0 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
283b0 73 74 61 74 69 63 20 69 6e 74 20 4d 61 69 6e 28  static int Main(
283c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
283d0 72 69 6e 67 5b 5d 20 61 72 67 73 0d 0a 20 20 20  ring[] args..   
283e0 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
283f0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
28400 20 20 20 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e     Configuration
28410 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d   configuration =
28420 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20   null;..        
28430 20 20 20 20 73 74 72 69 6e 67 20 65 72 72 6f 72      string error
28440 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20   = null;....    
28450 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
28460 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28470 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28480 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28490 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
284a0 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69             #regi
284b0 6f 6e 20 43 6f 6d 6d 61 6e 64 20 4c 69 6e 65 20  on Command Line 
284c0 50 72 6f 63 65 73 73 69 6e 67 0d 0a 20 20 20 20  Processing..    
284d0 20 20 20 20 20 20 20 20 69 66 20 28 21 43 6f 6e          if (!Con
284e0 66 69 67 75 72 61 74 69 6f 6e 2e 46 72 6f 6d 41  figuration.FromA
284f0 72 67 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20  rgs(..          
28500 20 20 20 20 20 20 20 20 20 20 61 72 67 73 2c 20            args, 
28510 74 72 75 65 2c 20 72 65 66 20 63 6f 6e 66 69 67  true, ref config
28520 75 72 61 74 69 6f 6e 2c 20 72 65 66 20 65 72 72  uration, ref err
28530 6f 72 29 20 7c 7c 0d 0a 20 20 20 20 20 20 20 20  or) ||..        
28540 20 20 20 20 20 20 20 20 21 43 6f 6e 66 69 67 75          !Configu
28550 72 61 74 69 6f 6e 2e 50 72 6f 63 65 73 73 28 0d  ration.Process(.
28560 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
28570 20 20 20 20 20 61 72 67 73 2c 20 63 6f 6e 66 69       args, confi
28580 67 75 72 61 74 69 6f 6e 2c 20 74 72 75 65 2c 20  guration, true, 
28590 72 65 66 20 65 72 72 6f 72 29 20 7c 7c 0d 0a 20  ref error) ||.. 
285a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 21                 !
285b0 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 43 68  Configuration.Ch
285c0 65 63 6b 52 75 6e 74 69 6d 65 56 65 72 73 69 6f  eckRuntimeVersio
285d0 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n(..            
285e0 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72          configur
285f0 61 74 69 6f 6e 2c 20 74 72 75 65 2c 20 72 65 66  ation, true, ref
28600 20 65 72 72 6f 72 29 29 0d 0a 20 20 20 20 20 20   error))..      
28610 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
28620 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70           TraceOp
28630 73 2e 53 68 6f 77 4d 65 73 73 61 67 65 28 0d 0a  s.ShowMessage(..
28640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28650 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69 74      TracePriorit
28660 79 2e 48 69 67 68 65 73 74 2c 20 74 72 61 63 65  y.Highest, trace
28670 43 61 6c 6c 62 61 63 6b 2c 20 74 68 69 73 41 73  Callback, thisAs
28680 73 65 6d 62 6c 79 2c 0d 0a 20 20 20 20 20 20 20  sembly,..       
28690 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
286a0 6f 72 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72  or, traceCategor
286b0 79 2c 20 4d 65 73 73 61 67 65 42 6f 78 42 75 74  y, MessageBoxBut
286c0 74 6f 6e 73 2e 4f 4b 2c 0d 0a 20 20 20 20 20 20  tons.OK,..      
286d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4d 65                Me
286e0 73 73 61 67 65 42 6f 78 49 63 6f 6e 2e 45 72 72  ssageBoxIcon.Err
286f0 6f 72 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  or);....        
28700 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 31          return 1
28710 3b 20 2f 2a 20 46 41 49 4c 55 52 45 20 2a 2f 0d  ; /* FAILURE */.
28720 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
28730 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64              #end
28740 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
28750 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
28760 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28770 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28780 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28790 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
287a0 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e           #region
287b0 20 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b 20   .NET Framework 
287c0 2f 20 56 69 73 75 61 6c 20 53 74 75 64 69 6f 20  / Visual Studio 
287d0 44 61 74 61 0d 0a 20 20 20 20 20 20 20 20 20 20  Data..          
287e0 20 20 50 61 63 6b 61 67 65 20 70 61 63 6b 61 67    Package packag
287f0 65 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20  e = null;..     
28800 20 20 20 20 20 20 20 46 72 61 6d 65 77 6f 72 6b         Framework
28810 4c 69 73 74 20 66 72 61 6d 65 77 6f 72 6b 4c 69  List frameworkLi
28820 73 74 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20  st = null;..    
28830 20 20 20 20 20 20 20 20 56 73 4c 69 73 74 20 76          VsList v
28840 73 4c 69 73 74 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d  sList = null;...
28850 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
28860 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28870 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28880 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28890 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
288a0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
288b0 49 6e 69 74 69 61 6c 69 7a 65 56 73 50 61 63 6b  InitializeVsPack
288c0 61 67 65 28 72 65 66 20 70 61 63 6b 61 67 65 29  age(ref package)
288d0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49  ;..            I
288e0 6e 69 74 69 61 6c 69 7a 65 46 72 61 6d 65 77 6f  nitializeFramewo
288f0 72 6b 4c 69 73 74 28 63 6f 6e 66 69 67 75 72 61  rkList(configura
28900 74 69 6f 6e 2c 20 72 65 66 20 66 72 61 6d 65 77  tion, ref framew
28910 6f 72 6b 4c 69 73 74 29 3b 0d 0a 20 20 20 20 20  orkList);..     
28920 20 20 20 20 20 20 20 49 6e 69 74 69 61 6c 69 7a         Initializ
28930 65 56 73 4c 69 73 74 28 63 6f 6e 66 69 67 75 72  eVsList(configur
28940 61 74 69 6f 6e 2c 20 72 65 66 20 76 73 4c 69 73  ation, ref vsLis
28950 74 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  t);..           
28960 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
28970 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
28980 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28990 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
289a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
289b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
289c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 41 73  ..            As
289d0 73 65 6d 62 6c 79 4e 61 6d 65 20 61 73 73 65 6d  semblyName assem
289e0 62 6c 79 4e 61 6d 65 20 3d 20 41 73 73 65 6d 62  blyName = Assemb
289f0 6c 79 4e 61 6d 65 2e 47 65 74 41 73 73 65 6d 62  lyName.GetAssemb
28a00 6c 79 4e 61 6d 65 28 0d 0a 20 20 20 20 20 20 20  lyName(..       
28a10 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75           configu
28a20 72 61 74 69 6f 6e 2e 43 6f 72 65 46 69 6c 65 4e  ration.CoreFileN
28a30 61 6d 65 29 3b 20 2f 2a 20 74 68 72 6f 77 20 2a  ame); /* throw *
28a40 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
28a50 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
28a60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28a70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28a80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28a90 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
28aa0 20 20 20 20 41 6e 79 50 61 69 72 3c 73 74 72 69      AnyPair<stri
28ab0 6e 67 2c 20 62 6f 6f 6c 3e 20 64 69 72 65 63 74  ng, bool> direct
28ac0 6f 72 79 50 61 69 72 20 3d 20 6e 65 77 20 41 6e  oryPair = new An
28ad0 79 50 61 69 72 3c 73 74 72 69 6e 67 2c 20 62 6f  yPair<string, bo
28ae0 6f 6c 3e 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ol>(..          
28af0 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74        configurat
28b00 69 6f 6e 2e 44 69 72 65 63 74 6f 72 79 2c 20 63  ion.Directory, c
28b10 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 49 6e 73  onfiguration.Ins
28b20 74 61 6c 6c 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  tall);....      
28b30 20 20 20 20 20 20 41 6e 79 50 61 69 72 3c 73 74        AnyPair<st
28b40 72 69 6e 67 2c 20 62 6f 6f 6c 3e 20 66 69 6c 65  ring, bool> file
28b50 4e 61 6d 65 50 61 69 72 20 3d 20 6e 65 77 20 41  NamePair = new A
28b60 6e 79 50 61 69 72 3c 73 74 72 69 6e 67 2c 20 62  nyPair<string, b
28b70 6f 6f 6c 3e 28 0d 0a 20 20 20 20 20 20 20 20 20  ool>(..         
28b80 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61         configura
28b90 74 69 6f 6e 2e 44 65 73 69 67 6e 65 72 46 69 6c  tion.DesignerFil
28ba0 65 4e 61 6d 65 2c 20 63 6f 6e 66 69 67 75 72 61  eName, configura
28bb0 74 69 6f 6e 2e 49 6e 73 74 61 6c 6c 29 3b 0d 0a  tion.Install);..
28bc0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
28bd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28be0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28bf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28c00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28c10 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
28c20 20 23 72 65 67 69 6f 6e 20 2e 4e 45 54 20 47 41   #region .NET GA
28c30 43 20 49 6e 73 74 61 6c 6c 2f 52 65 6d 6f 76 65  C Install/Remove
28c40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
28c50 20 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e   (configuration.
28c60 48 61 73 46 6c 61 67 73 28 49 6e 73 74 61 6c 6c  HasFlags(Install
28c70 46 6c 61 67 73 2e 47 41 43 2c 20 74 72 75 65 29  Flags.GAC, true)
28c80 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
28c90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
28ca0 20 20 50 75 62 6c 69 73 68 20 70 75 62 6c 69 73    Publish publis
28cb0 68 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20  h = null;....   
28cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
28cd0 28 21 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e  (!configuration.
28ce0 57 68 61 74 49 66 29 0d 0a 20 20 20 20 20 20 20  WhatIf)..       
28cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62               pub
28d00 6c 69 73 68 20 3d 20 6e 65 77 20 50 75 62 6c 69  lish = new Publi
28d10 73 68 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  sh();....       
28d20 20 20 20 20 20 20 20 20 20 69 66 20 28 63 6f 6e           if (con
28d30 66 69 67 75 72 61 74 69 6f 6e 2e 49 6e 73 74 61  figuration.Insta
28d40 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
28d50 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
28d60 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
28d70 21 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 57  !configuration.W
28d80 68 61 74 49 66 29 0d 0a 20 20 20 20 20 20 20 20  hatIf)..        
28d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28da0 70 75 62 6c 69 73 68 2e 47 61 63 49 6e 73 74 61  publish.GacInsta
28db0 6c 6c 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  ll(configuration
28dc0 2e 43 6f 72 65 46 69 6c 65 4e 61 6d 65 29 3b 20  .CoreFileName); 
28dd0 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 0d 0a 20  /* throw */.... 
28de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28df0 20 20 20 54 72 61 63 65 4f 70 73 2e 54 72 61 63     TraceOps.Trac
28e00 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
28e10 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
28e20 65 50 72 69 6f 72 69 74 79 2e 48 69 67 68 65 73  ePriority.Highes
28e30 74 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b  t, traceCallback
28e40 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  , String.Format(
28e50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
28e60 20 20 20 20 20 20 20 20 20 20 22 47 61 63 49 6e            "GacIn
28e70 73 74 61 6c 6c 3a 20 61 73 73 65 6d 62 6c 79 50  stall: assemblyP
28e80 61 74 68 20 3d 20 7b 30 7d 22 2c 0d 0a 20 20 20  ath = {0}",..   
28e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28ea0 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28       ForDisplay(
28eb0 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 43 6f  configuration.Co
28ec0 72 65 46 69 6c 65 4e 61 6d 65 29 29 2c 20 74 72  reFileName)), tr
28ed0 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
28ee0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
28ef0 20 20 20 20 20 69 66 20 28 21 63 6f 6e 66 69 67       if (!config
28f00 75 72 61 74 69 6f 6e 2e 57 68 61 74 49 66 29 0d  uration.WhatIf).
28f10 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
28f20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 73 68           publish
28f30 2e 47 61 63 49 6e 73 74 61 6c 6c 28 63 6f 6e 66  .GacInstall(conf
28f40 69 67 75 72 61 74 69 6f 6e 2e 4c 69 6e 71 46 69  iguration.LinqFi
28f50 6c 65 4e 61 6d 65 29 3b 20 2f 2a 20 74 68 72 6f  leName); /* thro
28f60 77 20 2a 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  w */....        
28f70 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
28f80 65 4f 70 73 2e 54 72 61 63 65 28 0d 0a 20 20 20  eOps.Trace(..   
28f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28fa0 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69       TracePriori
28fb0 74 79 2e 48 69 67 68 65 73 74 2c 20 74 72 61 63  ty.Highest, trac
28fc0 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e  eCallback, Strin
28fd0 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
28fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28ff0 20 20 20 22 47 61 63 49 6e 73 74 61 6c 6c 3a 20     "GacInstall: 
29000 61 73 73 65 6d 62 6c 79 50 61 74 68 20 3d 20 7b  assemblyPath = {
29010 30 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  0}",..          
29020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f                Fo
29030 72 44 69 73 70 6c 61 79 28 63 6f 6e 66 69 67 75  rDisplay(configu
29040 72 61 74 69 6f 6e 2e 4c 69 6e 71 46 69 6c 65 4e  ration.LinqFileN
29050 61 6d 65 29 29 2c 20 74 72 61 63 65 43 61 74 65  ame)), traceCate
29060 67 6f 72 79 29 3b 0d 0a 20 20 20 20 20 20 20 20  gory);..        
29070 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
29080 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d             else.
29090 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
290a0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
290b0 20 20 20 20 20 20 20 20 69 66 20 28 21 63 6f 6e          if (!con
290c0 66 69 67 75 72 61 74 69 6f 6e 2e 57 68 61 74 49  figuration.WhatI
290d0 66 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f)..            
290e0 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
290f0 69 73 68 2e 47 61 63 52 65 6d 6f 76 65 28 63 6f  ish.GacRemove(co
29100 6e 66 69 67 75 72 61 74 69 6f 6e 2e 4c 69 6e 71  nfiguration.Linq
29110 46 69 6c 65 4e 61 6d 65 29 3b 20 2f 2a 20 74 68  FileName); /* th
29120 72 6f 77 20 2a 2f 0d 0a 0d 0a 20 20 20 20 20 20  row */....      
29130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
29140 61 63 65 4f 70 73 2e 54 72 61 63 65 28 0d 0a 20  aceOps.Trace(.. 
29150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29160 20 20 20 20 20 20 20 54 72 61 63 65 50 72 69 6f         TracePrio
29170 72 69 74 79 2e 48 69 67 68 65 73 74 2c 20 74 72  rity.Highest, tr
29180 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72  aceCallback, Str
29190 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
291a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
291b0 20 20 20 20 20 22 47 61 63 52 65 6d 6f 76 65 3a       "GacRemove:
291c0 20 61 73 73 65 6d 62 6c 79 50 61 74 68 20 3d 20   assemblyPath = 
291d0 7b 30 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  {0}",..         
291e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46                 F
291f0 6f 72 44 69 73 70 6c 61 79 28 63 6f 6e 66 69 67  orDisplay(config
29200 75 72 61 74 69 6f 6e 2e 4c 69 6e 71 46 69 6c 65  uration.LinqFile
29210 4e 61 6d 65 29 29 2c 20 74 72 61 63 65 43 61 74  Name)), traceCat
29220 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
29230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
29240 66 20 28 21 63 6f 6e 66 69 67 75 72 61 74 69 6f  f (!configuratio
29250 6e 2e 57 68 61 74 49 66 29 0d 0a 20 20 20 20 20  n.WhatIf)..     
29260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29270 20 20 20 70 75 62 6c 69 73 68 2e 47 61 63 52 65     publish.GacRe
29280 6d 6f 76 65 28 63 6f 6e 66 69 67 75 72 61 74 69  move(configurati
29290 6f 6e 2e 43 6f 72 65 46 69 6c 65 4e 61 6d 65 29  on.CoreFileName)
292a0 3b 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 0d  ; /* throw */...
292b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
292c0 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 54 72       TraceOps.Tr
292d0 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ace(..          
292e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
292f0 61 63 65 50 72 69 6f 72 69 74 79 2e 48 69 67 68  acePriority.High
29300 65 73 74 2c 20 74 72 61 63 65 43 61 6c 6c 62 61  est, traceCallba
29310 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  ck, String.Forma
29320 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
29330 20 20 20 20 20 20 20 20 20 20 20 20 22 47 61 63              "Gac
29340 52 65 6d 6f 76 65 3a 20 61 73 73 65 6d 62 6c 79  Remove: assembly
29350 50 61 74 68 20 3d 20 7b 30 7d 22 2c 0d 0a 20 20  Path = {0}",..  
29360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29370 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79        ForDisplay
29380 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 43  (configuration.C
29390 6f 72 65 46 69 6c 65 4e 61 6d 65 29 29 2c 20 74  oreFileName)), t
293a0 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a  raceCategory);..
293b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
293c0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
293d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65  ..            #e
293e0 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
293f0 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
29400 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29410 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29420 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29430 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
29440 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69             #regi
29450 6f 6e 20 2e 4e 45 54 20 41 73 73 65 6d 62 6c 79  on .NET Assembly
29460 46 6f 6c 64 65 72 73 0d 0a 20 20 20 20 20 20 20  Folders..       
29470 20 20 20 20 20 69 66 20 28 63 6f 6e 66 69 67 75       if (configu
29480 72 61 74 69 6f 6e 2e 48 61 73 46 6c 61 67 73 28  ration.HasFlags(
29490 49 6e 73 74 61 6c 6c 46 6c 61 67 73 2e 41 73 73  InstallFlags.Ass
294a0 65 6d 62 6c 79 46 6f 6c 64 65 72 73 2c 20 74 72  emblyFolders, tr
294b0 75 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ue))..          
294c0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
294d0 20 20 20 20 20 69 66 20 28 21 46 6f 72 45 61 63       if (!ForEac
294e0 68 46 72 61 6d 65 77 6f 72 6b 52 65 67 69 73 74  hFrameworkRegist
294f0 72 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ry(..           
29500 20 20 20 20 20 20 20 20 20 20 20 20 20 66 72 61               fra
29510 6d 65 77 6f 72 6b 4c 69 73 74 2c 20 50 72 6f 63  meworkList, Proc
29520 65 73 73 41 73 73 65 6d 62 6c 79 46 6f 6c 64 65  essAssemblyFolde
29530 72 73 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  rs,..           
29540 20 20 20 20 20 20 20 20 20 20 20 20 20 64 69 72               dir
29550 65 63 74 6f 72 79 50 61 69 72 2c 20 63 6f 6e 66  ectoryPair, conf
29560 69 67 75 72 61 74 69 6f 6e 2e 57 68 61 74 49 66  iguration.WhatIf
29570 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
29580 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69             confi
29590 67 75 72 61 74 69 6f 6e 2e 56 65 72 62 6f 73 65  guration.Verbose
295a0 2c 20 72 65 66 20 65 72 72 6f 72 29 29 0d 0a 20  , ref error)).. 
295b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
295c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
295d0 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 53        TraceOps.S
295e0 68 6f 77 4d 65 73 73 61 67 65 28 0d 0a 20 20 20  howMessage(..   
295f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29600 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69       TracePriori
29610 74 79 2e 48 69 67 68 65 73 74 2c 20 74 72 61 63  ty.Highest, trac
29620 65 43 61 6c 6c 62 61 63 6b 2c 20 6e 75 6c 6c 2c  eCallback, null,
29630 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
29640 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 2c            error,
29650 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 2c 20   traceCategory, 
29660 4d 65 73 73 61 67 65 42 6f 78 42 75 74 74 6f 6e  MessageBoxButton
29670 73 2e 4f 4b 2c 0d 0a 20 20 20 20 20 20 20 20 20  s.OK,..         
29680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4d                 M
29690 65 73 73 61 67 65 42 6f 78 49 63 6f 6e 2e 45 72  essageBoxIcon.Er
296a0 72 6f 72 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ror);....       
296b0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
296c0 75 72 6e 20 31 3b 20 2f 2a 20 46 41 49 4c 55 52  urn 1; /* FAILUR
296d0 45 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20  E */..          
296e0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
296f0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
29700 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
29710 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
29720 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29730 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29740 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29750 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29760 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
29770 20 23 72 65 67 69 6f 6e 20 2e 4e 45 54 20 44 62   #region .NET Db
29780 50 72 6f 76 69 64 65 72 46 61 63 74 6f 72 79 0d  ProviderFactory.
29790 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
297a0 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 48  (configuration.H
297b0 61 73 46 6c 61 67 73 28 49 6e 73 74 61 6c 6c 46  asFlags(InstallF
297c0 6c 61 67 73 2e 44 62 50 72 6f 76 69 64 65 72 46  lags.DbProviderF
297d0 61 63 74 6f 72 79 2c 20 74 72 75 65 29 29 0d 0a  actory, true))..
297e0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
297f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
29800 6f 6f 6c 20 73 61 76 65 64 20 3d 20 66 61 6c 73  ool saved = fals
29810 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
29820 20 20 20 20 20 20 69 66 20 28 21 46 6f 72 45 61        if (!ForEa
29830 63 68 46 72 61 6d 65 77 6f 72 6b 43 6f 6e 66 69  chFrameworkConfi
29840 67 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  g(..            
29850 20 20 20 20 20 20 20 20 20 20 20 20 66 72 61 6d              fram
29860 65 77 6f 72 6b 4c 69 73 74 2c 20 50 72 6f 63 65  eworkList, Proce
29870 73 73 44 62 50 72 6f 76 69 64 65 72 46 61 63 74  ssDbProviderFact
29880 6f 72 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ory,..          
29890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 49 6e                In
298a0 76 61 72 69 61 6e 74 4e 61 6d 65 2c 20 50 72 6f  variantName, Pro
298b0 76 69 64 65 72 4e 61 6d 65 2c 20 44 65 73 63 72  viderName, Descr
298c0 69 70 74 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20  iption,..       
298d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
298e0 20 46 61 63 74 6f 72 79 54 79 70 65 4e 61 6d 65   FactoryTypeName
298f0 2c 20 61 73 73 65 6d 62 6c 79 4e 61 6d 65 2c 20  , assemblyName, 
29900 64 69 72 65 63 74 6f 72 79 50 61 69 72 2c 0d 0a  directoryPair,..
29910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29920 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72          configur
29930 61 74 69 6f 6e 2e 57 68 61 74 49 66 2c 20 63 6f  ation.WhatIf, co
29940 6e 66 69 67 75 72 61 74 69 6f 6e 2e 56 65 72 62  nfiguration.Verb
29950 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ose,..          
29960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
29970 66 20 73 61 76 65 64 2c 20 72 65 66 20 65 72 72  f saved, ref err
29980 6f 72 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  or))..          
29990 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
299a0 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
299b0 63 65 4f 70 73 2e 53 68 6f 77 4d 65 73 73 61 67  ceOps.ShowMessag
299c0 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
299d0 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
299e0 65 50 72 69 6f 72 69 74 79 2e 48 69 67 68 65 73  ePriority.Highes
299f0 74 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b  t, traceCallback
29a00 2c 20 6e 75 6c 6c 2c 0d 0a 20 20 20 20 20 20 20  , null,..       
29a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29a20 20 65 72 72 6f 72 2c 20 74 72 61 63 65 43 61 74   error, traceCat
29a30 65 67 6f 72 79 2c 20 4d 65 73 73 61 67 65 42 6f  egory, MessageBo
29a40 78 42 75 74 74 6f 6e 73 2e 4f 4b 2c 0d 0a 20 20  xButtons.OK,..  
29a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29a60 20 20 20 20 20 20 4d 65 73 73 61 67 65 42 6f 78        MessageBox
29a70 49 63 6f 6e 2e 45 72 72 6f 72 29 3b 0d 0a 0d 0a  Icon.Error);....
29a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29a90 20 20 20 20 72 65 74 75 72 6e 20 31 3b 20 2f 2a      return 1; /*
29aa0 20 46 41 49 4c 55 52 45 20 2a 2f 0d 0a 20 20 20   FAILURE */..   
29ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
29ac0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
29ad0 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64 72             #endr
29ae0 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  egion....       
29af0 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
29b00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29b10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29b20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29b30 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
29b40 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
29b50 56 53 20 50 61 63 6b 61 67 65 0d 0a 20 20 20 20  VS Package..    
29b60 20 20 20 20 20 20 20 20 69 66 20 28 63 6f 6e 66          if (conf
29b70 69 67 75 72 61 74 69 6f 6e 2e 48 61 73 46 6c 61  iguration.HasFla
29b80 67 73 28 49 6e 73 74 61 6c 6c 46 6c 61 67 73 2e  gs(InstallFlags.
29b90 56 73 50 61 63 6b 61 67 65 2c 20 74 72 75 65 29  VsPackage, true)
29ba0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
29bb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
29bc0 20 20 69 66 20 28 21 46 6f 72 45 61 63 68 56 73    if (!ForEachVs
29bd0 56 65 72 73 69 6f 6e 52 65 67 69 73 74 72 79 28  VersionRegistry(
29be0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
29bf0 20 20 20 20 20 20 20 20 20 20 76 73 4c 69 73 74            vsList
29c00 2c 20 50 72 6f 63 65 73 73 56 73 50 61 63 6b 61  , ProcessVsPacka
29c10 67 65 2c 20 70 61 63 6b 61 67 65 2c 20 66 69 6c  ge, package, fil
29c20 65 4e 61 6d 65 50 61 69 72 2c 0d 0a 20 20 20 20  eNamePair,..    
29c30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29c40 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f      configuratio
29c50 6e 2e 57 68 61 74 49 66 2c 20 63 6f 6e 66 69 67  n.WhatIf, config
29c60 75 72 61 74 69 6f 6e 2e 56 65 72 62 6f 73 65 2c  uration.Verbose,
29c70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
29c80 20 20 20 20 20 20 20 20 20 20 72 65 66 20 65 72            ref er
29c90 72 6f 72 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ror))..         
29ca0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
29cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
29cc0 61 63 65 4f 70 73 2e 53 68 6f 77 4d 65 73 73 61  aceOps.ShowMessa
29cd0 67 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ge(..           
29ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
29cf0 63 65 50 72 69 6f 72 69 74 79 2e 48 69 67 68 65  cePriority.Highe
29d00 73 74 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63  st, traceCallbac
29d10 6b 2c 20 6e 75 6c 6c 2c 0d 0a 20 20 20 20 20 20  k, null,..      
29d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29d30 20 20 65 72 72 6f 72 2c 20 74 72 61 63 65 43 61    error, traceCa
29d40 74 65 67 6f 72 79 2c 20 4d 65 73 73 61 67 65 42  tegory, MessageB
29d50 6f 78 42 75 74 74 6f 6e 73 2e 4f 4b 2c 0d 0a 20  oxButtons.OK,.. 
29d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29d70 20 20 20 20 20 20 20 4d 65 73 73 61 67 65 42 6f         MessageBo
29d80 78 49 63 6f 6e 2e 45 72 72 6f 72 29 3b 0d 0a 0d  xIcon.Error);...
29d90 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
29da0 20 20 20 20 20 72 65 74 75 72 6e 20 31 3b 20 2f       return 1; /
29db0 2a 20 46 41 49 4c 55 52 45 20 2a 2f 0d 0a 20 20  * FAILURE */..  
29dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
29dd0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
29de0 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64              #end
29df0 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
29e00 20 20 20 20 20 20 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 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
29e50 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e           #region
29e60 20 56 53 20 44 61 74 61 53 6f 75 72 63 65 0d 0a   VS DataSource..
29e70 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
29e80 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 48 61  configuration.Ha
29e90 73 46 6c 61 67 73 28 49 6e 73 74 61 6c 6c 46 6c  sFlags(InstallFl
29ea0 61 67 73 2e 56 73 44 61 74 61 53 6f 75 72 63 65  ags.VsDataSource
29eb0 2c 20 74 72 75 65 29 29 0d 0a 20 20 20 20 20 20  , true))..      
29ec0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
29ed0 20 20 20 20 20 20 20 20 20 69 66 20 28 21 46 6f           if (!Fo
29ee0 72 45 61 63 68 56 73 56 65 72 73 69 6f 6e 52 65  rEachVsVersionRe
29ef0 67 69 73 74 72 79 28 0d 0a 20 20 20 20 20 20 20  gistry(..       
29f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29f10 20 76 73 4c 69 73 74 2c 20 50 72 6f 63 65 73 73   vsList, Process
29f20 56 73 44 61 74 61 53 6f 75 72 63 65 2c 20 70 61  VsDataSource, pa
29f30 63 6b 61 67 65 2c 20 66 69 6c 65 4e 61 6d 65 50  ckage, fileNameP
29f40 61 69 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  air,..          
29f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
29f60 6e 66 69 67 75 72 61 74 69 6f 6e 2e 57 68 61 74  nfiguration.What
29f70 49 66 2c 20 63 6f 6e 66 69 67 75 72 61 74 69 6f  If, configuratio
29f80 6e 2e 56 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20  n.Verbose,..    
29f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29fa0 20 20 20 20 72 65 66 20 65 72 72 6f 72 29 29 0d      ref error)).
29fb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
29fc0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
29fd0 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73          TraceOps
29fe0 2e 53 68 6f 77 4d 65 73 73 61 67 65 28 0d 0a 20  .ShowMessage(.. 
29ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a000 20 20 20 20 20 20 20 54 72 61 63 65 50 72 69 6f         TracePrio
2a010 72 69 74 79 2e 48 69 67 68 65 73 74 2c 20 74 72  rity.Highest, tr
2a020 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 6e 75 6c  aceCallback, nul
2a030 6c 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l,..            
2a040 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
2a050 72 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72 79  r, traceCategory
2a060 2c 20 4d 65 73 73 61 67 65 42 6f 78 42 75 74 74  , MessageBoxButt
2a070 6f 6e 73 2e 4f 4b 2c 0d 0a 20 20 20 20 20 20 20  ons.OK,..       
2a080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a090 20 4d 65 73 73 61 67 65 42 6f 78 49 63 6f 6e 2e   MessageBoxIcon.
2a0a0 45 72 72 6f 72 29 3b 0d 0a 0d 0a 20 20 20 20 20  Error);....     
2a0b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
2a0c0 65 74 75 72 6e 20 31 3b 20 2f 2a 20 46 41 49 4c  eturn 1; /* FAIL
2a0d0 55 52 45 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20  URE */..        
2a0e0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
2a0f0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
2a100 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
2a110 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2a120 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a130 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a140 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a150 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a160 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
2a170 20 20 20 23 72 65 67 69 6f 6e 20 56 53 20 44 61     #region VS Da
2a180 74 61 50 72 6f 76 69 64 65 72 0d 0a 20 20 20 20  taProvider..    
2a190 20 20 20 20 20 20 20 20 69 66 20 28 63 6f 6e 66          if (conf
2a1a0 69 67 75 72 61 74 69 6f 6e 2e 48 61 73 46 6c 61  iguration.HasFla
2a1b0 67 73 28 49 6e 73 74 61 6c 6c 46 6c 61 67 73 2e  gs(InstallFlags.
2a1c0 56 73 44 61 74 61 50 72 6f 76 69 64 65 72 2c 20  VsDataProvider, 
2a1d0 74 72 75 65 29 29 0d 0a 20 20 20 20 20 20 20 20  true))..        
2a1e0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
2a1f0 20 20 20 20 20 20 20 69 66 20 28 21 46 6f 72 45         if (!ForE
2a200 61 63 68 56 73 56 65 72 73 69 6f 6e 52 65 67 69  achVsVersionRegi
2a210 73 74 72 79 28 0d 0a 20 20 20 20 20 20 20 20 20  stry(..         
2a220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76                 v
2a230 73 4c 69 73 74 2c 20 50 72 6f 63 65 73 73 56 73  sList, ProcessVs
2a240 44 61 74 61 50 72 6f 76 69 64 65 72 2c 20 70 61  DataProvider, pa
2a250 63 6b 61 67 65 2c 20 66 69 6c 65 4e 61 6d 65 50  ckage, fileNameP
2a260 61 69 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  air,..          
2a270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
2a280 6e 66 69 67 75 72 61 74 69 6f 6e 2e 57 68 61 74  nfiguration.What
2a290 49 66 2c 20 63 6f 6e 66 69 67 75 72 61 74 69 6f  If, configuratio
2a2a0 6e 2e 56 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20  n.Verbose,..    
2a2b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a2c0 20 20 20 20 72 65 66 20 65 72 72 6f 72 29 29 0d      ref error)).
2a2d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2a2e0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
2a2f0 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73          TraceOps
2a300 2e 53 68 6f 77 4d 65 73 73 61 67 65 28 0d 0a 20  .ShowMessage(.. 
2a310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a320 20 20 20 20 20 20 20 54 72 61 63 65 50 72 69 6f         TracePrio
2a330 72 69 74 79 2e 48 69 67 68 65 73 74 2c 20 74 72  rity.Highest, tr
2a340 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 6e 75 6c  aceCallback, nul
2a350 6c 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l,..            
2a360 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
2a370 72 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72 79  r, traceCategory
2a380 2c 20 4d 65 73 73 61 67 65 42 6f 78 42 75 74 74  , MessageBoxButt
2a390 6f 6e 73 2e 4f 4b 2c 0d 0a 20 20 20 20 20 20 20  ons.OK,..       
2a3a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a3b0 20 4d 65 73 73 61 67 65 42 6f 78 49 63 6f 6e 2e   MessageBoxIcon.
2a3c0 45 72 72 6f 72 29 3b 0d 0a 0d 0a 20 20 20 20 20  Error);....     
2a3d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
2a3e0 65 74 75 72 6e 20 31 3b 20 2f 2a 20 46 41 49 4c  eturn 1; /* FAIL
2a3f0 55 52 45 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20  URE */..        
2a400 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
2a410 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
2a420 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
2a430 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2a440 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a450 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a460 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a470 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a480 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
2a490 20 20 20 23 72 65 67 69 6f 6e 20 4c 6f 67 20 53     #region Log S
2a4a0 75 6d 6d 61 72 79 0d 0a 20 20 20 20 20 20 20 20  ummary..        
2a4b0 20 20 20 20 54 72 61 63 65 4f 70 73 2e 54 72 61      TraceOps.Tra
2a4c0 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ce(..           
2a4d0 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69       TracePriori
2a4e0 74 79 2e 48 69 67 68 65 72 2c 20 74 72 61 63 65  ty.Higher, trace
2a4f0 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67  Callback, String
2a500 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
2a510 20 20 20 20 20 20 20 20 20 20 22 73 75 62 4b 65            "subKe
2a520 79 73 43 72 65 61 74 65 64 20 3d 20 7b 30 7d 2c  ysCreated = {0},
2a530 20 73 75 62 4b 65 79 73 44 65 6c 65 74 65 64 20   subKeysDeleted 
2a540 3d 20 7b 31 7d 2c 20 22 20 2b 0d 0a 20 20 20 20  = {1}, " +..    
2a550 20 20 20 20 20 20 20 20 20 20 20 20 22 6b 65 79              "key
2a560 56 61 6c 75 65 73 53 65 74 20 3d 20 7b 32 7d 2c  ValuesSet = {2},
2a570 20 6b 65 79 56 61 6c 75 65 73 44 65 6c 65 74 65   keyValuesDelete
2a580 64 20 3d 20 7b 33 7d 22 2c 0d 0a 20 20 20 20 20  d = {3}",..     
2a590 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69             ForDi
2a5a0 73 70 6c 61 79 28 52 65 67 69 73 74 72 79 48 65  splay(RegistryHe
2a5b0 6c 70 65 72 2e 53 75 62 4b 65 79 73 43 72 65 61  lper.SubKeysCrea
2a5c0 74 65 64 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  ted),..         
2a5d0 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61         ForDispla
2a5e0 79 28 52 65 67 69 73 74 72 79 48 65 6c 70 65 72  y(RegistryHelper
2a5f0 2e 53 75 62 4b 65 79 73 44 65 6c 65 74 65 64 29  .SubKeysDeleted)
2a600 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
2a610 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 52 65     ForDisplay(Re
2a620 67 69 73 74 72 79 48 65 6c 70 65 72 2e 4b 65 79  gistryHelper.Key
2a630 56 61 6c 75 65 73 53 65 74 29 2c 0d 0a 20 20 20  ValuesSet),..   
2a640 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72               For
2a650 44 69 73 70 6c 61 79 28 52 65 67 69 73 74 72 79  Display(Registry
2a660 48 65 6c 70 65 72 2e 4b 65 79 56 61 6c 75 65 73  Helper.KeyValues
2a670 44 65 6c 65 74 65 64 29 29 2c 0d 0a 20 20 20 20  Deleted)),..    
2a680 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
2a690 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 20 20 20  eCategory);..   
2a6a0 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67           #endreg
2a6b0 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ion....         
2a6c0 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
2a6d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a6e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a6f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a700 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
2a710 20 20 20 20 20 20 72 65 74 75 72 6e 20 30 3b 20        return 0; 
2a720 2f 2a 20 53 55 43 43 45 53 53 20 2a 2f 0d 0a 20  /* SUCCESS */.. 
2a730 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
2a740 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 20 20    #endregion..  
2a750 20 20 7d 0d 0a 20 20 20 20 23 65 6e 64 72 65 67    }..    #endreg
2a760 69 6f 6e 0d 0a 7d 0d 0a                          ion..}..