System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact 442c284492aa1bb57d82f6d42ad23c95972f39e0:


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 41 73                As
13240 73 65 6d 62 6c 79 20 61 73 73 65 6d 62 6c 79 20  sembly assembly 
13250 3d 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e  = configuration.
13260 61 73 73 65 6d 62 6c 79 3b 0d 0a 0d 0a 20 20 20  assembly;....   
13270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13280 20 69 66 20 28 61 73 73 65 6d 62 6c 79 20 3d 3d   if (assembly ==
13290 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
132a0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
132b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
132c0 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22         error = "
132d0 49 6e 76 61 6c 69 64 20 61 73 73 65 6d 62 6c 79  Invalid assembly
132e0 2e 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  .";..           
132f0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
13300 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  urn false;..    
13310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13320 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
13330 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
13340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13350 20 2f 2f 20 4e 4f 54 45 3a 20 57 68 61 74 20 76   // NOTE: What v
13360 65 72 73 69 6f 6e 20 6f 66 20 74 68 65 20 72 75  ersion of the ru
13370 6e 74 69 6d 65 20 77 61 73 20 74 68 65 20 63 6f  ntime was the co
13380 72 65 20 28 70 72 69 6d 61 72 79 29 0d 0a 20 20  re (primary)..  
13390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
133a0 20 20 2f 2f 20 20 20 20 20 20 20 61 73 73 65 6d    //       assem
133b0 62 6c 79 20 63 6f 6d 70 69 6c 65 64 20 61 67 61  bly compiled aga
133c0 69 6e 73 74 20 28 65 2e 67 2e 20 22 76 32 2e 30  inst (e.g. "v2.0
133d0 2e 35 30 37 32 37 22 20 6f 72 0d 0a 20 20 20 20  .50727" or..    
133e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
133f0 2f 2f 20 20 20 20 20 20 20 22 76 34 2e 30 2e 33  //       "v4.0.3
13400 30 33 31 39 22 29 2e 0d 0a 20 20 20 20 20 20 20  0319")...       
13410 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
13420 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
13430 20 20 20 20 20 73 74 72 69 6e 67 20 63 6f 72 65       string core
13440 49 6d 61 67 65 52 75 6e 74 69 6d 65 56 65 72 73  ImageRuntimeVers
13450 69 6f 6e 20 3d 20 47 65 74 49 6d 61 67 65 52 75  ion = GetImageRu
13460 6e 74 69 6d 65 56 65 72 73 69 6f 6e 28 0d 0a 20  ntimeVersion(.. 
13470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13480 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61         configura
13490 74 69 6f 6e 2e 63 6f 72 65 46 69 6c 65 4e 61 6d  tion.coreFileNam
134a0 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
134b0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
134c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
134d0 20 20 20 2f 2f 20 54 4f 44 4f 3a 20 52 65 73 74     // TODO: Rest
134e0 72 69 63 74 20 74 68 65 20 63 6f 6e 66 69 67 75  rict the configu
134f0 72 61 74 69 6f 6e 20 62 61 73 65 64 20 6f 6e 20  ration based on 
13500 77 68 69 63 68 20 69 6d 61 67 65 0d 0a 20 20 20  which image..   
13510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13520 20 2f 2f 20 20 20 20 20 20 20 72 75 6e 74 69 6d   //       runtim
13530 65 20 76 65 72 73 69 6f 6e 73 20 28 77 68 69 63  e versions (whic
13540 68 20 6d 6f 72 65 2d 6f 72 2d 6c 65 73 73 20 63  h more-or-less c
13550 6f 72 72 65 73 70 6f 6e 64 0d 0a 20 20 20 20 20  orrespond..     
13560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
13570 2f 20 20 20 20 20 20 20 74 6f 20 2e 4e 45 54 20  /       to .NET 
13580 46 72 61 6d 65 77 6f 72 6b 20 76 65 72 73 69 6f  Framework versio
13590 6e 73 29 20 61 72 65 20 73 75 70 70 6f 72 74 65  ns) are supporte
135a0 64 20 62 79 20 74 68 65 0d 0a 20 20 20 20 20 20  d by the..      
135b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
135c0 20 20 20 20 20 20 20 76 65 72 73 69 6f 6e 73 20         versions 
135d0 6f 66 20 56 69 73 75 61 6c 20 53 74 75 64 69 6f  of Visual Studio
135e0 20 74 68 61 74 20 61 72 65 20 69 6e 73 74 61 6c   that are instal
135f0 6c 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  led...          
13600 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
13610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13620 20 20 69 66 20 28 53 74 72 69 6e 67 2e 49 73 4e    if (String.IsN
13630 75 6c 6c 4f 72 45 6d 70 74 79 28 63 6f 72 65 49  ullOrEmpty(coreI
13640 6d 61 67 65 52 75 6e 74 69 6d 65 56 65 72 73 69  mageRuntimeVersi
13650 6f 6e 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  on))..          
13660 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
13670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13680 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69 6e       error = "in
13690 76 61 6c 69 64 20 63 6f 72 65 20 66 69 6c 65 20  valid core file 
136a0 69 6d 61 67 65 20 72 75 6e 74 69 6d 65 20 76 65  image runtime ve
136b0 72 73 69 6f 6e 22 3b 0d 0a 20 20 20 20 20 20 20  rsion";..       
136c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
136d0 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
136e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
136f0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
13700 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20             else 
13710 69 66 20 28 53 74 72 69 6e 67 2e 45 71 75 61 6c  if (String.Equal
13720 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s(..            
13730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13740 63 6f 72 65 49 6d 61 67 65 52 75 6e 74 69 6d 65  coreImageRuntime
13750 56 65 72 73 69 6f 6e 2c 20 43 4c 52 32 49 6d 61  Version, CLR2Ima
13760 67 65 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e  geRuntimeVersion
13770 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
13780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53                 S
13790 74 72 69 6e 67 43 6f 6d 70 61 72 69 73 6f 6e 2e  tringComparison.
137a0 49 6e 76 61 72 69 61 6e 74 43 75 6c 74 75 72 65  InvariantCulture
137b0 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
137c0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
137d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
137e0 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
137f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
13800 2f 20 4e 4f 54 45 3a 20 46 6f 72 20 74 68 65 20  / NOTE: For the 
13810 43 4c 52 20 76 32 2e 30 20 72 75 6e 74 69 6d 65  CLR v2.0 runtime
13820 2c 20 6d 61 6b 65 20 73 75 72 65 20 77 65 20 64  , make sure we d
13830 69 73 61 62 6c 65 0d 0a 20 20 20 20 20 20 20 20  isable..        
13840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13850 2f 2f 20 20 20 20 20 20 20 61 6e 79 20 61 74 74  //       any att
13860 65 6d 70 74 20 74 6f 20 75 73 65 20 69 74 20 66  empt to use it f
13870 6f 72 20 74 68 69 6e 67 73 20 74 68 61 74 20 72  or things that r
13880 65 71 75 69 72 65 0d 0a 20 20 20 20 20 20 20 20  equire..        
13890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
138a0 2f 2f 20 20 20 20 20 20 20 61 6e 20 61 73 73 65  //       an asse
138b0 6d 62 6c 79 20 63 6f 6d 70 69 6c 65 64 20 66 6f  mbly compiled fo
138c0 72 20 74 68 65 20 43 4c 52 20 76 34 2e 30 2e 20  r the CLR v4.0. 
138d0 20 49 74 20 69 73 0d 0a 20 20 20 20 20 20 20 20   It is..        
138e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
138f0 2f 2f 20 20 20 20 20 20 20 75 6e 63 65 72 74 61  //       uncerta
13900 69 6e 20 69 66 20 74 68 69 73 20 69 73 20 61 63  in if this is ac
13910 74 75 61 6c 6c 79 20 61 20 70 72 6f 62 6c 65 6d  tually a problem
13920 20 69 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 20   in..           
13930 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
13940 20 20 20 20 20 20 70 72 61 63 74 69 63 65 20 61        practice a
13950 73 20 74 68 65 20 43 4c 52 20 76 34 2e 30 20 63  s the CLR v4.0 c
13960 61 6e 20 6c 6f 61 64 20 61 6e 64 20 75 73 65 20  an load and use 
13970 61 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  an..            
13980 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
13990 20 20 20 20 20 61 73 73 65 6d 62 6c 79 20 63 6f       assembly co
139a0 6d 70 69 6c 65 64 20 77 69 74 68 20 74 68 65 20  mpiled with the 
139b0 43 4c 52 20 76 32 2e 30 3b 20 68 6f 77 65 76 65  CLR v2.0; howeve
139c0 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  r,..            
139d0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
139e0 20 20 20 20 20 73 69 6e 63 65 20 74 68 69 73 20       since this 
139f0 70 72 6f 6a 65 63 74 20 6f 66 66 65 72 73 20 62  project offers b
13a00 6f 74 68 20 63 6f 6e 66 69 67 75 72 61 74 69 6f  oth configuratio
13a10 6e 73 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ns,..           
13a20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
13a30 20 20 20 20 20 20 77 65 20 63 75 72 72 65 6e 74        we current
13a40 6c 79 20 64 69 73 61 6c 6c 6f 77 20 74 68 69 73  ly disallow this
13a50 20 6d 69 73 6d 61 74 63 68 2e 0d 0a 20 20 20 20   mismatch...    
13a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13a70 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
13a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13a90 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e 6f  configuration.no
13aa0 4e 65 74 46 78 34 30 20 3d 20 74 72 75 65 3b 0d  NetFx40 = true;.
13ab0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
13ac0 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75           configu
13ad0 72 61 74 69 6f 6e 2e 6e 6f 56 73 32 30 31 30 20  ration.noVs2010 
13ae0 3d 20 74 72 75 65 3b 0d 0a 0d 0a 20 20 20 20 20  = true;....     
13af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13b00 20 20 20 54 72 61 63 65 4f 70 73 2e 54 72 61 63     TraceOps.Trac
13b10 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
13b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13b30 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4d 65  TracePriority.Me
13b40 64 69 75 6d 2c 20 74 72 61 63 65 43 61 6c 6c 62  dium, traceCallb
13b50 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d  ack, String.Form
13b60 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
13b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13b80 20 22 41 73 73 65 6d 62 6c 79 20 69 73 20 63 6f   "Assembly is co
13b90 6d 70 69 6c 65 64 20 66 6f 72 20 74 68 65 20 2e  mpiled for the .
13ba0 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b 20 7b 30  NET Framework {0
13bb0 7d 2c 20 22 20 2b 0d 0a 20 20 20 20 20 20 20 20  }, " +..        
13bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13bd0 20 20 20 20 22 73 75 70 70 6f 72 74 20 66 6f 72      "support for
13be0 20 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b 20   .NET Framework 
13bf0 7b 31 7d 20 69 73 20 6e 6f 77 20 64 69 73 61 62  {1} is now disab
13c00 6c 65 64 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20  led.",..        
13c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13c20 20 20 20 20 43 4c 52 32 49 6d 61 67 65 52 75 6e      CLR2ImageRun
13c30 74 69 6d 65 56 65 72 73 69 6f 6e 2c 20 43 4c 52  timeVersion, CLR
13c40 34 49 6d 61 67 65 52 75 6e 74 69 6d 65 56 65 72  4ImageRuntimeVer
13c50 73 69 6f 6e 29 2c 0d 0a 20 20 20 20 20 20 20 20  sion),..        
13c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13c70 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72      traceCategor
13c80 79 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  y);..           
13c90 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
13ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13cb0 65 6c 73 65 20 69 66 20 28 53 74 72 69 6e 67 2e  else if (String.
13cc0 45 71 75 61 6c 73 28 0d 0a 20 20 20 20 20 20 20  Equals(..       
13cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13ce0 20 20 20 20 20 63 6f 72 65 49 6d 61 67 65 52 75       coreImageRu
13cf0 6e 74 69 6d 65 56 65 72 73 69 6f 6e 2c 20 43 4c  ntimeVersion, CL
13d00 52 34 49 6d 61 67 65 52 75 6e 74 69 6d 65 56 65  R4ImageRuntimeVe
13d10 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20  rsion,..        
13d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13d30 20 20 20 20 53 74 72 69 6e 67 43 6f 6d 70 61 72      StringCompar
13d40 69 73 6f 6e 2e 49 6e 76 61 72 69 61 6e 74 43 75  ison.InvariantCu
13d50 6c 74 75 72 65 29 29 0d 0a 20 20 20 20 20 20 20  lture))..       
13d60 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
13d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13d80 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
13d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13da0 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 46 6f 72      // NOTE: For
13db0 20 74 68 65 20 43 4c 52 20 76 34 2e 30 20 72 75   the CLR v4.0 ru
13dc0 6e 74 69 6d 65 2c 20 6d 61 6b 65 20 73 75 72 65  ntime, make sure
13dd0 20 77 65 20 64 69 73 61 62 6c 65 0d 0a 20 20 20   we disable..   
13de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13df0 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 61 6e       //       an
13e00 79 20 61 74 74 65 6d 70 74 20 74 6f 20 75 73 65  y attempt to use
13e10 20 69 74 20 66 6f 72 20 74 68 69 6e 67 73 20 74   it for things t
13e20 68 61 74 20 72 65 71 75 69 72 65 0d 0a 20 20 20  hat require..   
13e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13e40 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 61 6e       //       an
13e50 20 61 73 73 65 6d 62 6c 79 20 63 6f 6d 70 69 6c   assembly compil
13e60 65 64 20 66 6f 72 20 74 68 65 20 43 4c 52 20 76  ed for the CLR v
13e70 32 2e 30 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  2.0...          
13e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
13e90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
13ea0 20 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67            config
13eb0 75 72 61 74 69 6f 6e 2e 6e 6f 4e 65 74 46 78 32  uration.noNetFx2
13ec0 30 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20  0 = true;..     
13ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13ee0 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e     configuration
13ef0 2e 6e 6f 56 73 32 30 30 38 20 3d 20 74 72 75 65  .noVs2008 = true
13f00 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
13f10 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
13f20 63 65 4f 70 73 2e 54 72 61 63 65 28 0d 0a 20 20  ceOps.Trace(..  
13f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13f40 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 50            TraceP
13f50 72 69 6f 72 69 74 79 2e 4d 65 64 69 75 6d 2c 20  riority.Medium, 
13f60 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53  traceCallback, S
13f70 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
13f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13f90 20 20 20 20 20 20 20 20 20 20 20 22 41 73 73 65             "Asse
13fa0 6d 62 6c 79 20 69 73 20 63 6f 6d 70 69 6c 65 64  mbly is compiled
13fb0 20 66 6f 72 20 74 68 65 20 2e 4e 45 54 20 46 72   for the .NET Fr
13fc0 61 6d 65 77 6f 72 6b 20 7b 30 7d 2c 20 22 20 2b  amework {0}, " +
13fd0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
13fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 73                "s
13ff0 75 70 70 6f 72 74 20 66 6f 72 20 2e 4e 45 54 20  upport for .NET 
14000 46 72 61 6d 65 77 6f 72 6b 20 7b 31 7d 20 69 73  Framework {1} is
14010 20 6e 6f 77 20 64 69 73 61 62 6c 65 64 2e 22 2c   now disabled.",
14020 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
14030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f                Fo
14040 72 44 69 73 70 6c 61 79 28 43 4c 52 34 49 6d 61  rDisplay(CLR4Ima
14050 67 65 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e  geRuntimeVersion
14060 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
14070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14080 46 6f 72 44 69 73 70 6c 61 79 28 43 4c 52 32 49  ForDisplay(CLR2I
14090 6d 61 67 65 52 75 6e 74 69 6d 65 56 65 72 73 69  mageRuntimeVersi
140a0 6f 6e 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  on)),..         
140b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
140c0 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79     traceCategory
140d0 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
140e0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
140f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
14100 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  lse..           
14110 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
14120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14130 20 20 20 20 65 72 72 6f 72 20 3d 20 53 74 72 69      error = Stri
14140 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
14150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14160 20 20 20 20 20 20 20 20 22 75 6e 73 75 70 70 6f          "unsuppo
14170 72 74 65 64 20 63 6f 72 65 20 66 69 6c 65 20 69  rted core file i
14180 6d 61 67 65 20 72 75 6e 74 69 6d 65 20 76 65 72  mage runtime ver
14190 73 69 6f 6e 20 22 20 2b 0d 0a 20 20 20 20 20 20  sion " +..      
141a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
141b0 20 20 20 20 20 20 22 7b 30 7d 2c 20 6d 75 73 74        "{0}, must
141c0 20 62 65 20 7b 31 7d 20 6f 72 20 7b 32 7d 22 2c   be {1} or {2}",
141d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
141e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f                Fo
141f0 72 44 69 73 70 6c 61 79 28 63 6f 72 65 49 6d 61  rDisplay(coreIma
14200 67 65 52 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e  geRuntimeVersion
14210 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
14220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14230 46 6f 72 44 69 73 70 6c 61 79 28 43 4c 52 32 49  ForDisplay(CLR2I
14240 6d 61 67 65 52 75 6e 74 69 6d 65 56 65 72 73 69  mageRuntimeVersi
14250 6f 6e 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  on),..          
14260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14270 20 20 46 6f 72 44 69 73 70 6c 61 79 28 43 4c 52    ForDisplay(CLR
14280 34 49 6d 61 67 65 52 75 6e 74 69 6d 65 56 65 72  4ImageRuntimeVer
14290 73 69 6f 6e 29 29 3b 0d 0a 0d 0a 20 20 20 20 20  sion));....     
142a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
142b0 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
142c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
142d0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
142e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
142f0 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20  eturn true;..   
14300 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
14310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14320 63 61 74 63 68 20 28 45 78 63 65 70 74 69 6f 6e  catch (Exception
14330 20 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20   e)..           
14340 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
14350 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
14360 65 4f 70 73 2e 54 72 61 63 65 28 0d 0a 20 20 20  eOps.Trace(..   
14370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14380 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69       TracePriori
14390 74 79 2e 48 69 67 68 65 73 74 2c 20 74 72 61 63  ty.Highest, trac
143a0 65 43 61 6c 6c 62 61 63 6b 2c 20 65 2c 0d 0a 20  eCallback, e,.. 
143b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
143c0 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
143d0 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
143e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
143f0 72 6f 72 20 3d 20 22 46 61 69 6c 65 64 20 74 6f  ror = "Failed to
14400 20 63 68 65 63 6b 20 69 6d 61 67 65 20 72 75 6e   check image run
14410 74 69 6d 65 20 76 65 72 73 69 6f 6e 2e 22 3b 0d  time version.";.
14420 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
14430 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
14440 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
14450 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se;..           
14460 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
14470 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
14480 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
14490 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
144a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
144b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
144c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
144d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65  .            #re
144e0 67 69 6f 6e 20 50 75 62 6c 69 63 20 4d 65 74 68  gion Public Meth
144f0 6f 64 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ods..           
14500 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 48 61 73   public bool Has
14510 46 6c 61 67 73 28 0d 0a 20 20 20 20 20 20 20 20  Flags(..        
14520 20 20 20 20 20 20 20 20 49 6e 73 74 61 6c 6c 46          InstallF
14530 6c 61 67 73 20 68 61 73 46 6c 61 67 73 2c 0d 0a  lags hasFlags,..
14540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14550 62 6f 6f 6c 20 61 6c 6c 0d 0a 20 20 20 20 20 20  bool all..      
14560 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
14570 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
14580 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
14590 61 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  all)..          
145a0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
145b0 20 28 28 69 6e 73 74 61 6c 6c 46 6c 61 67 73 20   ((installFlags 
145c0 26 20 68 61 73 46 6c 61 67 73 29 20 3d 3d 20 68  & hasFlags) == h
145d0 61 73 46 6c 61 67 73 29 3b 0d 0a 20 20 20 20 20  asFlags);..     
145e0 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d             else.
145f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
14600 20 20 20 20 20 72 65 74 75 72 6e 20 28 28 69 6e       return ((in
14610 73 74 61 6c 6c 46 6c 61 67 73 20 26 20 68 61 73  stallFlags & has
14620 46 6c 61 67 73 29 20 21 3d 20 49 6e 73 74 61 6c  Flags) != Instal
14630 6c 46 6c 61 67 73 2e 4e 6f 6e 65 29 3b 0d 0a 20  lFlags.None);.. 
14640 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
14650 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
14660 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14670 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14680 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14690 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
146a0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
146b0 75 62 6c 69 63 20 76 6f 69 64 20 44 75 6d 70 28  ublic void Dump(
146c0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
146d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
146e0 20 20 69 66 20 28 74 72 61 63 65 43 61 6c 6c 62    if (traceCallb
146f0 61 63 6b 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ack != null)..  
14700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
14710 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
14720 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61       traceCallba
14730 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  ck(String.Format
14740 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72  (NameAndValueFor
14750 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  mat,..          
14760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 41                "A
14770 73 73 65 6d 62 6c 79 22 2c 20 46 6f 72 44 69 73  ssembly", ForDis
14780 70 6c 61 79 28 61 73 73 65 6d 62 6c 79 29 29 2c  play(assembly)),
14790 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
147a0 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
147b0 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
147c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
147d0 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53   traceCallback(S
147e0 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d  tring.Format(Nam
147f0 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c  eAndValueFormat,
14800 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
14810 20 20 20 20 20 20 20 20 20 20 22 4c 6f 67 46 69            "LogFi
14820 6c 65 4e 61 6d 65 22 2c 20 46 6f 72 44 69 73 70  leName", ForDisp
14830 6c 61 79 28 6c 6f 67 46 69 6c 65 4e 61 6d 65 29  lay(logFileName)
14840 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
14850 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
14860 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
14870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14880 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b     traceCallback
14890 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e  (String.Format(N
148a0 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61  ameAndValueForma
148b0 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t,..            
148c0 20 20 20 20 20 20 20 20 20 20 20 20 22 44 69 72              "Dir
148d0 65 63 74 6f 72 79 22 2c 20 46 6f 72 44 69 73 70  ectory", ForDisp
148e0 6c 61 79 28 64 69 72 65 63 74 6f 72 79 29 29 2c  lay(directory)),
148f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
14900 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
14910 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
14920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14930 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53   traceCallback(S
14940 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d  tring.Format(Nam
14950 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c  eAndValueFormat,
14960 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
14970 20 20 20 20 20 20 20 20 20 20 22 43 6f 72 65 46            "CoreF
14980 69 6c 65 4e 61 6d 65 22 2c 20 46 6f 72 44 69 73  ileName", ForDis
14990 70 6c 61 79 28 63 6f 72 65 46 69 6c 65 4e 61 6d  play(coreFileNam
149a0 65 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  e)),..          
149b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
149c0 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
149d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
149e0 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61       traceCallba
149f0 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  ck(String.Format
14a00 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72  (NameAndValueFor
14a10 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  mat,..          
14a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 4c                "L
14a30 69 6e 71 46 69 6c 65 4e 61 6d 65 22 2c 20 46 6f  inqFileName", Fo
14a40 72 44 69 73 70 6c 61 79 28 6c 69 6e 71 46 69 6c  rDisplay(linqFil
14a50 65 4e 61 6d 65 29 29 2c 0d 0a 20 20 20 20 20 20  eName)),..      
14a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14a70 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
14a80 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
14a90 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
14aa0 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f  llback(String.Fo
14ab0 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75  rmat(NameAndValu
14ac0 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20  eFormat,..      
14ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14ae0 20 20 22 44 65 73 69 67 6e 65 72 46 69 6c 65 4e    "DesignerFileN
14af0 61 6d 65 22 2c 20 46 6f 72 44 69 73 70 6c 61 79  ame", ForDisplay
14b00 28 64 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d  (designerFileNam
14b10 65 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  e)),..          
14b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
14b30 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
14b40 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
14b50 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61       traceCallba
14b60 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  ck(String.Format
14b70 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72  (NameAndValueFor
14b80 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  mat,..          
14b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 54                "T
14ba0 72 61 63 65 46 6f 72 6d 61 74 22 2c 20 46 6f 72  raceFormat", For
14bb0 44 69 73 70 6c 61 79 28 74 72 61 63 65 46 6f 72  Display(traceFor
14bc0 6d 61 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  mat)),..        
14bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14be0 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
14bf0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
14c00 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c         traceCall
14c10 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d  back(String.Form
14c20 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46  at(NameAndValueF
14c30 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20  ormat,..        
14c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14c50 22 49 6e 73 74 61 6c 6c 46 6c 61 67 73 22 2c 20  "InstallFlags", 
14c60 46 6f 72 44 69 73 70 6c 61 79 28 69 6e 73 74 61  ForDisplay(insta
14c70 6c 6c 46 6c 61 67 73 29 29 2c 0d 0a 20 20 20 20  llFlags)),..    
14c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14c90 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72      traceCategor
14ca0 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
14cb0 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
14cc0 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e  Callback(String.
14cd0 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61  Format(NameAndVa
14ce0 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20  lueFormat,..    
14cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14d00 20 20 20 20 22 54 72 61 63 65 50 72 69 6f 72 69      "TracePriori
14d10 74 79 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  ty", ForDisplay(
14d20 74 72 61 63 65 50 72 69 6f 72 69 74 79 29 29 2c  tracePriority)),
14d30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
14d40 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
14d50 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
14d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14d70 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53   traceCallback(S
14d80 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d  tring.Format(Nam
14d90 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c  eAndValueFormat,
14da0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
14db0 20 20 20 20 20 20 20 20 20 20 22 49 6e 73 74 61            "Insta
14dc0 6c 6c 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  ll", ForDisplay(
14dd0 69 6e 73 74 61 6c 6c 29 29 2c 0d 0a 20 20 20 20  install)),..    
14de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14df0 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72      traceCategor
14e00 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
14e10 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
14e20 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e  Callback(String.
14e30 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61  Format(NameAndVa
14e40 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20  lueFormat,..    
14e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14e60 20 20 20 20 22 4e 6f 44 65 73 6b 74 6f 70 22 2c      "NoDesktop",
14e70 20 46 6f 72 44 69 73 70 6c 61 79 28 6e 6f 44 65   ForDisplay(noDe
14e80 73 6b 74 6f 70 29 29 2c 0d 0a 20 20 20 20 20 20  sktop)),..      
14e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14ea0 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
14eb0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
14ec0 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
14ed0 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f  llback(String.Fo
14ee0 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75  rmat(NameAndValu
14ef0 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20  eFormat,..      
14f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14f10 20 20 22 4e 6f 43 6f 6d 70 61 63 74 22 2c 20 46    "NoCompact", F
14f20 6f 72 44 69 73 70 6c 61 79 28 6e 6f 43 6f 6d 70  orDisplay(noComp
14f30 61 63 74 29 29 2c 0d 0a 20 20 20 20 20 20 20 20  act)),..        
14f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14f50 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d  traceCategory);.
14f60 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
14f70 20 20 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c         traceCall
14f80 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d  back(String.Form
14f90 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46  at(NameAndValueF
14fa0 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20  ormat,..        
14fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14fc0 22 4e 6f 4e 65 74 46 78 32 30 22 2c 20 46 6f 72  "NoNetFx20", For
14fd0 44 69 73 70 6c 61 79 28 6e 6f 4e 65 74 46 78 32  Display(noNetFx2
14fe0 30 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  0)),..          
14ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
15000 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
15010 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
15020 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61       traceCallba
15030 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  ck(String.Format
15040 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72  (NameAndValueFor
15050 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  mat,..          
15060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 4e                "N
15070 6f 4e 65 74 46 78 34 30 22 2c 20 46 6f 72 44 69  oNetFx40", ForDi
15080 73 70 6c 61 79 28 6e 6f 4e 65 74 46 78 34 30 29  splay(noNetFx40)
15090 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
150a0 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
150b0 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
150c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
150d0 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b     traceCallback
150e0 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e  (String.Format(N
150f0 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61  ameAndValueForma
15100 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t,..            
15110 20 20 20 20 20 20 20 20 20 20 20 20 22 4e 6f 56              "NoV
15120 73 32 30 30 38 22 2c 20 46 6f 72 44 69 73 70 6c  s2008", ForDispl
15130 61 79 28 6e 6f 56 73 32 30 30 38 29 29 2c 0d 0a  ay(noVs2008)),..
15140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15150 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74          traceCat
15160 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
15170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
15180 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53 74 72  raceCallback(Str
15190 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d 65 41  ing.Format(NameA
151a0 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a  ndValueFormat,..
151b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
151c0 20 20 20 20 20 20 20 20 22 4e 6f 56 73 32 30 31          "NoVs201
151d0 30 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 6e  0", ForDisplay(n
151e0 6f 56 73 32 30 31 30 29 29 2c 0d 0a 20 20 20 20  oVs2010)),..    
151f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15200 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72      traceCategor
15210 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
15220 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
15230 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e  Callback(String.
15240 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61  Format(NameAndVa
15250 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20  lueFormat,..    
15260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15270 20 20 20 20 22 4e 6f 54 72 61 63 65 22 2c 20 46      "NoTrace", F
15280 6f 72 44 69 73 70 6c 61 79 28 6e 6f 54 72 61 63  orDisplay(noTrac
15290 65 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  e)),..          
152a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
152b0 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
152c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
152d0 20 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61       traceCallba
152e0 63 6b 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  ck(String.Format
152f0 28 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72  (NameAndValueFor
15300 6d 61 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  mat,..          
15310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 4e                "N
15320 6f 43 6f 6e 73 6f 6c 65 22 2c 20 46 6f 72 44 69  oConsole", ForDi
15330 73 70 6c 61 79 28 6e 6f 43 6f 6e 73 6f 6c 65 29  splay(noConsole)
15340 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
15350 20 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63              trac
15360 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20  eCategory);.... 
15370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15380 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b     traceCallback
15390 28 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e  (String.Format(N
153a0 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61  ameAndValueForma
153b0 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t,..            
153c0 20 20 20 20 20 20 20 20 20 20 20 20 22 4e 6f 4c              "NoL
153d0 6f 67 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  og", ForDisplay(
153e0 6e 6f 4c 6f 67 29 29 2c 0d 0a 20 20 20 20 20 20  noLog)),..      
153f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15400 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
15410 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
15420 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
15430 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e 46 6f  llback(String.Fo
15440 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61 6c 75  rmat(NameAndValu
15450 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20 20 20  eFormat,..      
15460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15470 20 20 22 57 68 61 74 49 66 22 2c 20 46 6f 72 44    "WhatIf", ForD
15480 69 73 70 6c 61 79 28 77 68 61 74 49 66 29 29 2c  isplay(whatIf)),
15490 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
154a0 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43            traceC
154b0 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20  ategory);....   
154c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
154d0 20 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53   traceCallback(S
154e0 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 4e 61 6d  tring.Format(Nam
154f0 65 41 6e 64 56 61 6c 75 65 46 6f 72 6d 61 74 2c  eAndValueFormat,
15500 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
15510 20 20 20 20 20 20 20 20 20 20 22 56 65 72 62 6f            "Verbo
15520 73 65 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  se", ForDisplay(
15530 76 65 72 62 6f 73 65 29 29 2c 0d 0a 20 20 20 20  verbose)),..    
15540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15550 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f 72      traceCategor
15560 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
15570 20 20 20 20 20 20 20 20 20 20 20 74 72 61 63 65             trace
15580 43 61 6c 6c 62 61 63 6b 28 53 74 72 69 6e 67 2e  Callback(String.
15590 46 6f 72 6d 61 74 28 4e 61 6d 65 41 6e 64 56 61  Format(NameAndVa
155a0 6c 75 65 46 6f 72 6d 61 74 2c 0d 0a 20 20 20 20  lueFormat,..    
155b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
155c0 20 20 20 20 22 43 6f 6e 66 69 72 6d 22 2c 20 46      "Confirm", F
155d0 6f 72 44 69 73 70 6c 61 79 28 63 6f 6e 66 69 72  orDisplay(confir
155e0 6d 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  m)),..          
155f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
15600 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 20  aceCategory);.. 
15610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
15620 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
15630 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e  .            #en
15640 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
15650 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
15660 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15670 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15680 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15690 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
156a0 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f            #regio
156b0 6e 20 50 75 62 6c 69 63 20 50 72 6f 70 65 72 74  n Public Propert
156c0 69 65 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ies..           
156d0 20 70 72 69 76 61 74 65 20 41 73 73 65 6d 62 6c   private Assembl
156e0 79 20 61 73 73 65 6d 62 6c 79 3b 0d 0a 20 20 20  y assembly;..   
156f0 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63 20           public 
15700 41 73 73 65 6d 62 6c 79 20 41 73 73 65 6d 62 6c  Assembly Assembl
15710 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  y..            {
15720 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
15730 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 61    get { return a
15740 73 73 65 6d 62 6c 79 3b 20 7d 0d 0a 20 20 20 20  ssembly; }..    
15750 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
15760 7b 20 61 73 73 65 6d 62 6c 79 20 3d 20 76 61 6c  { assembly = val
15770 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  ue; }..         
15780 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
15790 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
157a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
157b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
157c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
157d0 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
157e0 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
157f0 74 72 69 6e 67 20 6c 6f 67 46 69 6c 65 4e 61 6d  tring logFileNam
15800 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
15810 70 75 62 6c 69 63 20 73 74 72 69 6e 67 20 4c 6f  public string Lo
15820 67 46 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20  gFileName..     
15830 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
15840 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20            get { 
15850 72 65 74 75 72 6e 20 6c 6f 67 46 69 6c 65 4e 61  return logFileNa
15860 6d 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  me; }..         
15870 20 20 20 20 20 20 20 73 65 74 20 7b 20 6c 6f 67         set { log
15880 46 69 6c 65 4e 61 6d 65 20 3d 20 76 61 6c 75 65  FileName = value
15890 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
158a0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
158b0 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
158c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
15900 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 72       private str
15910 69 6e 67 20 64 69 72 65 63 74 6f 72 79 3b 0d 0a  ing directory;..
15920 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
15930 69 63 20 73 74 72 69 6e 67 20 44 69 72 65 63 74  ic string Direct
15940 6f 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ory..           
15950 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
15960 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e      get { return
15970 20 64 69 72 65 63 74 6f 72 79 3b 20 7d 0d 0a 20   directory; }.. 
15980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
15990 65 74 20 7b 20 64 69 72 65 63 74 6f 72 79 20 3d  et { directory =
159a0 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20   value; }..     
159b0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
159c0 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
159d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
159e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20  ///////////.... 
15a10 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
15a20 74 65 20 73 74 72 69 6e 67 20 63 6f 72 65 46 69  te string coreFi
15a30 6c 65 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20  leName;..       
15a40 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 72 69       public stri
15a50 6e 67 20 43 6f 72 65 46 69 6c 65 4e 61 6d 65 0d  ng CoreFileName.
15a60 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
15a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15a80 67 65 74 20 7b 20 72 65 74 75 72 6e 20 63 6f 72  get { return cor
15a90 65 46 69 6c 65 4e 61 6d 65 3b 20 7d 0d 0a 20 20  eFileName; }..  
15aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65                se
15ab0 74 20 7b 20 63 6f 72 65 46 69 6c 65 4e 61 6d 65  t { coreFileName
15ac0 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20   = value; }..   
15ad0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
15ae0 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
15af0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15b00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15b10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15b20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
15b30 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
15b40 76 61 74 65 20 73 74 72 69 6e 67 20 6c 69 6e 71  vate string linq
15b50 46 69 6c 65 4e 61 6d 65 3b 0d 0a 20 20 20 20 20  FileName;..     
15b60 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 73 74         public st
15b70 72 69 6e 67 20 4c 69 6e 71 46 69 6c 65 4e 61 6d  ring LinqFileNam
15b80 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  e..            {
15b90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
15ba0 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 6c    get { return l
15bb0 69 6e 71 46 69 6c 65 4e 61 6d 65 3b 20 7d 0d 0a  inqFileName; }..
15bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15bd0 73 65 74 20 7b 20 6c 69 6e 71 46 69 6c 65 4e 61  set { linqFileNa
15be0 6d 65 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20  me = value; }.. 
15bf0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
15c00 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
15c10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15c20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15c30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15c40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
15c50 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
15c60 72 69 76 61 74 65 20 73 74 72 69 6e 67 20 64 65  rivate string de
15c70 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65 3b 0d  signerFileName;.
15c80 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62  .            pub
15c90 6c 69 63 20 73 74 72 69 6e 67 20 44 65 73 69 67  lic string Desig
15ca0 6e 65 72 46 69 6c 65 4e 61 6d 65 0d 0a 20 20 20  nerFileName..   
15cb0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
15cc0 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20              get 
15cd0 7b 20 72 65 74 75 72 6e 20 64 65 73 69 67 6e 65  { return designe
15ce0 72 46 69 6c 65 4e 61 6d 65 3b 20 7d 0d 0a 20 20  rFileName; }..  
15cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65                se
15d00 74 20 7b 20 64 65 73 69 67 6e 65 72 46 69 6c 65  t { designerFile
15d10 4e 61 6d 65 20 3d 20 76 61 6c 75 65 3b 20 7d 0d  Name = value; }.
15d20 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
15d30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
15d40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15d50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15d60 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
15d90 20 70 72 69 76 61 74 65 20 73 74 72 69 6e 67 20   private string 
15da0 74 72 61 63 65 46 6f 72 6d 61 74 3b 0d 0a 20 20  traceFormat;..  
15db0 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69 63            public
15dc0 20 73 74 72 69 6e 67 20 54 72 61 63 65 46 6f 72   string TraceFor
15dd0 6d 61 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20  mat..           
15de0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
15df0 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e      get { return
15e00 20 74 72 61 63 65 46 6f 72 6d 61 74 3b 20 7d 0d   traceFormat; }.
15e10 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
15e20 20 73 65 74 20 7b 20 74 72 61 63 65 46 6f 72 6d   set { traceForm
15e30 61 74 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20  at = value; }.. 
15e40 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
15e50 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
15e60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15e70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15e80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15e90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
15ea0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
15eb0 72 69 76 61 74 65 20 49 6e 73 74 61 6c 6c 46 6c  rivate InstallFl
15ec0 61 67 73 20 69 6e 73 74 61 6c 6c 46 6c 61 67 73  ags installFlags
15ed0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ;..            p
15ee0 75 62 6c 69 63 20 49 6e 73 74 61 6c 6c 46 6c 61  ublic InstallFla
15ef0 67 73 20 49 6e 73 74 61 6c 6c 46 6c 61 67 73 0d  gs InstallFlags.
15f00 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
15f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15f20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 69 6e 73  get { return ins
15f30 74 61 6c 6c 46 6c 61 67 73 3b 20 7d 0d 0a 20 20  tallFlags; }..  
15f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65                se
15f50 74 20 7b 20 69 6e 73 74 61 6c 6c 46 6c 61 67 73  t { installFlags
15f60 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20   = value; }..   
15f70 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
15f80 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
15f90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15fa0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15fb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15fc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
15fd0 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
15fe0 76 61 74 65 20 54 72 61 63 65 50 72 69 6f 72 69  vate TracePriori
15ff0 74 79 20 74 72 61 63 65 50 72 69 6f 72 69 74 79  ty tracePriority
16000 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ;..            p
16010 75 62 6c 69 63 20 54 72 61 63 65 50 72 69 6f 72  ublic TracePrior
16020 69 74 79 20 54 72 61 63 65 50 72 69 6f 72 69 74  ity TracePriorit
16030 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  y..            {
16040 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
16050 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 74    get { return t
16060 72 61 63 65 50 72 69 6f 72 69 74 79 3b 20 7d 0d  racePriority; }.
16070 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
16080 20 73 65 74 20 7b 20 74 72 61 63 65 50 72 69 6f   set { tracePrio
16090 72 69 74 79 20 3d 20 76 61 6c 75 65 3b 20 7d 0d  rity = value; }.
160a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
160b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
160c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
160d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
160e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
160f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16100 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
16110 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 69 6e   private bool in
16120 73 74 61 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20  stall;..        
16130 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20      public bool 
16140 49 6e 73 74 61 6c 6c 0d 0a 20 20 20 20 20 20 20  Install..       
16150 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
16160 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65          get { re
16170 74 75 72 6e 20 69 6e 73 74 61 6c 6c 3b 20 7d 0d  turn install; }.
16180 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
16190 20 73 65 74 20 7b 20 69 6e 73 74 61 6c 6c 20 3d   set { install =
161a0 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20   value; }..     
161b0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
161c0 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
161d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20  ///////////.... 
16210 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
16220 74 65 20 62 6f 6f 6c 20 6e 6f 44 65 73 6b 74 6f  te bool noDeskto
16230 70 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  p;..            
16240 70 75 62 6c 69 63 20 62 6f 6f 6c 20 4e 6f 44 65  public bool NoDe
16250 73 6b 74 6f 70 0d 0a 20 20 20 20 20 20 20 20 20  sktop..         
16260 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
16270 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75        get { retu
16280 72 6e 20 6e 6f 44 65 73 6b 74 6f 70 3b 20 7d 0d  rn noDesktop; }.
16290 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
162a0 20 73 65 74 20 7b 20 6e 6f 44 65 73 6b 74 6f 70   set { noDesktop
162b0 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20   = value; }..   
162c0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
162d0 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
162e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
162f0 2f 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 0d 0a 0d  /////////////...
16320 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
16330 76 61 74 65 20 62 6f 6f 6c 20 6e 6f 43 6f 6d 70  vate bool noComp
16340 61 63 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  act;..          
16350 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 4e 6f    public bool No
16360 43 6f 6d 70 61 63 74 0d 0a 20 20 20 20 20 20 20  Compact..       
16370 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
16380 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65          get { re
16390 74 75 72 6e 20 6e 6f 43 6f 6d 70 61 63 74 3b 20  turn noCompact; 
163a0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
163b0 20 20 20 73 65 74 20 7b 20 6e 6f 43 6f 6d 70 61     set { noCompa
163c0 63 74 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20  ct = value; }.. 
163d0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
163e0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
163f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16400 2f 2f 2f 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 0d  ///////////////.
16430 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
16440 72 69 76 61 74 65 20 62 6f 6f 6c 20 6e 6f 4e 65  rivate bool noNe
16450 74 46 78 32 30 3b 0d 0a 20 20 20 20 20 20 20 20  tFx20;..        
16460 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20      public bool 
16470 4e 6f 4e 65 74 46 78 32 30 0d 0a 20 20 20 20 20  NoNetFx20..     
16480 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
16490 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20            get { 
164a0 72 65 74 75 72 6e 20 6e 6f 4e 65 74 46 78 32 30  return noNetFx20
164b0 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
164c0 20 20 20 20 20 73 65 74 20 7b 20 6e 6f 4e 65 74       set { noNet
164d0 46 78 32 30 20 3d 20 76 61 6c 75 65 3b 20 7d 0d  Fx20 = value; }.
164e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
164f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
16500 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16510 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
16550 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 6e 6f   private bool no
16560 4e 65 74 46 78 34 30 3b 0d 0a 20 20 20 20 20 20  NetFx40;..      
16570 20 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f        public boo
16580 6c 20 4e 6f 4e 65 74 46 78 34 30 0d 0a 20 20 20  l NoNetFx40..   
16590 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
165a0 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20              get 
165b0 7b 20 72 65 74 75 72 6e 20 6e 6f 4e 65 74 46 78  { return noNetFx
165c0 34 30 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  40; }..         
165d0 20 20 20 20 20 20 20 73 65 74 20 7b 20 6e 6f 4e         set { noN
165e0 65 74 46 78 34 30 20 3d 20 76 61 6c 75 65 3b 20  etFx40 = value; 
165f0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
16600 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
16610 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16620 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
16660 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20     private bool 
16670 6e 6f 56 73 32 30 30 38 3b 0d 0a 20 20 20 20 20  noVs2008;..     
16680 20 20 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f         public bo
16690 6f 6c 20 4e 6f 56 73 32 30 30 38 0d 0a 20 20 20  ol NoVs2008..   
166a0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
166b0 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20              get 
166c0 7b 20 72 65 74 75 72 6e 20 6e 6f 56 73 32 30 30  { return noVs200
166d0 38 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  8; }..          
166e0 20 20 20 20 20 20 73 65 74 20 7b 20 6e 6f 56 73        set { noVs
166f0 32 30 30 38 20 3d 20 76 61 6c 75 65 3b 20 7d 0d  2008 = value; }.
16700 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
16710 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
16720 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16730 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
16770 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 6e 6f   private bool no
16780 56 73 32 30 31 30 3b 0d 0a 20 20 20 20 20 20 20  Vs2010;..       
16790 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c       public bool
167a0 20 4e 6f 56 73 32 30 31 30 0d 0a 20 20 20 20 20   NoVs2010..     
167b0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
167c0 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20            get { 
167d0 72 65 74 75 72 6e 20 6e 6f 56 73 32 30 31 30 3b  return noVs2010;
167e0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
167f0 20 20 20 20 73 65 74 20 7b 20 6e 6f 56 73 32 30      set { noVs20
16800 31 30 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20  10 = value; }.. 
16810 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
16820 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
16830 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16840 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d  ///////////////.
16870 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ...            p
16880 72 69 76 61 74 65 20 62 6f 6f 6c 20 6e 6f 54 72  rivate bool noTr
16890 61 63 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ace;..          
168a0 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 4e 6f    public bool No
168b0 54 72 61 63 65 0d 0a 20 20 20 20 20 20 20 20 20  Trace..         
168c0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
168d0 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75        get { retu
168e0 72 6e 20 6e 6f 54 72 61 63 65 3b 20 7d 0d 0a 20  rn noTrace; }.. 
168f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
16900 65 74 20 7b 20 6e 6f 54 72 61 63 65 20 3d 20 76  et { noTrace = v
16910 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20  alue; }..       
16920 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
16930 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
16940 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16950 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16960 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16970 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
16980 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
16990 20 62 6f 6f 6c 20 6e 6f 43 6f 6e 73 6f 6c 65 3b   bool noConsole;
169a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 75  ..            pu
169b0 62 6c 69 63 20 62 6f 6f 6c 20 4e 6f 43 6f 6e 73  blic bool NoCons
169c0 6f 6c 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ole..           
169d0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
169e0 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e      get { return
169f0 20 6e 6f 43 6f 6e 73 6f 6c 65 3b 20 7d 0d 0a 20   noConsole; }.. 
16a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
16a10 65 74 20 7b 20 6e 6f 43 6f 6e 73 6f 6c 65 20 3d  et { noConsole =
16a20 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20   value; }..     
16a30 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
16a40 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
16a50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16a60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16a70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16a80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
16a90 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
16aa0 74 65 20 62 6f 6f 6c 20 6e 6f 4c 6f 67 3b 0d 0a  te bool noLog;..
16ab0 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
16ac0 69 63 20 62 6f 6f 6c 20 4e 6f 4c 6f 67 0d 0a 20  ic bool NoLog.. 
16ad0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
16ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65                ge
16af0 74 20 7b 20 72 65 74 75 72 6e 20 6e 6f 4c 6f 67  t { return noLog
16b00 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
16b10 20 20 20 20 20 73 65 74 20 7b 20 6e 6f 4c 6f 67       set { noLog
16b20 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20   = value; }..   
16b30 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
16b40 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
16b50 2f 2f 2f 2f 2f 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 0d 0a 0d  /////////////...
16b90 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
16ba0 76 61 74 65 20 62 6f 6f 6c 20 77 68 61 74 49 66  vate bool whatIf
16bb0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ;..            p
16bc0 75 62 6c 69 63 20 62 6f 6f 6c 20 57 68 61 74 49  ublic bool WhatI
16bd0 66 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  f..            {
16be0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
16bf0 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 77    get { return w
16c00 68 61 74 49 66 3b 20 7d 0d 0a 20 20 20 20 20 20  hatIf; }..      
16c10 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20            set { 
16c20 77 68 61 74 49 66 20 3d 20 76 61 6c 75 65 3b 20  whatIf = value; 
16c30 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
16c40 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
16c50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
16ca0 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20     private bool 
16cb0 76 65 72 62 6f 73 65 3b 0d 0a 20 20 20 20 20 20  verbose;..      
16cc0 20 20 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f        public boo
16cd0 6c 20 56 65 72 62 6f 73 65 0d 0a 20 20 20 20 20  l Verbose..     
16ce0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
16cf0 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20            get { 
16d00 72 65 74 75 72 6e 20 76 65 72 62 6f 73 65 3b 20  return verbose; 
16d10 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
16d20 20 20 20 73 65 74 20 7b 20 76 65 72 62 6f 73 65     set { verbose
16d30 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20   = value; }..   
16d40 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
16d50 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
16d60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16d70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16d80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16d90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
16da0 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69  .            pri
16db0 76 61 74 65 20 62 6f 6f 6c 20 63 6f 6e 66 69 72  vate bool confir
16dc0 6d 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  m;..            
16dd0 70 75 62 6c 69 63 20 62 6f 6f 6c 20 43 6f 6e 66  public bool Conf
16de0 69 72 6d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  irm..           
16df0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
16e00 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e      get { return
16e10 20 63 6f 6e 66 69 72 6d 3b 20 7d 0d 0a 20 20 20   confirm; }..   
16e20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74               set
16e30 20 7b 20 63 6f 6e 66 69 72 6d 20 3d 20 76 61 6c   { confirm = val
16e40 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  ue; }..         
16e50 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
16e60 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 20 20    #endregion..  
16e70 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
16e80 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
16e90 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
16ea0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16eb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16ec0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16ed0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
16ee0 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f  ..        #regio
16ef0 6e 20 46 72 61 6d 65 77 6f 72 6b 4c 69 73 74 20  n FrameworkList 
16f00 43 6c 61 73 73 0d 0a 20 20 20 20 20 20 20 20 70  Class..        p
16f10 72 69 76 61 74 65 20 73 65 61 6c 65 64 20 63 6c  rivate sealed cl
16f20 61 73 73 20 46 72 61 6d 65 77 6f 72 6b 4c 69 73  ass FrameworkLis
16f30 74 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  t..        {..  
16f40 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f            #regio
16f50 6e 20 50 75 62 6c 69 63 20 43 6f 6e 73 74 72 75  n Public Constru
16f60 63 74 6f 72 73 0d 0a 20 20 20 20 20 20 20 20 20  ctors..         
16f70 20 20 20 70 75 62 6c 69 63 20 46 72 61 6d 65 77     public Framew
16f80 6f 72 6b 4c 69 73 74 28 29 0d 0a 20 20 20 20 20  orkList()..     
16f90 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
16fa0 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20            // do 
16fb0 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20  nothing...      
16fc0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
16fd0 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
16fe0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
16ff0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17000 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17010 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17020 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17030 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
17040 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c 69 63    #region Public
17050 20 4d 65 74 68 6f 64 73 0d 0a 20 20 20 20 20 20   Methods..      
17060 20 20 20 20 20 20 70 72 69 76 61 74 65 20 52 65        private Re
17070 67 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65  gistryKey rootKe
17080 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y;..            
17090 70 75 62 6c 69 63 20 52 65 67 69 73 74 72 79 4b  public RegistryK
170a0 65 79 20 52 6f 6f 74 4b 65 79 0d 0a 20 20 20 20  ey RootKey..    
170b0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
170c0 20 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b             get {
170d0 20 72 65 74 75 72 6e 20 72 6f 6f 74 4b 65 79 3b   return rootKey;
170e0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
170f0 20 20 20 20 73 65 74 20 7b 20 72 6f 6f 74 4b 65      set { rootKe
17100 79 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20  y = value; }..  
17110 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
17120 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
17130 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a  //////////////..
17170 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 72  ..            pr
17180 69 76 61 74 65 20 53 74 72 69 6e 67 4c 69 73 74  ivate StringList
17190 20 6e 61 6d 65 73 3b 0d 0a 20 20 20 20 20 20 20   names;..       
171a0 20 20 20 20 20 70 75 62 6c 69 63 20 53 74 72 69       public Stri
171b0 6e 67 4c 69 73 74 20 4e 61 6d 65 73 0d 0a 20 20  ngList Names..  
171c0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
171d0 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74               get
171e0 20 7b 20 72 65 74 75 72 6e 20 6e 61 6d 65 73 3b   { return names;
171f0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
17200 20 20 20 20 73 65 74 20 7b 20 6e 61 6d 65 73 20      set { names 
17210 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20  = value; }..    
17220 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
17230 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
17240 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17250 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17260 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17270 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
17280 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76              priv
17290 61 74 65 20 56 65 72 73 69 6f 6e 4d 61 70 20 76  ate VersionMap v
172a0 65 72 73 69 6f 6e 73 3b 0d 0a 20 20 20 20 20 20  ersions;..      
172b0 20 20 20 20 20 20 70 75 62 6c 69 63 20 56 65 72        public Ver
172c0 73 69 6f 6e 4d 61 70 20 56 65 72 73 69 6f 6e 73  sionMap Versions
172d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
172e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
172f0 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 76 65   get { return ve
17300 72 73 69 6f 6e 73 3b 20 7d 0d 0a 20 20 20 20 20  rsions; }..     
17310 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b             set {
17320 20 76 65 72 73 69 6f 6e 73 20 3d 20 76 61 6c 75   versions = valu
17330 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  e; }..          
17340 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
17350 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
17360 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17370 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17380 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17390 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
173a0 20 20 20 20 20 20 70 72 69 76 61 74 65 20 53 74        private St
173b0 72 69 6e 67 4c 69 73 74 20 70 6c 61 74 66 6f 72  ringList platfor
173c0 6d 4e 61 6d 65 73 3b 0d 0a 20 20 20 20 20 20 20  mNames;..       
173d0 20 20 20 20 20 70 75 62 6c 69 63 20 53 74 72 69       public Stri
173e0 6e 67 4c 69 73 74 20 50 6c 61 74 66 6f 72 6d 4e  ngList PlatformN
173f0 61 6d 65 73 0d 0a 20 20 20 20 20 20 20 20 20 20  ames..          
17400 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
17410 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72       get { retur
17420 6e 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 73 3b  n platformNames;
17430 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
17440 20 20 20 20 73 65 74 20 7b 20 70 6c 61 74 66 6f      set { platfo
17450 72 6d 4e 61 6d 65 73 20 3d 20 76 61 6c 75 65 3b  rmNames = value;
17460 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
17470 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  }..            #
17480 65 6e 64 72 65 67 69 6f 6e 0d 0a 20 20 20 20 20  endregion..     
17490 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65     }..        #e
174a0 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
174b0 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
174c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
174d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
174e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
174f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
17500 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 56         #region V
17510 73 4c 69 73 74 20 43 6c 61 73 73 0d 0a 20 20 20  sList Class..   
17520 20 20 20 20 20 70 72 69 76 61 74 65 20 73 65 61       private sea
17530 6c 65 64 20 63 6c 61 73 73 20 56 73 4c 69 73 74  led class VsList
17540 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
17550 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e           #region
17560 20 50 75 62 6c 69 63 20 43 6f 6e 73 74 72 75 63   Public Construc
17570 74 6f 72 73 0d 0a 20 20 20 20 20 20 20 20 20 20  tors..          
17580 20 20 70 75 62 6c 69 63 20 56 73 4c 69 73 74 28    public VsList(
17590 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
175a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
175b0 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e    // do nothing.
175c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
175d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e  .            #en
175e0 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
175f0 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
17600 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17610 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17620 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17630 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
17640 20 20 20 20 20 20 20 20 20 20 23 72 65 67 69 6f            #regio
17650 6e 20 50 75 62 6c 69 63 20 50 72 6f 70 65 72 74  n Public Propert
17660 69 65 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ies..           
17670 20 70 72 69 76 61 74 65 20 52 65 67 69 73 74 72   private Registr
17680 79 4b 65 79 20 72 6f 6f 74 4b 65 79 3b 0d 0a 20  yKey rootKey;.. 
17690 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
176a0 63 20 52 65 67 69 73 74 72 79 4b 65 79 20 52 6f  c RegistryKey Ro
176b0 6f 74 4b 65 79 0d 0a 20 20 20 20 20 20 20 20 20  otKey..         
176c0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
176d0 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75        get { retu
176e0 72 6e 20 72 6f 6f 74 4b 65 79 3b 20 7d 0d 0a 20  rn rootKey; }.. 
176f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
17700 65 74 20 7b 20 72 6f 6f 74 4b 65 79 20 3d 20 76  et { rootKey = v
17710 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 20  alue; }..       
17720 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
17730 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
17740 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17750 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20  /////////....   
17780 20 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65           private
17790 20 56 65 72 73 69 6f 6e 4c 69 73 74 20 76 65 72   VersionList ver
177a0 73 69 6f 6e 73 3b 0d 0a 20 20 20 20 20 20 20 20  sions;..        
177b0 20 20 20 20 70 75 62 6c 69 63 20 56 65 72 73 69      public Versi
177c0 6f 6e 4c 69 73 74 20 56 65 72 73 69 6f 6e 73 0d  onList Versions.
177d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
177e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
177f0 67 65 74 20 7b 20 72 65 74 75 72 6e 20 76 65 72  get { return ver
17800 73 69 6f 6e 73 3b 20 7d 0d 0a 20 20 20 20 20 20  sions; }..      
17810 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20            set { 
17820 76 65 72 73 69 6f 6e 73 20 3d 20 76 61 6c 75 65  versions = value
17830 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ; }..           
17840 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
17850 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
17860 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17870 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17880 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17890 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
178a0 20 20 20 20 20 70 72 69 76 61 74 65 20 56 65 72       private Ver
178b0 73 69 6f 6e 4c 69 73 74 4d 61 70 20 66 72 61 6d  sionListMap fram
178c0 65 77 6f 72 6b 56 65 72 73 69 6f 6e 73 3b 0d 0a  eworkVersions;..
178d0 20 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c              publ
178e0 69 63 20 56 65 72 73 69 6f 6e 4c 69 73 74 4d 61  ic VersionListMa
178f0 70 20 46 72 61 6d 65 77 6f 72 6b 56 65 72 73 69  p FrameworkVersi
17900 6f 6e 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ons..           
17910 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
17920 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e      get { return
17930 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f   frameworkVersio
17940 6e 73 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  ns; }..         
17950 20 20 20 20 20 20 20 73 65 74 20 7b 20 66 72 61         set { fra
17960 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 73 20 3d  meworkVersions =
17970 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20   value; }..     
17980 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
17990 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
179a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
179b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
179c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
179d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
179e0 20 20 20 20 20 20 20 20 20 20 20 70 72 69 76 61             priva
179f0 74 65 20 56 65 72 73 69 6f 6e 4c 69 73 74 20 69  te VersionList i
17a00 6e 73 74 61 6c 6c 65 64 56 65 72 73 69 6f 6e 73  nstalledVersions
17a10 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70  ;..            p
17a20 75 62 6c 69 63 20 56 65 72 73 69 6f 6e 4c 69 73  ublic VersionLis
17a30 74 20 49 6e 73 74 61 6c 6c 65 64 56 65 72 73 69  t InstalledVersi
17a40 6f 6e 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ons..           
17a50 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
17a60 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e      get { return
17a70 20 69 6e 73 74 61 6c 6c 65 64 56 65 72 73 69 6f   installedVersio
17a80 6e 73 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20  ns; }..         
17a90 20 20 20 20 20 20 20 73 65 74 20 7b 20 69 6e 73         set { ins
17aa0 74 61 6c 6c 65 64 56 65 72 73 69 6f 6e 73 20 3d  talledVersions =
17ab0 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20   value; }..     
17ac0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
17ad0 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
17ae0 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
17af0 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
17b00 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67  .        #endreg
17b10 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  ion....        /
17b20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17b30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17b40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17b50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17b60 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
17b70 20 20 23 72 65 67 69 6f 6e 20 50 72 69 76 61 74    #region Privat
17b80 65 20 43 6f 6e 73 74 61 6e 74 20 44 61 74 61 0d  e Constant Data.
17b90 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
17ba0 20 63 6f 6e 73 74 20 73 74 72 69 6e 67 20 43 6f   const string Co
17bb0 72 65 46 69 6c 65 4e 61 6d 65 20 3d 20 22 53 79  reFileName = "Sy
17bc0 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65  stem.Data.SQLite
17bd0 2e 64 6c 6c 22 3b 0d 0a 20 20 20 20 20 20 20 20  .dll";..        
17be0 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20 73 74  private const st
17bf0 72 69 6e 67 20 4c 69 6e 71 46 69 6c 65 4e 61 6d  ring LinqFileNam
17c00 65 20 3d 20 22 53 79 73 74 65 6d 2e 44 61 74 61  e = "System.Data
17c10 2e 53 51 4c 69 74 65 2e 4c 69 6e 71 2e 64 6c 6c  .SQLite.Linq.dll
17c20 22 3b 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  ";..        priv
17c30 61 74 65 20 63 6f 6e 73 74 20 73 74 72 69 6e 67  ate const string
17c40 20 44 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d   DesignerFileNam
17c50 65 20 3d 20 22 53 51 4c 69 74 65 2e 44 65 73 69  e = "SQLite.Desi
17c60 67 6e 65 72 2e 64 6c 6c 22 3b 0d 0a 20 20 20 20  gner.dll";..    
17c70 20 20 20 20 70 72 69 76 61 74 65 20 63 6f 6e 73      private cons
17c80 74 20 73 74 72 69 6e 67 20 50 72 6f 76 69 64 65  t string Provide
17c90 72 4e 61 6d 65 20 3d 20 22 53 51 4c 69 74 65 20  rName = "SQLite 
17ca0 44 61 74 61 20 50 72 6f 76 69 64 65 72 22 3b 0d  Data Provider";.
17cb0 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
17cc0 20 63 6f 6e 73 74 20 73 74 72 69 6e 67 20 50 72   const string Pr
17cd0 6f 6a 65 63 74 4e 61 6d 65 20 3d 20 22 53 79 73  ojectName = "Sys
17ce0 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 22  tem.Data.SQLite"
17cf0 3b 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  ;..        priva
17d00 74 65 20 63 6f 6e 73 74 20 73 74 72 69 6e 67 20  te const string 
17d10 4c 65 67 61 63 79 50 72 6f 6a 65 63 74 4e 61 6d  LegacyProjectNam
17d20 65 20 3d 20 22 53 51 4c 69 74 65 22 3b 0d 0a 20  e = "SQLite";.. 
17d30 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 63         private c
17d40 6f 6e 73 74 20 73 74 72 69 6e 67 20 49 6e 76 61  onst string Inva
17d50 72 69 61 6e 74 4e 61 6d 65 20 3d 20 22 53 79 73  riantName = "Sys
17d60 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 22  tem.Data.SQLite"
17d70 3b 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  ;..        priva
17d80 74 65 20 63 6f 6e 73 74 20 73 74 72 69 6e 67 20  te const string 
17d90 46 61 63 74 6f 72 79 54 79 70 65 4e 61 6d 65 20  FactoryTypeName 
17da0 3d 20 22 53 79 73 74 65 6d 2e 44 61 74 61 2e 53  = "System.Data.S
17db0 51 4c 69 74 65 2e 53 51 4c 69 74 65 46 61 63 74  QLite.SQLiteFact
17dc0 6f 72 79 22 3b 0d 0a 20 20 20 20 20 20 20 20 70  ory";..        p
17dd0 72 69 76 61 74 65 20 63 6f 6e 73 74 20 73 74 72  rivate const str
17de0 69 6e 67 20 44 65 73 63 72 69 70 74 69 6f 6e 20  ing Description 
17df0 3d 20 22 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72  = ".NET Framewor
17e00 6b 20 44 61 74 61 20 50 72 6f 76 69 64 65 72 20  k Data Provider 
17e10 66 6f 72 20 53 51 4c 69 74 65 22 3b 0d 0a 0d 0a  for SQLite";....
17e20 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17e60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
17e70 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  ...        priva
17e80 74 65 20 63 6f 6e 73 74 20 73 74 72 69 6e 67 20  te const string 
17e90 43 4c 52 32 49 6d 61 67 65 52 75 6e 74 69 6d 65  CLR2ImageRuntime
17ea0 56 65 72 73 69 6f 6e 20 3d 20 22 76 32 2e 30 2e  Version = "v2.0.
17eb0 35 30 37 32 37 22 3b 0d 0a 20 20 20 20 20 20 20  50727";..       
17ec0 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20 73   private const s
17ed0 74 72 69 6e 67 20 43 4c 52 34 49 6d 61 67 65 52  tring CLR4ImageR
17ee0 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 20 3d 20  untimeVersion = 
17ef0 22 76 34 2e 30 2e 33 30 33 31 39 22 3b 0d 0a 0d  "v4.0.30319";...
17f00 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
17f10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17f20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17f30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17f40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17f50 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  ....        priv
17f60 61 74 65 20 63 6f 6e 73 74 20 73 74 72 69 6e 67  ate const string
17f70 20 4e 61 6d 65 41 6e 64 56 61 6c 75 65 46 6f 72   NameAndValueFor
17f80 6d 61 74 20 3d 20 22 7b 30 7d 3a 20 7b 31 7d 22  mat = "{0}: {1}"
17f90 3b 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  ;..        priva
17fa0 74 65 20 63 6f 6e 73 74 20 73 74 72 69 6e 67 20  te const string 
17fb0 4c 6f 67 46 69 6c 65 53 75 66 66 69 78 20 3d 20  LogFileSuffix = 
17fc0 22 2e 6c 6f 67 22 3b 0d 0a 0d 0a 20 20 20 20 20  ".log";....     
17fd0 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
17fe0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17ff0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18000 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18010 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
18020 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74        private st
18030 61 74 69 63 20 72 65 61 64 6f 6e 6c 79 20 73 74  atic readonly st
18040 72 69 6e 67 20 56 73 49 64 46 6f 72 6d 61 74 20  ring VsIdFormat 
18050 3d 20 22 42 22 3b 0d 0a 0d 0a 20 20 20 20 20 20  = "B";....      
18060 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
18070 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18080 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18090 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
180a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
180b0 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61       private sta
180c0 74 69 63 20 72 65 61 64 6f 6e 6c 79 20 73 74 72  tic readonly str
180d0 69 6e 67 20 46 72 61 6d 65 77 6f 72 6b 4b 65 79  ing FrameworkKey
180e0 4e 61 6d 65 20 3d 0d 0a 20 20 20 20 20 20 20 20  Name =..        
180f0 20 20 20 20 22 53 6f 66 74 77 61 72 65 5c 5c 4d      "Software\\M
18100 69 63 72 6f 73 6f 66 74 5c 5c 2e 4e 45 54 46 72  icrosoft\\.NETFr
18110 61 6d 65 77 6f 72 6b 22 3b 0d 0a 0d 0a 20 20 20  amework";....   
18120 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18150 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18160 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
18170 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
18180 73 74 61 74 69 63 20 72 65 61 64 6f 6e 6c 79 20  static readonly 
18190 73 74 72 69 6e 67 20 46 72 61 6d 65 77 6f 72 6b  string Framework
181a0 53 64 6b 4b 65 79 4e 61 6d 65 20 3d 0d 0a 20 20  SdkKeyName =..  
181b0 20 20 20 20 20 20 20 20 20 20 22 53 6f 66 74 77            "Softw
181c0 61 72 65 5c 5c 4d 69 63 72 6f 73 6f 66 74 5c 5c  are\\Microsoft\\
181d0 4d 69 63 72 6f 73 6f 66 74 20 53 44 4b 73 5c 5c  Microsoft SDKs\\
181e0 2e 4e 45 54 46 72 61 6d 65 77 6f 72 6b 22 3b 0d  .NETFramework";.
181f0 0a 0d 0a 20 20 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18220 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18230 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18240 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72  //....        pr
18250 69 76 61 74 65 20 73 74 61 74 69 63 20 72 65 61  ivate static rea
18260 64 6f 6e 6c 79 20 73 74 72 69 6e 67 20 57 69 6e  donly string Win
18270 64 6f 77 73 53 64 6b 4b 65 79 4e 61 6d 65 20 3d  dowsSdkKeyName =
18280 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 53  ..            "S
18290 6f 66 74 77 61 72 65 5c 5c 4d 69 63 72 6f 73 6f  oftware\\Microso
182a0 66 74 5c 5c 4d 69 63 72 6f 73 6f 66 74 20 53 44  ft\\Microsoft SD
182b0 4b 73 5c 5c 57 69 6e 64 6f 77 73 22 3b 0d 0a 0d  Ks\\Windows";...
182c0 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
182d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
182e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
182f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18300 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18310 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  ....        priv
18320 61 74 65 20 73 74 61 74 69 63 20 72 65 61 64 6f  ate static reado
18330 6e 6c 79 20 73 74 72 69 6e 67 20 58 50 61 74 68  nly string XPath
18340 46 6f 72 41 64 64 45 6c 65 6d 65 6e 74 20 3d 0d  ForAddElement =.
18350 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 63 6f  .            "co
18360 6e 66 69 67 75 72 61 74 69 6f 6e 2f 73 79 73 74  nfiguration/syst
18370 65 6d 2e 64 61 74 61 2f 44 62 50 72 6f 76 69 64  em.data/DbProvid
18380 65 72 46 61 63 74 6f 72 69 65 73 2f 61 64 64 5b  erFactories/add[
18390 40 69 6e 76 61 72 69 61 6e 74 3d 5c 22 7b 30 7d  @invariant=\"{0}
183a0 5c 22 5d 22 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  \"]";....       
183b0 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
183c0 72 65 61 64 6f 6e 6c 79 20 73 74 72 69 6e 67 20  readonly string 
183d0 58 50 61 74 68 46 6f 72 52 65 6d 6f 76 65 45 6c  XPathForRemoveEl
183e0 65 6d 65 6e 74 20 3d 0d 0a 20 20 20 20 20 20 20  ement =..       
183f0 20 20 20 20 20 22 63 6f 6e 66 69 67 75 72 61 74       "configurat
18400 69 6f 6e 2f 73 79 73 74 65 6d 2e 64 61 74 61 2f  ion/system.data/
18410 44 62 50 72 6f 76 69 64 65 72 46 61 63 74 6f 72  DbProviderFactor
18420 69 65 73 2f 72 65 6d 6f 76 65 5b 40 69 6e 76 61  ies/remove[@inva
18430 72 69 61 6e 74 3d 5c 22 7b 30 7d 5c 22 5d 22 3b  riant=\"{0}\"]";
18440 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65  ..        #endre
18450 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
18460 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18470 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18480 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18490 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
184a0 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
184b0 20 20 20 23 72 65 67 69 6f 6e 20 50 72 69 76 61     #region Priva
184c0 74 65 20 44 61 74 61 0d 0a 20 20 20 20 20 20 20  te Data..       
184d0 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
184e0 41 73 73 65 6d 62 6c 79 20 74 68 69 73 41 73 73  Assembly thisAss
184f0 65 6d 62 6c 79 20 3d 20 41 73 73 65 6d 62 6c 79  embly = Assembly
18500 2e 47 65 74 45 78 65 63 75 74 69 6e 67 41 73 73  .GetExecutingAss
18510 65 6d 62 6c 79 28 29 3b 0d 0a 0d 0a 20 20 20 20  embly();....    
18520 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74      private stat
18530 69 63 20 73 74 72 69 6e 67 20 74 72 61 63 65 43  ic string traceC
18540 61 74 65 67 6f 72 79 20 3d 20 50 61 74 68 2e 47  ategory = Path.G
18550 65 74 46 69 6c 65 4e 61 6d 65 28 0d 0a 20 20 20  etFileName(..   
18560 20 20 20 20 20 20 20 20 20 74 68 69 73 41 73 73           thisAss
18570 65 6d 62 6c 79 2e 4c 6f 63 61 74 69 6f 6e 29 3b  embly.Location);
18580 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  ....        priv
18590 61 74 65 20 73 74 61 74 69 63 20 54 72 61 63 65  ate static Trace
185a0 43 61 6c 6c 62 61 63 6b 20 74 72 61 63 65 43 61  Callback traceCa
185b0 6c 6c 62 61 63 6b 20 3d 20 41 70 70 54 72 61 63  llback = AppTrac
185c0 65 3b 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64  e;..        #end
185d0 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
185e0 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
185f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18600 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18610 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18620 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
18630 20 20 20 20 20 23 72 65 67 69 6f 6e 20 54 72 61       #region Tra
18640 63 65 20 48 61 6e 64 6c 69 6e 67 0d 0a 20 20 20  ce Handling..   
18650 20 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61       private sta
18660 74 69 63 20 73 74 72 69 6e 67 20 47 65 74 4c 6f  tic string GetLo
18670 67 46 69 6c 65 4e 61 6d 65 28 29 0d 0a 20 20 20  gFileName()..   
18680 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
18690 20 20 20 20 73 74 72 69 6e 67 20 72 65 73 75 6c      string resul
186a0 74 20 3d 20 50 61 74 68 2e 47 65 74 54 65 6d 70  t = Path.GetTemp
186b0 46 69 6c 65 4e 61 6d 65 28 29 3b 20 2f 2a 20 74  FileName(); /* t
186c0 68 72 6f 77 20 2a 2f 0d 0a 0d 0a 20 20 20 20 20  hrow */....     
186d0 20 20 20 20 20 20 20 46 69 6c 65 2e 4d 6f 76 65         File.Move
186e0 28 72 65 73 75 6c 74 2c 20 72 65 73 75 6c 74 20  (result, result 
186f0 2b 20 4c 6f 67 46 69 6c 65 53 75 66 66 69 78 29  + LogFileSuffix)
18700 3b 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 20  ; /* throw */.. 
18710 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75 6c             resul
18720 74 20 2b 3d 20 4c 6f 67 46 69 6c 65 53 75 66 66  t += LogFileSuff
18730 69 78 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ix;....         
18740 20 20 20 72 65 74 75 72 6e 20 72 65 73 75 6c 74     return result
18750 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  ;..        }....
18760 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
18770 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18780 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18790 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
187a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
187b0 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  ...        priva
187c0 74 65 20 73 74 61 74 69 63 20 76 6f 69 64 20 41  te static void A
187d0 70 70 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20  ppTrace(..      
187e0 20 20 20 20 20 20 73 74 72 69 6e 67 20 6d 65 73        string mes
187f0 73 61 67 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  sage,..         
18800 20 20 20 73 74 72 69 6e 67 20 63 61 74 65 67 6f     string catego
18810 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ry..            
18820 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
18830 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f            TraceO
18840 70 73 2e 54 72 61 63 65 43 6f 72 65 28 53 74 72  ps.TraceCore(Str
18850 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
18860 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
18870 63 65 4f 70 73 2e 54 72 61 63 65 46 6f 72 6d 61  ceOps.TraceForma
18880 74 2c 20 54 72 61 63 65 4f 70 73 2e 4e 65 78 74  t, TraceOps.Next
18890 49 64 28 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  Id(),..         
188a0 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e         TraceOps.
188b0 54 69 6d 65 53 74 61 6d 70 28 44 61 74 65 54 69  TimeStamp(DateTi
188c0 6d 65 2e 55 74 63 4e 6f 77 29 2c 20 6d 65 73 73  me.UtcNow), mess
188d0 61 67 65 29 2c 20 63 61 74 65 67 6f 72 79 29 3b  age), category);
188e0 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
188f0 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d       #endregion.
18900 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
18910 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18920 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18930 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18940 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18950 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72  //....        #r
18960 65 67 69 6f 6e 20 47 65 6e 65 72 69 63 20 53 74  egion Generic St
18970 72 69 6e 67 20 48 61 6e 64 6c 69 6e 67 0d 0a 20  ring Handling.. 
18980 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
18990 74 61 74 69 63 20 73 74 72 69 6e 67 20 46 6f 72  tatic string For
189a0 44 69 73 70 6c 61 79 28 0d 0a 20 20 20 20 20 20  Display(..      
189b0 20 20 20 20 20 20 6f 62 6a 65 63 74 20 76 61 6c        object val
189c0 75 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ue..            
189d0 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
189e0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76 61            if (va
189f0 6c 75 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  lue == null)..  
18a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
18a10 74 75 72 6e 20 22 3c 6e 75 6c 6c 3e 22 3b 0d 0a  turn "<null>";..
18a20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
18a30 72 69 6e 67 20 72 65 73 75 6c 74 3b 0d 0a 20 20  ring result;..  
18a40 20 20 20 20 20 20 20 20 20 20 54 79 70 65 20 74            Type t
18a50 79 70 65 20 3d 20 76 61 6c 75 65 2e 47 65 74 54  ype = value.GetT
18a60 79 70 65 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ype();....      
18a70 20 20 20 20 20 20 69 66 20 28 74 79 70 65 20 3d        if (type =
18a80 3d 20 74 79 70 65 6f 66 28 58 6d 6c 45 6c 65 6d  = typeof(XmlElem
18a90 65 6e 74 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ent))..         
18aa0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
18ab0 20 20 20 20 20 20 58 6d 6c 45 6c 65 6d 65 6e 74        XmlElement
18ac0 20 65 6c 65 6d 65 6e 74 20 3d 20 28 58 6d 6c 45   element = (XmlE
18ad0 6c 65 6d 65 6e 74 29 76 61 6c 75 65 3b 0d 0a 0d  lement)value;...
18ae0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
18af0 20 72 65 73 75 6c 74 20 3d 20 65 6c 65 6d 65 6e   result = elemen
18b00 74 2e 4f 75 74 65 72 58 6d 6c 3b 0d 0a 20 20 20  t.OuterXml;..   
18b10 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
18b20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20          else if 
18b30 28 74 79 70 65 20 3d 3d 20 74 79 70 65 6f 66 28  (type == typeof(
18b40 56 65 72 73 69 6f 6e 29 29 0d 0a 20 20 20 20 20  Version))..     
18b50 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
18b60 20 20 20 20 20 20 20 20 20 20 56 65 72 73 69 6f            Versio
18b70 6e 20 76 65 72 73 69 6f 6e 20 3d 20 28 56 65 72  n version = (Ver
18b80 73 69 6f 6e 29 76 61 6c 75 65 3b 0d 0a 0d 0a 20  sion)value;.... 
18b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
18ba0 65 73 75 6c 74 20 3d 20 53 74 72 69 6e 67 2e 46  esult = String.F
18bb0 6f 72 6d 61 74 28 22 76 7b 30 7d 22 2c 20 76 65  ormat("v{0}", ve
18bc0 72 73 69 6f 6e 29 3b 0d 0a 20 20 20 20 20 20 20  rsion);..       
18bd0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
18be0 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20      else..      
18bf0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
18c00 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 20           result 
18c10 3d 20 76 61 6c 75 65 2e 54 6f 53 74 72 69 6e 67  = value.ToString
18c20 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ();....         
18c30 20 20 20 20 20 20 20 69 66 20 28 72 65 73 75 6c         if (resul
18c40 74 2e 4c 65 6e 67 74 68 20 3d 3d 20 30 29 0d 0a  t.Length == 0)..
18c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18c60 20 20 20 20 72 65 74 75 72 6e 20 22 3c 65 6d 70      return "<emp
18c70 74 79 3e 22 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ty>";....       
18c80 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 20           result 
18c90 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  = String.Format(
18ca0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
18cb0 20 20 20 20 20 20 74 79 70 65 2e 49 73 53 75 62        type.IsSub
18cc0 63 6c 61 73 73 4f 66 28 74 79 70 65 6f 66 28 56  classOf(typeof(V
18cd0 61 6c 75 65 54 79 70 65 29 29 20 3f 20 22 7b 30  alueType)) ? "{0
18ce0 7d 22 20 3a 20 22 5c 22 7b 30 7d 5c 22 22 2c 0d  }" : "\"{0}\"",.
18cf0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
18d00 20 20 20 20 20 72 65 73 75 6c 74 29 3b 0d 0a 20       result);.. 
18d10 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
18d20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
18d30 72 6e 20 72 65 73 75 6c 74 3b 0d 0a 20 20 20 20  rn result;..    
18d40 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23      }..        #
18d50 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
18d60 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
18d70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18d80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18d90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18da0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
18db0 20 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20          #region 
18dc0 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b 20 48  .NET Framework H
18dd0 61 6e 64 6c 69 6e 67 0d 0a 20 20 20 20 20 20 20  andling..       
18de0 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
18df0 73 74 72 69 6e 67 20 47 65 74 49 6d 61 67 65 52  string GetImageR
18e00 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 28 0d 0a  untimeVersion(..
18e10 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
18e20 6e 67 20 66 69 6c 65 4e 61 6d 65 0d 0a 20 20 20  ng fileName..   
18e30 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
18e40 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
18e50 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20     try..        
18e60 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
18e70 20 20 20 20 20 20 20 41 73 73 65 6d 62 6c 79 20         Assembly 
18e80 61 73 73 65 6d 62 6c 79 20 3d 0d 0a 20 20 20 20  assembly =..    
18e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18ea0 41 73 73 65 6d 62 6c 79 2e 52 65 66 6c 65 63 74  Assembly.Reflect
18eb0 69 6f 6e 4f 6e 6c 79 4c 6f 61 64 46 72 6f 6d 28  ionOnlyLoadFrom(
18ec0 66 69 6c 65 4e 61 6d 65 29 3b 20 2f 2a 20 74 68  fileName); /* th
18ed0 72 6f 77 20 2a 2f 0d 0a 0d 0a 20 20 20 20 20 20  row */....      
18ee0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 61 73            if (as
18ef0 73 65 6d 62 6c 79 20 21 3d 20 6e 75 6c 6c 29 0d  sembly != null).
18f00 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
18f10 20 20 20 20 20 72 65 74 75 72 6e 20 61 73 73 65       return asse
18f20 6d 62 6c 79 2e 49 6d 61 67 65 52 75 6e 74 69 6d  mbly.ImageRuntim
18f30 65 56 65 72 73 69 6f 6e 3b 0d 0a 20 20 20 20 20  eVersion;..     
18f40 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
18f50 20 20 20 20 20 20 63 61 74 63 68 0d 0a 20 20 20        catch..   
18f60 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
18f70 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64              // d
18f80 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20  o nothing...    
18f90 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
18fa0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
18fb0 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 7d  null;..        }
18fc0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f  ....        ////
18fd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18fe0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18ff0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19000 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19010 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70  ///....        p
19020 72 69 76 61 74 65 20 73 74 61 74 69 63 20 73 74  rivate static st
19030 72 69 6e 67 20 47 65 74 46 72 61 6d 65 77 6f 72  ring GetFramewor
19040 6b 44 69 72 65 63 74 6f 72 79 28 0d 0a 20 20 20  kDirectory(..   
19050 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72           Registr
19060 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20  yKey rootKey,.. 
19070 20 20 20 20 20 20 20 20 20 20 20 56 65 72 73 69             Versi
19080 6f 6e 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73  on frameworkVers
19090 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ion,..          
190a0 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a    bool whatIf,..
190b0 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c              bool
190c0 20 76 65 72 62 6f 73 65 0d 0a 20 20 20 20 20 20   verbose..      
190d0 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
190e0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
190f0 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73  using (MockRegis
19100 74 72 79 4b 65 79 20 6b 65 79 20 3d 20 52 65 67  tryKey key = Reg
19110 69 73 74 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e  istryHelper.Open
19120 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20  SubKey(..       
19130 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f               roo
19140 74 4b 65 79 2c 20 46 72 61 6d 65 77 6f 72 6b 4b  tKey, FrameworkK
19150 65 79 4e 61 6d 65 2c 20 66 61 6c 73 65 2c 20 77  eyName, false, w
19160 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 29  hatIf, verbose))
19170 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
19180 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
19190 20 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c   if (key == null
191a0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
191b0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75         return nu
191c0 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ll;....         
191d0 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 76 61         object va
191e0 6c 75 65 20 3d 20 52 65 67 69 73 74 72 79 48 65  lue = RegistryHe
191f0 6c 70 65 72 2e 47 65 74 56 61 6c 75 65 28 0d 0a  lper.GetValue(..
19200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19210 20 20 20 20 6b 65 79 2c 20 22 49 6e 73 74 61 6c      key, "Instal
19220 6c 52 6f 6f 74 22 2c 20 6e 75 6c 6c 2c 20 77 68  lRoot", null, wh
19230 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d  atIf, verbose);.
19240 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
19250 20 20 20 69 66 20 28 21 28 76 61 6c 75 65 20 69     if (!(value i
19260 73 20 73 74 72 69 6e 67 29 29 0d 0a 20 20 20 20  s string))..    
19270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19280 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a  return null;....
19290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
192a0 72 65 74 75 72 6e 20 50 61 74 68 2e 43 6f 6d 62  return Path.Comb
192b0 69 6e 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ine(..          
192c0 20 20 20 20 20 20 20 20 20 20 28 73 74 72 69 6e            (strin
192d0 67 29 76 61 6c 75 65 2c 20 53 74 72 69 6e 67 2e  g)value, String.
192e0 46 6f 72 6d 61 74 28 22 76 7b 30 7d 22 2c 20 66  Format("v{0}", f
192f0 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 29  rameworkVersion)
19300 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
19310 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  }..        }....
19320 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
19330 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19340 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19350 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19360 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
19370 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  ...        priva
19380 74 65 20 73 74 61 74 69 63 20 73 74 72 69 6e 67  te static string
19390 20 47 65 74 53 64 6b 42 69 6e 61 72 79 46 69 6c   GetSdkBinaryFil
193a0 65 4e 61 6d 65 28 0d 0a 20 20 20 20 20 20 20 20  eName(..        
193b0 20 20 20 20 52 65 67 69 73 74 72 79 4b 65 79 20      RegistryKey 
193c0 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20  rootKey,..      
193d0 20 20 20 20 20 20 73 74 72 69 6e 67 20 66 69 6c        string fil
193e0 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20  eName,..        
193f0 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c      bool whatIf,
19400 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
19410 6f 6c 20 76 65 72 62 6f 73 65 0d 0a 20 20 20 20  ol verbose..    
19420 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
19430 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
19440 20 20 53 74 72 69 6e 67 44 69 63 74 69 6f 6e 61    StringDictiona
19450 72 79 20 72 65 73 75 6c 74 73 20 3d 20 6e 65 77  ry results = new
19460 20 53 74 72 69 6e 67 44 69 63 74 69 6f 6e 61 72   StringDictionar
19470 79 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  y();....        
19480 20 20 20 20 73 74 72 69 6e 67 5b 5d 20 6b 65 79      string[] key
19490 4e 61 6d 65 73 20 3d 20 7b 0d 0a 20 20 20 20 20  Names = {..     
194a0 20 20 20 20 20 20 20 20 20 20 20 46 72 61 6d 65             Frame
194b0 77 6f 72 6b 4b 65 79 4e 61 6d 65 2c 0d 0a 20 20  workKeyName,..  
194c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46 72                Fr
194d0 61 6d 65 77 6f 72 6b 53 64 6b 4b 65 79 4e 61 6d  ameworkSdkKeyNam
194e0 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
194f0 20 20 20 20 57 69 6e 64 6f 77 73 53 64 6b 4b 65      WindowsSdkKe
19500 79 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 20  yName..         
19510 20 20 20 7d 3b 0d 0a 0d 0a 20 20 20 20 20 20 20     };....       
19520 20 20 20 20 20 73 74 72 69 6e 67 5b 5d 20 76 61       string[] va
19530 6c 75 65 4e 61 6d 65 73 20 3d 20 7b 0d 0a 20 20  lueNames = {..  
19540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 73                "s
19550 64 6b 49 6e 73 74 61 6c 6c 52 6f 6f 74 76 32 2e  dkInstallRootv2.
19560 30 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  0",..           
19570 20 20 20 20 20 22 49 6e 73 74 61 6c 6c 61 74 69       "Installati
19580 6f 6e 46 6f 6c 64 65 72 22 2c 0d 0a 20 20 20 20  onFolder",..    
19590 20 20 20 20 20 20 20 20 20 20 20 20 22 49 6e 73              "Ins
195a0 74 61 6c 6c 61 74 69 6f 6e 46 6f 6c 64 65 72 22  tallationFolder"
195b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 3b  ..            };
195c0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
195d0 62 6f 6f 6c 5b 5d 20 75 73 65 53 75 62 4b 65 79  bool[] useSubKey
195e0 73 20 3d 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  s = {..         
195f0 20 20 20 20 20 20 20 66 61 6c 73 65 2c 0d 0a 20         false,.. 
19600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
19610 72 75 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  rue,..          
19620 20 20 20 20 20 20 74 72 75 65 0d 0a 20 20 20 20        true..    
19630 20 20 20 20 20 20 20 20 7d 3b 0d 0a 0d 0a 20 20          };....  
19640 20 20 20 20 20 20 20 20 20 20 66 6f 72 20 28 69            for (i
19650 6e 74 20 69 6e 64 65 78 20 3d 20 30 3b 20 69 6e  nt index = 0; in
19660 64 65 78 20 3c 20 6b 65 79 4e 61 6d 65 73 2e 4c  dex < keyNames.L
19670 65 6e 67 74 68 3b 20 69 6e 64 65 78 2b 2b 29 0d  ength; index++).
19680 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
19690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
196a0 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73  using (MockRegis
196b0 74 72 79 4b 65 79 20 6b 65 79 20 3d 20 52 65 67  tryKey key = Reg
196c0 69 73 74 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e  istryHelper.Open
196d0 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20  SubKey(..       
196e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
196f0 20 72 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e 61 6d   rootKey, keyNam
19700 65 73 5b 69 6e 64 65 78 5d 2c 20 66 61 6c 73 65  es[index], false
19710 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73  , whatIf, verbos
19720 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e))..           
19730 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
19740 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
19750 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  key == null)..  
19760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19770 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d        continue;.
19780 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
19790 20 20 20 20 20 20 20 69 66 20 28 75 73 65 53 75         if (useSu
197a0 62 4b 65 79 73 5b 69 6e 64 65 78 5d 29 0d 0a 20  bKeys[index]).. 
197b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
197c0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
197d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 6f                fo
197e0 72 65 61 63 68 20 28 73 74 72 69 6e 67 20 73 75  reach (string su
197f0 62 4b 65 79 4e 61 6d 65 20 69 6e 20 52 65 67 69  bKeyName in Regi
19800 73 74 72 79 48 65 6c 70 65 72 2e 47 65 74 53 75  stryHelper.GetSu
19810 62 4b 65 79 4e 61 6d 65 73 28 0d 0a 20 20 20 20  bKeyNames(..    
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 20 20 20 20 20 6b 65 79 2c              key,
19840 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65   whatIf, verbose
19850 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
19860 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
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 75 73 69 6e 67             using
19890 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65   (MockRegistryKe
198a0 79 20 73 75 62 4b 65 79 20 3d 20 52 65 67 69 73  y subKey = Regis
198b0 74 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75  tryHelper.OpenSu
198c0 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20  bKey(..         
198d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
198e0 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 2c 20             key, 
198f0 73 75 62 4b 65 79 4e 61 6d 65 2c 20 66 61 6c 73  subKeyName, fals
19900 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f  e, whatIf, verbo
19910 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  se))..          
19920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19930 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
19940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19950 20 20 20 20 20 69 66 20 28 73 75 62 4b 65 79 20       if (subKey 
19960 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
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 20 20 20 20 20 20 63 6f                co
19990 6e 74 69 6e 75 65 3b 0d 0a 0d 0a 20 20 20 20 20  ntinue;....     
199a0 20 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 6f 62 6a 65 63             objec
199c0 74 20 76 61 6c 75 65 20 3d 20 52 65 67 69 73 74  t value = Regist
199d0 72 79 48 65 6c 70 65 72 2e 47 65 74 56 61 6c 75  ryHelper.GetValu
199e0 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
199f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19a00 20 20 20 20 20 20 20 20 73 75 62 4b 65 79 2c 20          subKey, 
19a10 76 61 6c 75 65 4e 61 6d 65 73 5b 69 6e 64 65 78  valueNames[index
19a20 5d 2c 20 6e 75 6c 6c 2c 20 77 68 61 74 49 66 2c  ], null, whatIf,
19a30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
19a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19a50 20 20 20 20 20 20 76 65 72 62 6f 73 65 29 3b 0d        verbose);.
19a60 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
19a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19a80 20 20 20 69 66 20 28 21 28 76 61 6c 75 65 20 69     if (!(value i
19a90 73 20 73 74 72 69 6e 67 29 29 0d 0a 20 20 20 20  s string))..    
19aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19ac0 63 6f 6e 74 69 6e 75 65 3b 0d 0a 0d 0a 20 20 20  continue;....   
19ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72               str
19af0 69 6e 67 20 70 61 74 68 20 3d 20 28 73 74 72 69  ing path = (stri
19b00 6e 67 29 76 61 6c 75 65 3b 0d 0a 0d 0a 20 20 20  ng)value;....   
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 20 20 20 20 20 69 66 20               if 
19b30 28 21 44 69 72 65 63 74 6f 72 79 2e 45 78 69 73  (!Directory.Exis
19b40 74 73 28 70 61 74 68 29 29 0d 0a 20 20 20 20 20  ts(path))..     
19b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
19b70 6f 6e 74 69 6e 75 65 3b 0d 0a 0d 0a 20 20 20 20  ontinue;....    
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 20 20 70 61 74 68              path
19ba0 20 3d 20 50 61 74 68 2e 43 6f 6d 62 69 6e 65 28   = Path.Combine(
19bb0 70 61 74 68 2c 20 22 62 69 6e 22 29 3b 0d 0a 0d  path, "bin");...
19bc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
19bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19be0 20 69 66 20 28 21 44 69 72 65 63 74 6f 72 79 2e   if (!Directory.
19bf0 45 78 69 73 74 73 28 70 61 74 68 29 29 0d 0a 20  Exists(path)).. 
19c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19c20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 0d 0a     continue;....
19c30 20 20 20 20 20 20 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 69 66 20 28 53 74 72 69 6e 67 2e 49 73 4e 75 6c  if (String.IsNul
19c60 6c 4f 72 45 6d 70 74 79 28 66 69 6c 65 4e 61 6d  lOrEmpty(fileNam
19c70 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e))..           
19c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19c90 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
19ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19cb0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75              resu
19cc0 6c 74 73 2e 41 64 64 28 73 75 62 4b 65 79 2e 4e  lts.Add(subKey.N
19cd0 61 6d 65 2c 20 70 61 74 68 29 3b 0d 0a 20 20 20  ame, path);..   
19ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19d00 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20   continue;..    
19d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19d20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
19d30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
19d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19d50 20 70 61 74 68 20 3d 20 50 61 74 68 2e 43 6f 6d   path = Path.Com
19d60 62 69 6e 65 28 70 61 74 68 2c 20 66 69 6c 65 4e  bine(path, fileN
19d70 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ame);....       
19d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19d90 20 20 20 20 20 20 20 20 20 69 66 20 28 46 69 6c           if (Fil
19da0 65 2e 45 78 69 73 74 73 28 70 61 74 68 29 29 0d  e.Exists(path)).
19db0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
19dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19dd0 20 20 20 20 20 72 65 73 75 6c 74 73 2e 41 64 64       results.Add
19de0 28 73 75 62 4b 65 79 2e 4e 61 6d 65 2c 20 70 61  (subKey.Name, pa
19df0 74 68 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  th);..          
19e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19e10 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
19e20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
19e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19e40 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
19e50 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d             else.
19e60 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
19e70 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
19e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19e90 6f 62 6a 65 63 74 20 76 61 6c 75 65 20 3d 20 52  object value = R
19ea0 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 47 65  egistryHelper.Ge
19eb0 74 56 61 6c 75 65 28 0d 0a 20 20 20 20 20 20 20  tValue(..       
19ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19ed0 20 20 20 20 20 6b 65 79 2c 20 76 61 6c 75 65 4e       key, valueN
19ee0 61 6d 65 73 5b 69 6e 64 65 78 5d 2c 20 6e 75 6c  ames[index], nul
19ef0 6c 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f  l, whatIf, verbo
19f00 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  se);....        
19f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19f20 69 66 20 28 21 28 76 61 6c 75 65 20 69 73 20 73  if (!(value is s
19f30 74 72 69 6e 67 29 29 0d 0a 20 20 20 20 20 20 20  tring))..       
19f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19f50 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a       continue;..
19f60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
19f70 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
19f80 20 70 61 74 68 20 3d 20 28 73 74 72 69 6e 67 29   path = (string)
19f90 76 61 6c 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  value;....      
19fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19fb0 20 20 69 66 20 28 21 44 69 72 65 63 74 6f 72 79    if (!Directory
19fc0 2e 45 78 69 73 74 73 28 70 61 74 68 29 29 0d 0a  .Exists(path))..
19fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19fe0 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74              cont
19ff0 69 6e 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  inue;....       
1a000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a010 20 70 61 74 68 20 3d 20 50 61 74 68 2e 43 6f 6d   path = Path.Com
1a020 62 69 6e 65 28 70 61 74 68 2c 20 22 62 69 6e 22  bine(path, "bin"
1a030 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
1a040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
1a050 20 28 21 44 69 72 65 63 74 6f 72 79 2e 45 78 69   (!Directory.Exi
1a060 73 74 73 28 70 61 74 68 29 29 0d 0a 20 20 20 20  sts(path))..    
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 63 6f 6e 74 69 6e 75 65          continue
1a090 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
1a0a0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
1a0b0 28 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72  (String.IsNullOr
1a0c0 45 6d 70 74 79 28 66 69 6c 65 4e 61 6d 65 29 29  Empty(fileName))
1a0d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1a0e0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1a0f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a100 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 73           results
1a110 2e 41 64 64 28 6b 65 79 2e 4e 61 6d 65 2c 20 70  .Add(key.Name, p
1a120 61 74 68 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ath);..         
1a130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a140 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20     continue;..  
1a150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a160 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
1a170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a180 20 20 20 70 61 74 68 20 3d 20 50 61 74 68 2e 43     path = Path.C
1a190 6f 6d 62 69 6e 65 28 70 61 74 68 2c 20 66 69 6c  ombine(path, fil
1a1a0 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  eName);....     
1a1b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a1c0 20 20 20 69 66 20 28 46 69 6c 65 2e 45 78 69 73     if (File.Exis
1a1d0 74 73 28 70 61 74 68 29 29 0d 0a 20 20 20 20 20  ts(path))..     
1a1e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a1f0 20 20 20 20 20 20 20 72 65 73 75 6c 74 73 2e 41         results.A
1a200 64 64 28 6b 65 79 2e 4e 61 6d 65 2c 20 70 61 74  dd(key.Name, pat
1a210 68 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  h);..           
1a220 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
1a230 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
1a240 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
1a250 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
1a260 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e              // N
1a270 4f 54 45 3a 20 49 66 20 77 65 20 66 6f 75 6e 64  OTE: If we found
1a280 20 73 6f 6d 65 20 72 65 73 75 6c 74 73 2c 20 72   some results, r
1a290 65 74 75 72 6e 20 74 68 65 20 6c 61 73 74 20 28  eturn the last (
1a2a0 6c 61 74 65 73 74 29 20 6f 6e 65 2e 0d 0a 20 20  latest) one...  
1a2b0 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
1a2c0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 72 65            if (re
1a2d0 73 75 6c 74 73 2e 43 6f 75 6e 74 20 3e 20 30 29  sults.Count > 0)
1a2e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1a2f0 20 20 72 65 74 75 72 6e 20 72 65 73 75 6c 74 73    return results
1a300 5b 6e 65 77 20 53 74 72 69 6e 67 4c 69 73 74 28  [new StringList(
1a310 72 65 73 75 6c 74 73 2e 4b 65 79 73 29 5b 72 65  results.Keys)[re
1a320 73 75 6c 74 73 2e 43 6f 75 6e 74 20 2d 20 31 5d  sults.Count - 1]
1a330 5d 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  ];....          
1a340 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a    return null;..
1a350 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
1a360 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
1a370 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
1a380 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a390 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a3a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a3b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a3c0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67  ....        #reg
1a3d0 69 6f 6e 20 50 65 72 2d 46 72 61 6d 65 77 6f 72  ion Per-Framewor
1a3e0 6b 2f 50 6c 61 74 66 6f 72 6d 20 48 61 6e 64 6c  k/Platform Handl
1a3f0 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 70 72 69  ing..        pri
1a400 76 61 74 65 20 73 74 61 74 69 63 20 76 6f 69 64  vate static void
1a410 20 49 6e 69 74 69 61 6c 69 7a 65 46 72 61 6d 65   InitializeFrame
1a420 77 6f 72 6b 4c 69 73 74 28 0d 0a 20 20 20 20 20  workList(..     
1a430 20 20 20 20 20 20 20 43 6f 6e 66 69 67 75 72 61         Configura
1a440 74 69 6f 6e 20 63 6f 6e 66 69 67 75 72 61 74 69  tion configurati
1a450 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on,..           
1a460 20 72 65 66 20 46 72 61 6d 65 77 6f 72 6b 4c 69   ref FrameworkLi
1a470 73 74 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74  st frameworkList
1a480 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d  ..            ).
1a490 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
1a4a0 20 20 20 20 20 20 20 20 69 66 20 28 66 72 61 6d          if (fram
1a4b0 65 77 6f 72 6b 4c 69 73 74 20 3d 3d 20 6e 75 6c  eworkList == nul
1a4c0 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
1a4d0 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73      frameworkLis
1a4e0 74 20 3d 20 6e 65 77 20 46 72 61 6d 65 77 6f 72  t = new Framewor
1a4f0 6b 4c 69 73 74 28 29 3b 0d 0a 0d 0a 20 20 20 20  kList();....    
1a500 20 20 20 20 20 20 20 20 69 66 20 28 66 72 61 6d          if (fram
1a510 65 77 6f 72 6b 4c 69 73 74 2e 52 6f 6f 74 4b 65  eworkList.RootKe
1a520 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  y == null)..    
1a530 20 20 20 20 20 20 20 20 20 20 20 20 66 72 61 6d              fram
1a540 65 77 6f 72 6b 4c 69 73 74 2e 52 6f 6f 74 4b 65  eworkList.RootKe
1a550 79 20 3d 20 52 65 67 69 73 74 72 79 2e 4c 6f 63  y = Registry.Loc
1a560 61 6c 4d 61 63 68 69 6e 65 3b 0d 0a 0d 0a 20 20  alMachine;....  
1a570 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
1a580 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a590 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a5a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a5b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
1a5c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
1a5d0 28 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e  (frameworkList.N
1a5e0 61 6d 65 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  ames == null).. 
1a5f0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
1a600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 72                fr
1a610 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e 61 6d 65  ameworkList.Name
1a620 73 20 3d 20 6e 65 77 20 53 74 72 69 6e 67 4c 69  s = new StringLi
1a630 73 74 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  st();....       
1a640 20 20 20 20 20 20 20 20 20 69 66 20 28 28 63 6f           if ((co
1a650 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20 6e  nfiguration == n
1a660 75 6c 6c 29 20 7c 7c 20 21 63 6f 6e 66 69 67 75  ull) || !configu
1a670 72 61 74 69 6f 6e 2e 4e 6f 44 65 73 6b 74 6f 70  ration.NoDesktop
1a680 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
1a690 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b         framework
1a6a0 4c 69 73 74 2e 4e 61 6d 65 73 2e 41 64 64 28 22  List.Names.Add("
1a6b0 2e 4e 45 54 46 72 61 6d 65 77 6f 72 6b 22 29 3b  .NETFramework");
1a6c0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1a6d0 20 20 20 20 69 66 20 28 28 63 6f 6e 66 69 67 75      if ((configu
1a6e0 72 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20  ration == null) 
1a6f0 7c 7c 20 21 63 6f 6e 66 69 67 75 72 61 74 69 6f  || !configuratio
1a700 6e 2e 4e 6f 43 6f 6d 70 61 63 74 29 0d 0a 20 20  n.NoCompact)..  
1a710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
1a720 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1a730 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4c 69       frameworkLi
1a740 73 74 2e 4e 61 6d 65 73 2e 41 64 64 28 22 2e 4e  st.Names.Add(".N
1a750 45 54 43 6f 6d 70 61 63 74 46 72 61 6d 65 77 6f  ETCompactFramewo
1a760 72 6b 22 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  rk");..         
1a770 20 20 20 20 20 20 20 20 20 20 20 66 72 61 6d 65             frame
1a780 77 6f 72 6b 4c 69 73 74 2e 4e 61 6d 65 73 2e 41  workList.Names.A
1a790 64 64 28 22 2e 4e 45 54 43 6f 6d 70 61 63 74 46  dd(".NETCompactF
1a7a0 72 61 6d 65 77 6f 72 6b 22 29 3b 0d 0a 20 20 20  ramework");..   
1a7b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a7c0 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 4e   frameworkList.N
1a7d0 61 6d 65 73 2e 41 64 64 28 22 2e 4e 45 54 43 6f  ames.Add(".NETCo
1a7e0 6d 70 61 63 74 46 72 61 6d 65 77 6f 72 6b 22 29  mpactFramework")
1a7f0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
1a800 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
1a810 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
1a820 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
1a830 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a840 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a850 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a860 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
1a870 20 20 20 20 20 20 69 66 20 28 66 72 61 6d 65 77        if (framew
1a880 6f 72 6b 4c 69 73 74 2e 56 65 72 73 69 6f 6e 73  orkList.Versions
1a890 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
1a8a0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
1a8b0 20 20 20 20 20 20 20 20 20 20 66 72 61 6d 65 77            framew
1a8c0 6f 72 6b 4c 69 73 74 2e 56 65 72 73 69 6f 6e 73  orkList.Versions
1a8d0 20 3d 20 6e 65 77 20 56 65 72 73 69 6f 6e 4d 61   = new VersionMa
1a8e0 70 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  p();....        
1a8f0 20 20 20 20 20 20 20 20 69 66 20 28 28 63 6f 6e          if ((con
1a900 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20 6e 75  figuration == nu
1a910 6c 6c 29 20 7c 7c 20 21 63 6f 6e 66 69 67 75 72  ll) || !configur
1a920 61 74 69 6f 6e 2e 4e 6f 44 65 73 6b 74 6f 70 29  ation.NoDesktop)
1a930 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1a940 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
1a950 20 20 20 20 20 20 20 20 20 56 65 72 73 69 6f 6e           Version
1a960 4c 69 73 74 20 64 65 73 6b 74 6f 70 56 65 72 73  List desktopVers
1a970 69 6f 6e 4c 69 73 74 20 3d 20 6e 65 77 20 56 65  ionList = new Ve
1a980 72 73 69 6f 6e 4c 69 73 74 28 29 3b 0d 0a 0d 0a  rsionList();....
1a990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a9a0 20 20 20 20 69 66 20 28 28 63 6f 6e 66 69 67 75      if ((configu
1a9b0 72 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20  ration == null) 
1a9c0 7c 7c 20 21 63 6f 6e 66 69 67 75 72 61 74 69 6f  || !configuratio
1a9d0 6e 2e 4e 6f 4e 65 74 46 78 32 30 29 0d 0a 20 20  n.NoNetFx20)..  
1a9e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a9f0 20 20 20 20 20 20 64 65 73 6b 74 6f 70 56 65 72        desktopVer
1aa00 73 69 6f 6e 4c 69 73 74 2e 41 64 64 28 6e 65 77  sionList.Add(new
1aa10 20 56 65 72 73 69 6f 6e 28 32 2c 20 30 2c 20 35   Version(2, 0, 5
1aa20 30 37 32 37 29 29 3b 0d 0a 0d 0a 20 20 20 20 20  0727));....     
1aa30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
1aa40 66 20 28 28 63 6f 6e 66 69 67 75 72 61 74 69 6f  f ((configuratio
1aa50 6e 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 21 63  n == null) || !c
1aa60 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 4e 6f 4e  onfiguration.NoN
1aa70 65 74 46 78 34 30 29 0d 0a 20 20 20 20 20 20 20  etFx40)..       
1aa80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1aa90 20 64 65 73 6b 74 6f 70 56 65 72 73 69 6f 6e 4c   desktopVersionL
1aaa0 69 73 74 2e 41 64 64 28 6e 65 77 20 56 65 72 73  ist.Add(new Vers
1aab0 69 6f 6e 28 34 2c 20 30 2c 20 33 30 33 31 39 29  ion(4, 0, 30319)
1aac0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
1aad0 20 20 20 20 20 20 20 20 20 20 66 72 61 6d 65 77            framew
1aae0 6f 72 6b 4c 69 73 74 2e 56 65 72 73 69 6f 6e 73  orkList.Versions
1aaf0 2e 41 64 64 28 22 2e 4e 45 54 46 72 61 6d 65 77  .Add(".NETFramew
1ab00 6f 72 6b 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  ork",..         
1ab10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
1ab20 65 73 6b 74 6f 70 56 65 72 73 69 6f 6e 4c 69 73  esktopVersionLis
1ab30 74 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  t);..           
1ab40 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
1ab50 20 20 20 20 20 20 20 20 20 20 69 66 20 28 28 63            if ((c
1ab60 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d 20  onfiguration == 
1ab70 6e 75 6c 6c 29 20 7c 7c 20 21 63 6f 6e 66 69 67  null) || !config
1ab80 75 72 61 74 69 6f 6e 2e 4e 6f 43 6f 6d 70 61 63  uration.NoCompac
1ab90 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t)..            
1aba0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1abb0 20 20 20 20 20 20 20 20 20 20 20 66 72 61 6d 65             frame
1abc0 77 6f 72 6b 4c 69 73 74 2e 56 65 72 73 69 6f 6e  workList.Version
1abd0 73 2e 41 64 64 28 22 2e 4e 45 54 43 6f 6d 70 61  s.Add(".NETCompa
1abe0 63 74 46 72 61 6d 65 77 6f 72 6b 22 2c 0d 0a 20  ctFramework",.. 
1abf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ac00 20 20 20 20 20 20 20 6e 65 77 20 56 65 72 73 69         new Versi
1ac10 6f 6e 4c 69 73 74 28 6e 65 77 20 56 65 72 73 69  onList(new Versi
1ac20 6f 6e 5b 5d 20 7b 0d 0a 20 20 20 20 20 20 20 20  on[] {..        
1ac30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ac40 6e 65 77 20 56 65 72 73 69 6f 6e 28 32 2c 20 30  new Version(2, 0
1ac50 2c 20 30 2c 20 30 29 2c 20 6e 65 77 20 56 65 72  , 0, 0), new Ver
1ac60 73 69 6f 6e 28 33 2c 20 35 2c 20 30 2c 20 30 29  sion(3, 5, 0, 0)
1ac70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1ac80 20 20 20 20 20 20 7d 29 29 3b 0d 0a 20 20 20 20        }));..    
1ac90 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
1aca0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
1acb0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
1acc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1acd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ace0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1acf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
1ad00 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
1ad10 66 20 28 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74  f (frameworkList
1ad20 2e 50 6c 61 74 66 6f 72 6d 4e 61 6d 65 73 20 3d  .PlatformNames =
1ad30 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
1ad40 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1ad50 20 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72          framewor
1ad60 6b 4c 69 73 74 2e 50 6c 61 74 66 6f 72 6d 4e 61  kList.PlatformNa
1ad70 6d 65 73 20 3d 20 6e 65 77 20 53 74 72 69 6e 67  mes = new String
1ad80 4c 69 73 74 28 29 3b 0d 0a 0d 0a 20 20 20 20 20  List();....     
1ad90 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 28             if ((
1ada0 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 3d 3d  configuration ==
1adb0 20 6e 75 6c 6c 29 20 7c 7c 20 21 63 6f 6e 66 69   null) || !confi
1adc0 67 75 72 61 74 69 6f 6e 2e 4e 6f 44 65 73 6b 74  guration.NoDeskt
1add0 6f 70 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  op)..           
1ade0 20 20 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f           framewo
1adf0 72 6b 4c 69 73 74 2e 50 6c 61 74 66 6f 72 6d 4e  rkList.PlatformN
1ae00 61 6d 65 73 2e 41 64 64 28 6e 75 6c 6c 29 3b 0d  ames.Add(null);.
1ae10 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1ae20 20 20 20 69 66 20 28 28 63 6f 6e 66 69 67 75 72     if ((configur
1ae30 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20 7c  ation == null) |
1ae40 7c 20 21 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  | !configuration
1ae50 2e 4e 6f 43 6f 6d 70 61 63 74 29 0d 0a 20 20 20  .NoCompact)..   
1ae60 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
1ae70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ae80 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73      frameworkLis
1ae90 74 2e 50 6c 61 74 66 6f 72 6d 4e 61 6d 65 73 2e  t.PlatformNames.
1aea0 41 64 64 28 22 50 6f 63 6b 65 74 50 43 22 29 3b  Add("PocketPC");
1aeb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1aec0 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b 4c        frameworkL
1aed0 69 73 74 2e 50 6c 61 74 66 6f 72 6d 4e 61 6d 65  ist.PlatformName
1aee0 73 2e 41 64 64 28 22 53 6d 61 72 74 70 68 6f 6e  s.Add("Smartphon
1aef0 65 22 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  e");..          
1af00 20 20 20 20 20 20 20 20 20 20 66 72 61 6d 65 77            framew
1af10 6f 72 6b 4c 69 73 74 2e 50 6c 61 74 66 6f 72 6d  orkList.Platform
1af20 4e 61 6d 65 73 2e 41 64 64 28 22 57 69 6e 64 6f  Names.Add("Windo
1af30 77 73 43 45 22 29 3b 0d 0a 20 20 20 20 20 20 20  wsCE");..       
1af40 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
1af50 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
1af60 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
1af70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1af80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1af90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1afa0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1afb0 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
1afc0 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
1afd0 63 20 62 6f 6f 6c 20 48 61 76 65 46 72 61 6d 65  c bool HaveFrame
1afe0 77 6f 72 6b 28 0d 0a 20 20 20 20 20 20 20 20 20  work(..         
1aff0 20 20 20 52 65 67 69 73 74 72 79 4b 65 79 20 72     RegistryKey r
1b000 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20  ootKey,..       
1b010 20 20 20 20 20 73 74 72 69 6e 67 20 66 72 61 6d       string fram
1b020 65 77 6f 72 6b 4e 61 6d 65 2c 0d 0a 20 20 20 20  eworkName,..    
1b030 20 20 20 20 20 20 20 20 56 65 72 73 69 6f 6e 20          Version 
1b040 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e  frameworkVersion
1b050 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  ,..            s
1b060 74 72 69 6e 67 20 70 6c 61 74 66 6f 72 6d 4e 61  tring platformNa
1b070 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me,..           
1b080 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20   bool whatIf,.. 
1b090 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
1b0a0 76 65 72 62 6f 73 65 0d 0a 20 20 20 20 20 20 20  verbose..       
1b0b0 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20       )..        
1b0c0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  {..            s
1b0d0 74 72 69 6e 67 20 66 6f 72 6d 61 74 20 3d 20 21  tring format = !
1b0e0 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45  String.IsNullOrE
1b0f0 6d 70 74 79 28 70 6c 61 74 66 6f 72 6d 4e 61 6d  mpty(platformNam
1b100 65 29 20 3f 0d 0a 20 20 20 20 20 20 20 20 20 20  e) ?..          
1b110 20 20 20 20 20 20 22 53 6f 66 74 77 61 72 65 5c        "Software\
1b120 5c 4d 69 63 72 6f 73 6f 66 74 5c 5c 7b 30 7d 5c  \Microsoft\\{0}\
1b130 5c 76 7b 31 7d 5c 5c 7b 32 7d 22 20 3a 0d 0a 20  \v{1}\\{2}" :.. 
1b140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
1b150 53 6f 66 74 77 61 72 65 5c 5c 4d 69 63 72 6f 73  Software\\Micros
1b160 6f 66 74 5c 5c 7b 30 7d 5c 5c 76 7b 31 7d 22 3b  oft\\{0}\\v{1}";
1b170 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1b180 73 74 72 69 6e 67 20 6b 65 79 4e 61 6d 65 20 3d  string keyName =
1b190 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
1b1a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1b1b0 20 66 6f 72 6d 61 74 2c 20 66 72 61 6d 65 77 6f   format, framewo
1b1c0 72 6b 4e 61 6d 65 2c 20 66 72 61 6d 65 77 6f 72  rkName, framewor
1b1d0 6b 56 65 72 73 69 6f 6e 2c 20 70 6c 61 74 66 6f  kVersion, platfo
1b1e0 72 6d 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20  rmName);....    
1b1f0 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 4d          using (M
1b200 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 6b  ockRegistryKey k
1b210 65 79 20 3d 20 52 65 67 69 73 74 72 79 48 65 6c  ey = RegistryHel
1b220 70 65 72 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d  per.OpenSubKey(.
1b230 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1b240 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 6b 65       rootKey, ke
1b250 79 4e 61 6d 65 2c 20 66 61 6c 73 65 2c 20 77 68  yName, false, wh
1b260 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 29 0d  atIf, verbose)).
1b270 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
1b280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b290 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29  if (key == null)
1b2a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1b2b0 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
1b2c0 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  se;....         
1b2d0 20 20 20 20 20 20 20 69 66 20 28 70 6c 61 74 66         if (platf
1b2e0 6f 72 6d 4e 61 6d 65 20 21 3d 20 6e 75 6c 6c 29  ormName != null)
1b2f0 20 2f 2f 20 4e 4f 54 45 3a 20 53 6b 69 70 20 6e   // NOTE: Skip n
1b300 6f 6e 2d 64 65 73 6b 74 6f 70 2e 0d 0a 20 20 20  on-desktop...   
1b310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b320 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 0d   return true;...
1b330 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1b340 20 73 74 72 69 6e 67 20 64 69 72 65 63 74 6f 72   string director
1b350 79 20 3d 20 47 65 74 46 72 61 6d 65 77 6f 72 6b  y = GetFramework
1b360 44 69 72 65 63 74 6f 72 79 28 0d 0a 20 20 20 20  Directory(..    
1b370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b380 72 6f 6f 74 4b 65 79 2c 20 66 72 61 6d 65 77 6f  rootKey, framewo
1b390 72 6b 56 65 72 73 69 6f 6e 2c 20 77 68 61 74 49  rkVersion, whatI
1b3a0 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a  f, verbose);....
1b3b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b3c0 69 66 20 28 53 74 72 69 6e 67 2e 49 73 4e 75 6c  if (String.IsNul
1b3d0 6c 4f 72 45 6d 70 74 79 28 64 69 72 65 63 74 6f  lOrEmpty(directo
1b3e0 72 79 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ry))..          
1b3f0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
1b400 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20   false;....     
1b410 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21             if (!
1b420 44 69 72 65 63 74 6f 72 79 2e 45 78 69 73 74 73  Directory.Exists
1b430 28 64 69 72 65 63 74 6f 72 79 29 29 0d 0a 20 20  (directory))..  
1b440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b450 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
1b460 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1b470 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d     return true;.
1b480 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
1b490 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
1b4a0 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
1b4b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b4c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b4d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1b4e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
1b4f0 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
1b500 73 74 61 74 69 63 20 62 6f 6f 6c 20 46 6f 72 45  static bool ForE
1b510 61 63 68 46 72 61 6d 65 77 6f 72 6b 43 6f 6e 66  achFrameworkConf
1b520 69 67 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ig(..           
1b530 20 46 72 61 6d 65 77 6f 72 6b 4c 69 73 74 20 66   FrameworkList f
1b540 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2c 0d 0a 20  rameworkList,.. 
1b550 20 20 20 20 20 20 20 20 20 20 20 46 72 61 6d 65             Frame
1b560 77 6f 72 6b 43 6f 6e 66 69 67 43 61 6c 6c 62 61  workConfigCallba
1b570 63 6b 20 63 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20  ck callback,..  
1b580 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
1b590 20 69 6e 76 61 72 69 61 6e 74 2c 0d 0a 20 20 20   invariant,..   
1b5a0 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
1b5b0 6e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  name,..         
1b5c0 20 20 20 73 74 72 69 6e 67 20 64 65 73 63 72 69     string descri
1b5d0 70 74 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20  ption,..        
1b5e0 20 20 20 20 73 74 72 69 6e 67 20 74 79 70 65 4e      string typeN
1b5f0 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ame,..          
1b600 20 20 41 73 73 65 6d 62 6c 79 4e 61 6d 65 20 61    AssemblyName a
1b610 73 73 65 6d 62 6c 79 4e 61 6d 65 2c 0d 0a 20 20  ssemblyName,..  
1b620 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74            object
1b630 20 63 6c 69 65 6e 74 44 61 74 61 2c 0d 0a 20 20   clientData,..  
1b640 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77            bool w
1b650 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20  hatIf,..        
1b660 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65      bool verbose
1b670 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ,..            r
1b680 65 66 20 62 6f 6f 6c 20 73 61 76 65 64 2c 0d 0a  ef bool saved,..
1b690 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20              ref 
1b6a0 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20  string error..  
1b6b0 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
1b6c0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1b6d0 20 20 20 20 69 66 20 28 66 72 61 6d 65 77 6f 72      if (framewor
1b6e0 6b 4c 69 73 74 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  kList == null)..
1b6f0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
1b700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
1b710 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64 20  rror = "invalid 
1b720 66 72 61 6d 65 77 6f 72 6b 20 6c 69 73 74 22 3b  framework list";
1b730 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1b740 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
1b750 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
1b760 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 52 65  ..            Re
1b770 67 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65  gistryKey rootKe
1b780 79 20 3d 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73  y = frameworkLis
1b790 74 2e 52 6f 6f 74 4b 65 79 3b 0d 0a 0d 0a 20 20  t.RootKey;....  
1b7a0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 72 6f            if (ro
1b7b0 6f 74 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  otKey == null)..
1b7c0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
1b7d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
1b7e0 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64 20  rror = "invalid 
1b7f0 72 6f 6f 74 20 6b 65 79 22 3b 0d 0a 20 20 20 20  root key";..    
1b800 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
1b810 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
1b820 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
1b830 20 20 20 20 20 20 20 20 69 66 20 28 21 4f 62 6a          if (!Obj
1b840 65 63 74 2e 52 65 66 65 72 65 6e 63 65 45 71 75  ect.ReferenceEqu
1b850 61 6c 73 28 72 6f 6f 74 4b 65 79 2c 20 52 65 67  als(rootKey, Reg
1b860 69 73 74 72 79 2e 43 75 72 72 65 6e 74 55 73 65  istry.CurrentUse
1b870 72 29 20 26 26 0d 0a 20 20 20 20 20 20 20 20 20  r) &&..         
1b880 20 20 20 20 20 20 20 21 4f 62 6a 65 63 74 2e 52         !Object.R
1b890 65 66 65 72 65 6e 63 65 45 71 75 61 6c 73 28 72  eferenceEquals(r
1b8a0 6f 6f 74 4b 65 79 2c 20 52 65 67 69 73 74 72 79  ootKey, Registry
1b8b0 2e 4c 6f 63 61 6c 4d 61 63 68 69 6e 65 29 29 0d  .LocalMachine)).
1b8c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
1b8d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b8e0 65 72 72 6f 72 20 3d 20 22 72 6f 6f 74 20 6b 65  error = "root ke
1b8f0 79 20 6d 75 73 74 20 62 65 20 70 65 72 2d 75 73  y must be per-us
1b900 65 72 20 6f 72 20 70 65 72 2d 6d 61 63 68 69 6e  er or per-machin
1b910 65 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e";..           
1b920 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
1b930 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
1b940 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
1b950 20 69 66 20 28 66 72 61 6d 65 77 6f 72 6b 4c 69   if (frameworkLi
1b960 73 74 2e 4e 61 6d 65 73 20 3d 3d 20 6e 75 6c 6c  st.Names == null
1b970 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
1b980 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1b990 20 20 65 72 72 6f 72 20 3d 20 22 6e 6f 20 66 72    error = "no fr
1b9a0 61 6d 65 77 6f 72 6b 20 6e 61 6d 65 73 20 66 6f  amework names fo
1b9b0 75 6e 64 22 3b 0d 0a 20 20 20 20 20 20 20 20 20  und";..         
1b9c0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
1b9d0 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lse;..          
1b9e0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
1b9f0 20 20 20 69 66 20 28 66 72 61 6d 65 77 6f 72 6b     if (framework
1ba00 4c 69 73 74 2e 56 65 72 73 69 6f 6e 73 20 3d 3d  List.Versions ==
1ba10 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
1ba20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1ba30 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22         error = "
1ba40 6e 6f 20 66 72 61 6d 65 77 6f 72 6b 20 76 65 72  no framework ver
1ba50 73 69 6f 6e 73 20 66 6f 75 6e 64 22 3b 0d 0a 20  sions found";.. 
1ba60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
1ba70 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
1ba80 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
1ba90 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 66             if (f
1baa0 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 50 6c 61  rameworkList.Pla
1bab0 74 66 6f 72 6d 4e 61 6d 65 73 20 3d 3d 20 6e 75  tformNames == nu
1bac0 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
1bad0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1bae0 20 20 20 20 65 72 72 6f 72 20 3d 20 22 6e 6f 20      error = "no 
1baf0 70 6c 61 74 66 6f 72 6d 20 6e 61 6d 65 73 20 66  platform names f
1bb00 6f 75 6e 64 22 3b 0d 0a 20 20 20 20 20 20 20 20  ound";..        
1bb10 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
1bb20 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
1bb30 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
1bb40 20 20 20 20 69 66 20 28 66 72 61 6d 65 77 6f 72      if (framewor
1bb50 6b 4c 69 73 74 2e 4e 61 6d 65 73 2e 43 6f 75 6e  kList.Names.Coun
1bb60 74 20 21 3d 20 66 72 61 6d 65 77 6f 72 6b 4c 69  t != frameworkLi
1bb70 73 74 2e 50 6c 61 74 66 6f 72 6d 4e 61 6d 65 73  st.PlatformNames
1bb80 2e 43 6f 75 6e 74 29 0d 0a 20 20 20 20 20 20 20  .Count)..       
1bb90 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1bba0 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20          error = 
1bbb0 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22 66  String.Format("f
1bbc0 72 61 6d 65 77 6f 72 6b 20 6e 61 6d 65 20 63 6f  ramework name co
1bbd0 75 6e 74 20 7b 30 7d 20 64 6f 65 73 20 6e 6f 74  unt {0} does not
1bbe0 20 22 20 2b 0d 0a 20 20 20 20 20 20 20 20 20 20   " +..          
1bbf0 20 20 20 20 20 20 20 20 20 20 22 6d 61 74 63 68            "match
1bc00 20 70 6c 61 74 66 6f 72 6d 20 6e 61 6d 65 20 63   platform name c
1bc10 6f 75 6e 74 20 7b 31 7d 22 2c 20 66 72 61 6d 65  ount {1}", frame
1bc20 77 6f 72 6b 4c 69 73 74 2e 4e 61 6d 65 73 2e 43  workList.Names.C
1bc30 6f 75 6e 74 2c 0d 0a 20 20 20 20 20 20 20 20 20  ount,..         
1bc40 20 20 20 20 20 20 20 20 20 20 20 66 72 61 6d 65             frame
1bc50 77 6f 72 6b 4c 69 73 74 2e 50 6c 61 74 66 6f 72  workList.Platfor
1bc60 6d 4e 61 6d 65 73 2e 43 6f 75 6e 74 29 3b 0d 0a  mNames.Count);..
1bc70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1bc80 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
1bc90 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
1bca0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 66 6f  ..            fo
1bcb0 72 20 28 69 6e 74 20 69 6e 64 65 78 20 3d 20 30  r (int index = 0
1bcc0 3b 20 69 6e 64 65 78 20 3c 20 66 72 61 6d 65 77  ; index < framew
1bcd0 6f 72 6b 4c 69 73 74 2e 4e 61 6d 65 73 2e 43 6f  orkList.Names.Co
1bce0 75 6e 74 3b 20 69 6e 64 65 78 2b 2b 29 0d 0a 20  unt; index++).. 
1bcf0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
1bd00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
1bd10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1bd20 20 20 2f 2f 20 4e 4f 54 45 3a 20 47 72 61 62 20    // NOTE: Grab 
1bd30 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  the name of the 
1bd40 66 72 61 6d 65 77 6f 72 6b 20 28 65 2e 67 2e 20  framework (e.g. 
1bd50 22 2e 4e 45 54 46 72 61 6d 65 77 6f 72 6b 22 29  ".NETFramework")
1bd60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1bd70 20 20 2f 2f 20 20 20 20 20 20 20 61 6e 64 20 74    //       and t
1bd80 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 70  he name of the p
1bd90 6c 61 74 66 6f 72 6d 20 28 65 2e 67 2e 20 22 57  latform (e.g. "W
1bda0 69 6e 64 6f 77 73 43 45 22 29 2e 0d 0a 20 20 20  indowsCE")...   
1bdb0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
1bdc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1bdd0 20 73 74 72 69 6e 67 20 66 72 61 6d 65 77 6f 72   string framewor
1bde0 6b 4e 61 6d 65 20 3d 20 66 72 61 6d 65 77 6f 72  kName = framewor
1bdf0 6b 4c 69 73 74 2e 4e 61 6d 65 73 5b 69 6e 64 65  kList.Names[inde
1be00 78 5d 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  x];..           
1be10 20 20 20 20 20 73 74 72 69 6e 67 20 70 6c 61 74       string plat
1be20 66 6f 72 6d 4e 61 6d 65 20 3d 20 66 72 61 6d 65  formName = frame
1be30 77 6f 72 6b 4c 69 73 74 2e 50 6c 61 74 66 6f 72  workList.Platfor
1be40 6d 4e 61 6d 65 73 5b 69 6e 64 65 78 5d 3b 0d 0a  mNames[index];..
1be50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1be60 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
1be70 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 53        // NOTE: S
1be80 6b 69 70 20 61 6c 6c 20 6e 6f 6e 2d 64 65 73 6b  kip all non-desk
1be90 74 6f 70 20 66 72 61 6d 65 77 6f 72 6b 73 20 28  top frameworks (
1bea0 69 2e 65 2e 20 69 66 20 74 68 65 20 70 6c 61 74  i.e. if the plat
1beb0 66 6f 72 6d 0d 0a 20 20 20 20 20 20 20 20 20 20  form..          
1bec0 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6e        //       n
1bed0 61 6d 65 20 69 73 20 6e 6f 74 20 6e 75 6c 6c 29  ame is not null)
1bee0 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1bef0 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
1bf00 20 20 20 20 20 20 20 69 66 20 28 70 6c 61 74 66         if (platf
1bf10 6f 72 6d 4e 61 6d 65 20 21 3d 20 6e 75 6c 6c 29  ormName != null)
1bf20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1bf30 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d        continue;.
1bf40 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1bf50 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
1bf60 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20         // NOTE: 
1bf70 47 72 61 62 20 74 68 65 20 73 75 70 70 6f 72 74  Grab the support
1bf80 65 64 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 74  ed versions of t
1bf90 68 69 73 20 70 61 72 74 69 63 75 6c 61 72 0d 0a  his particular..
1bfa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bfb0 2f 2f 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f  //       framewo
1bfc0 72 6b 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  rk...           
1bfd0 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
1bfe0 20 20 20 20 20 20 20 20 20 56 65 72 73 69 6f 6e           Version
1bff0 4c 69 73 74 20 66 72 61 6d 65 77 6f 72 6b 56 65  List frameworkVe
1c000 72 73 69 6f 6e 4c 69 73 74 3b 0d 0a 0d 0a 20 20  rsionList;....  
1c010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
1c020 20 28 21 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74   (!frameworkList
1c030 2e 56 65 72 73 69 6f 6e 73 2e 54 72 79 47 65 74  .Versions.TryGet
1c040 56 61 6c 75 65 28 0d 0a 20 20 20 20 20 20 20 20  Value(..        
1c050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c060 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 20 6f  frameworkName, o
1c070 75 74 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73  ut frameworkVers
1c080 69 6f 6e 4c 69 73 74 29 20 7c 7c 0d 0a 20 20 20  ionList) ||..   
1c090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c0a0 20 28 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69   (frameworkVersi
1c0b0 6f 6e 4c 69 73 74 20 3d 3d 20 6e 75 6c 6c 29 29  onList == null))
1c0c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1c0d0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
1c0e0 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75           continu
1c0f0 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
1c100 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
1c110 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68           foreach
1c120 20 28 56 65 72 73 69 6f 6e 20 66 72 61 6d 65 77   (Version framew
1c130 6f 72 6b 56 65 72 73 69 6f 6e 20 69 6e 20 66 72  orkVersion in fr
1c140 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 4c 69  ameworkVersionLi
1c150 73 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  st)..           
1c160 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1c170 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
1c180 65 4f 70 73 2e 54 72 61 63 65 28 0d 0a 20 20 20  eOps.Trace(..   
1c190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c1a0 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69       TracePriori
1c1b0 74 79 2e 4c 6f 77 65 72 2c 20 74 72 61 63 65 43  ty.Lower, traceC
1c1c0 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e  allback, String.
1c1d0 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
1c1e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c1f0 20 22 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 20   "frameworkName 
1c200 3d 20 7b 30 7d 2c 20 66 72 61 6d 65 77 6f 72 6b  = {0}, framework
1c210 56 65 72 73 69 6f 6e 20 3d 20 7b 31 7d 2c 20 22  Version = {1}, "
1c220 20 2b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   +..            
1c230 20 20 20 20 20 20 20 20 20 20 20 20 22 70 6c 61              "pla
1c240 74 66 6f 72 6d 4e 61 6d 65 20 3d 20 7b 32 7d 22  tformName = {2}"
1c250 2c 20 46 6f 72 44 69 73 70 6c 61 79 28 66 72 61  , ForDisplay(fra
1c260 6d 65 77 6f 72 6b 4e 61 6d 65 29 2c 0d 0a 20 20  meworkName),..  
1c270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c280 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79        ForDisplay
1c290 28 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f  (frameworkVersio
1c2a0 6e 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n),..           
1c2b0 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72               For
1c2c0 44 69 73 70 6c 61 79 28 70 6c 61 74 66 6f 72 6d  Display(platform
1c2d0 4e 61 6d 65 29 29 2c 20 74 72 61 63 65 43 61 74  Name)), traceCat
1c2e0 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20  egory);....     
1c2f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
1c300 66 20 28 21 48 61 76 65 46 72 61 6d 65 77 6f 72  f (!HaveFramewor
1c310 6b 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  k(..            
1c320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c330 72 6f 6f 74 4b 65 79 2c 20 66 72 61 6d 65 77 6f  rootKey, framewo
1c340 72 6b 4e 61 6d 65 2c 20 66 72 61 6d 65 77 6f 72  rkName, framewor
1c350 6b 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20  kVersion,..     
1c360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c370 20 20 20 20 20 20 20 70 6c 61 74 66 6f 72 6d 4e         platformN
1c380 61 6d 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72  ame, whatIf, ver
1c390 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20  bose))..        
1c3a0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
1c3b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c3c0 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e         TraceOps.
1c3d0 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20  Trace(..        
1c3e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c3f0 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69 74      TracePriorit
1c400 79 2e 4c 6f 77 2c 20 74 72 61 63 65 43 61 6c 6c  y.Low, traceCall
1c410 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20  back,..         
1c420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c430 20 20 20 22 2e 4e 45 54 20 46 72 61 6d 65 77 6f     ".NET Framewo
1c440 72 6b 20 6e 6f 74 20 66 6f 75 6e 64 2c 20 73 6b  rk not found, sk
1c450 69 70 70 69 6e 67 2e 2e 2e 22 2c 0d 0a 20 20 20  ipping...",..   
1c460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c470 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
1c480 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
1c490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c4a0 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20      continue;.. 
1c4b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c4c0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
1c4d0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
1c4e0 63 61 6c 6c 62 61 63 6b 20 3d 3d 20 6e 75 6c 6c  callback == null
1c4f0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
1c500 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69             conti
1c510 6e 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  nue;....        
1c520 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
1c530 6e 67 20 64 69 72 65 63 74 6f 72 79 20 3d 20 47  ng directory = G
1c540 65 74 46 72 61 6d 65 77 6f 72 6b 44 69 72 65 63  etFrameworkDirec
1c550 74 6f 72 79 28 0d 0a 20 20 20 20 20 20 20 20 20  tory(..         
1c560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
1c570 6f 6f 74 4b 65 79 2c 20 66 72 61 6d 65 77 6f 72  ootKey, framewor
1c580 6b 56 65 72 73 69 6f 6e 2c 20 77 68 61 74 49 66  kVersion, whatIf
1c590 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20  , verbose);.... 
1c5a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c5b0 20 20 20 69 66 20 28 53 74 72 69 6e 67 2e 49 73     if (String.Is
1c5c0 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 64 69 72 65  NullOrEmpty(dire
1c5d0 63 74 6f 72 79 29 29 0d 0a 20 20 20 20 20 20 20  ctory))..       
1c5e0 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
1c5f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c600 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73          TraceOps
1c610 2e 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20  .Trace(..       
1c620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c630 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69       TracePriori
1c640 74 79 2e 4c 6f 77 2c 20 74 72 61 63 65 43 61 6c  ty.Low, traceCal
1c650 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f  lback, String.Fo
1c660 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
1c670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c680 20 20 20 22 2e 4e 45 54 20 46 72 61 6d 65 77 6f     ".NET Framewo
1c690 72 6b 20 7b 30 7d 20 64 69 72 65 63 74 6f 72 79  rk {0} directory
1c6a0 20 69 73 20 69 6e 76 61 6c 69 64 2c 20 22 20 2b   is invalid, " +
1c6b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1c6c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 73                "s
1c6d0 6b 69 70 70 69 6e 67 2e 2e 2e 22 2c 20 46 6f 72  kipping...", For
1c6e0 44 69 73 70 6c 61 79 28 66 72 61 6d 65 77 6f 72  Display(framewor
1c6f0 6b 56 65 72 73 69 6f 6e 29 29 2c 0d 0a 20 20 20  kVersion)),..   
1c700 20 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 74 72 61 63 65 43 61           traceCa
1c720 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
1c730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c740 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20      continue;.. 
1c750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c760 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
1c770 20 20 20 20 20 20 20 20 20 20 20 20 64 69 72 65              dire
1c780 63 74 6f 72 79 20 3d 20 50 61 74 68 2e 43 6f 6d  ctory = Path.Com
1c790 62 69 6e 65 28 64 69 72 65 63 74 6f 72 79 2c 20  bine(directory, 
1c7a0 22 43 6f 6e 66 69 67 22 29 3b 0d 0a 0d 0a 20 20  "Config");....  
1c7b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c7c0 20 20 69 66 20 28 21 44 69 72 65 63 74 6f 72 79    if (!Directory
1c7d0 2e 45 78 69 73 74 73 28 64 69 72 65 63 74 6f 72  .Exists(director
1c7e0 79 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  y))..           
1c7f0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
1c800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c810 20 20 20 20 54 72 61 63 65 4f 70 73 2e 54 72 61      TraceOps.Tra
1c820 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ce(..           
1c830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c840 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c   TracePriority.L
1c850 6f 77 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63  ow, traceCallbac
1c860 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  k, String.Format
1c870 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
1c880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
1c890 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b 20 7b  .NET Framework {
1c8a0 30 7d 20 64 69 72 65 63 74 6f 72 79 20 7b 31 7d  0} directory {1}
1c8b0 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 73 74 2c   does not exist,
1c8c0 20 22 20 2b 0d 0a 20 20 20 20 20 20 20 20 20 20   " +..          
1c8d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c8e0 20 20 22 73 6b 69 70 70 69 6e 67 2e 2e 2e 22 2c    "skipping...",
1c8f0 20 46 6f 72 44 69 73 70 6c 61 79 28 66 72 61 6d   ForDisplay(fram
1c900 65 77 6f 72 6b 56 65 72 73 69 6f 6e 29 2c 0d 0a  eworkVersion),..
1c910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c920 20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44              ForD
1c930 69 73 70 6c 61 79 28 64 69 72 65 63 74 6f 72 79  isplay(directory
1c940 29 29 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72  )), traceCategor
1c950 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y);....         
1c960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
1c970 6f 6e 74 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20  ontinue;..      
1c980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
1c990 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1c9a0 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 66 69         string fi
1c9b0 6c 65 4e 61 6d 65 20 3d 20 50 61 74 68 2e 43 6f  leName = Path.Co
1c9c0 6d 62 69 6e 65 28 64 69 72 65 63 74 6f 72 79 2c  mbine(directory,
1c9d0 20 22 6d 61 63 68 69 6e 65 2e 63 6f 6e 66 69 67   "machine.config
1c9e0 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ");....         
1c9f0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21             if (!
1ca00 46 69 6c 65 2e 45 78 69 73 74 73 28 66 69 6c 65  File.Exists(file
1ca10 4e 61 6d 65 29 29 0d 0a 20 20 20 20 20 20 20 20  Name))..        
1ca20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
1ca30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ca40 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e         TraceOps.
1ca50 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20  Trace(..        
1ca60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ca70 20 20 20 20 54 72 61 63 65 50 72 69 6f 72 69 74      TracePriorit
1ca80 79 2e 4c 6f 77 2c 20 74 72 61 63 65 43 61 6c 6c  y.Low, traceCall
1ca90 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72  back, String.For
1caa0 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
1cab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cac0 20 20 22 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72    ".NET Framewor
1cad0 6b 20 7b 30 7d 20 66 69 6c 65 20 7b 31 7d 20 64  k {0} file {1} d
1cae0 6f 65 73 20 6e 6f 74 20 65 78 69 73 74 2c 20 22  oes not exist, "
1caf0 20 2b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   +..            
1cb00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cb10 22 73 6b 69 70 70 69 6e 67 2e 2e 2e 22 2c 20 46  "skipping...", F
1cb20 6f 72 44 69 73 70 6c 61 79 28 66 72 61 6d 65 77  orDisplay(framew
1cb30 6f 72 6b 56 65 72 73 69 6f 6e 29 2c 0d 0a 20 20  orkVersion),..  
1cb40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cb50 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73            ForDis
1cb60 70 6c 61 79 28 66 69 6c 65 4e 61 6d 65 29 29 2c  play(fileName)),
1cb70 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29 3b   traceCategory);
1cb80 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1cb90 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74              cont
1cba0 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  inue;..         
1cbb0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
1cbc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cbd0 20 20 20 20 62 6f 6f 6c 20 6c 6f 63 61 6c 53 61      bool localSa
1cbe0 76 65 64 20 3d 20 66 61 6c 73 65 3b 0d 0a 0d 0a  ved = false;....
1cbf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cc00 20 20 20 20 69 66 20 28 21 63 61 6c 6c 62 61 63      if (!callbac
1cc10 6b 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  k(..            
1cc20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cc30 66 69 6c 65 4e 61 6d 65 2c 20 69 6e 76 61 72 69  fileName, invari
1cc40 61 6e 74 2c 20 6e 61 6d 65 2c 20 64 65 73 63 72  ant, name, descr
1cc50 69 70 74 69 6f 6e 2c 20 74 79 70 65 4e 61 6d 65  iption, typeName
1cc60 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
1cc70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61                 a
1cc80 73 73 65 6d 62 6c 79 4e 61 6d 65 2c 20 63 6c 69  ssemblyName, cli
1cc90 65 6e 74 44 61 74 61 2c 20 77 68 61 74 49 66 2c  entData, whatIf,
1cca0 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20   verbose,..     
1ccb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ccc0 20 20 20 20 20 20 20 72 65 66 20 6c 6f 63 61 6c         ref local
1ccd0 53 61 76 65 64 2c 20 72 65 66 20 65 72 72 6f 72  Saved, ref error
1cce0 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
1ccf0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
1cd00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cd10 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
1cd20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1cd30 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
1cd40 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73               els
1cd50 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
1cd60 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
1cd70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cd80 20 20 69 66 20 28 6c 6f 63 61 6c 53 61 76 65 64    if (localSaved
1cd90 20 26 26 20 21 73 61 76 65 64 29 0d 0a 20 20 20   && !saved)..   
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 20 73 61 76 65 64 20 3d           saved =
1cdc0 20 74 72 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20   true;....      
1cdd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cde0 20 20 69 66 20 28 76 65 72 62 6f 73 65 29 0d 0a    if (verbose)..
1cdf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ce00 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63              Trac
1ce10 65 4f 70 73 2e 54 72 61 63 65 28 0d 0a 20 20 20  eOps.Trace(..   
1ce20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ce30 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
1ce40 63 65 50 72 69 6f 72 69 74 79 2e 4c 6f 77 65 73  cePriority.Lowes
1ce50 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t,..            
1ce60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ce70 20 20 20 20 74 72 61 63 65 43 61 6c 6c 62 61 63      traceCallbac
1ce80 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74  k, String.Format
1ce90 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
1cea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ceb0 20 20 20 22 6c 6f 63 61 6c 53 61 76 65 64 20 3d     "localSaved =
1cec0 20 7b 30 7d 2c 20 73 61 76 65 64 20 3d 20 7b 31   {0}, saved = {1
1ced0 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }",..           
1cee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cef0 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28       ForDisplay(
1cf00 6c 6f 63 61 6c 53 61 76 65 64 29 2c 20 46 6f 72  localSaved), For
1cf10 44 69 73 70 6c 61 79 28 73 61 76 65 64 29 29 2c  Display(saved)),
1cf20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1cf30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cf40 20 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29    traceCategory)
1cf50 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
1cf60 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
1cf70 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
1cf80 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
1cf90 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
1cfa0 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20   true;..        
1cfb0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  }....        ///
1cfc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cfd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cfe0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cff0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d000 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
1d010 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 62  private static b
1d020 6f 6f 6c 20 46 6f 72 45 61 63 68 46 72 61 6d 65  ool ForEachFrame
1d030 77 6f 72 6b 52 65 67 69 73 74 72 79 28 0d 0a 20  workRegistry(.. 
1d040 20 20 20 20 20 20 20 20 20 20 20 46 72 61 6d 65             Frame
1d050 77 6f 72 6b 4c 69 73 74 20 66 72 61 6d 65 77 6f  workList framewo
1d060 72 6b 4c 69 73 74 2c 0d 0a 20 20 20 20 20 20 20  rkList,..       
1d070 20 20 20 20 20 46 72 61 6d 65 77 6f 72 6b 52 65       FrameworkRe
1d080 67 69 73 74 72 79 43 61 6c 6c 62 61 63 6b 20 63  gistryCallback c
1d090 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20  allback,..      
1d0a0 20 20 20 20 20 20 6f 62 6a 65 63 74 20 63 6c 69        object cli
1d0b0 65 6e 74 44 61 74 61 2c 0d 0a 20 20 20 20 20 20  entData,..      
1d0c0 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49        bool whatI
1d0d0 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f,..            
1d0e0 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a 20  bool verbose,.. 
1d0f0 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20 73             ref s
1d100 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20  tring error..   
1d110 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
1d120 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1d130 20 20 20 69 66 20 28 66 72 61 6d 65 77 6f 72 6b     if (framework
1d140 4c 69 73 74 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  List == null).. 
1d150 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
1d160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
1d170 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 66  ror = "invalid f
1d180 72 61 6d 65 77 6f 72 6b 20 6c 69 73 74 22 3b 0d  ramework list";.
1d190 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1d1a0 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
1d1b0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
1d1c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67  .            Reg
1d1d0 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79  istryKey rootKey
1d1e0 20 3d 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74   = frameworkList
1d1f0 2e 52 6f 6f 74 4b 65 79 3b 0d 0a 0d 0a 20 20 20  .RootKey;....   
1d200 20 20 20 20 20 20 20 20 20 69 66 20 28 72 6f 6f           if (roo
1d210 74 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  tKey == null).. 
1d220 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
1d230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
1d240 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 72  ror = "invalid r
1d250 6f 6f 74 20 6b 65 79 22 3b 0d 0a 20 20 20 20 20  oot key";..     
1d260 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
1d270 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
1d280 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
1d290 20 20 20 20 20 20 20 69 66 20 28 21 4f 62 6a 65         if (!Obje
1d2a0 63 74 2e 52 65 66 65 72 65 6e 63 65 45 71 75 61  ct.ReferenceEqua
1d2b0 6c 73 28 72 6f 6f 74 4b 65 79 2c 20 52 65 67 69  ls(rootKey, Regi
1d2c0 73 74 72 79 2e 43 75 72 72 65 6e 74 55 73 65 72  stry.CurrentUser
1d2d0 29 20 26 26 0d 0a 20 20 20 20 20 20 20 20 20 20  ) &&..          
1d2e0 20 20 20 20 20 20 21 4f 62 6a 65 63 74 2e 52 65        !Object.Re
1d2f0 66 65 72 65 6e 63 65 45 71 75 61 6c 73 28 72 6f  ferenceEquals(ro
1d300 6f 74 4b 65 79 2c 20 52 65 67 69 73 74 72 79 2e  otKey, Registry.
1d310 4c 6f 63 61 6c 4d 61 63 68 69 6e 65 29 29 0d 0a  LocalMachine))..
1d320 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
1d330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
1d340 72 72 6f 72 20 3d 20 22 72 6f 6f 74 20 6b 65 79  rror = "root key
1d350 20 6d 75 73 74 20 62 65 20 70 65 72 2d 75 73 65   must be per-use
1d360 72 20 6f 72 20 70 65 72 2d 6d 61 63 68 69 6e 65  r or per-machine
1d370 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ";..            
1d380 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
1d390 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
1d3a0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1d3b0 69 66 20 28 66 72 61 6d 65 77 6f 72 6b 4c 69 73  if (frameworkLis
1d3c0 74 2e 4e 61 6d 65 73 20 3d 3d 20 6e 75 6c 6c 29  t.Names == null)
1d3d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
1d3e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1d3f0 20 65 72 72 6f 72 20 3d 20 22 6e 6f 20 66 72 61   error = "no fra
1d400 6d 65 77 6f 72 6b 20 6e 61 6d 65 73 20 66 6f 75  mework names fou
1d410 6e 64 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  nd";..          
1d420 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
1d430 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se;..           
1d440 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
1d450 20 20 69 66 20 28 66 72 61 6d 65 77 6f 72 6b 4c    if (frameworkL
1d460 69 73 74 2e 56 65 72 73 69 6f 6e 73 20 3d 3d 20  ist.Versions == 
1d470 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
1d480 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
1d490 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 6e        error = "n
1d4a0 6f 20 66 72 61 6d 65 77 6f 72 6b 20 76 65 72 73  o framework vers
1d4b0 69 6f 6e 73 20 66 6f 75 6e 64 22 3b 0d 0a 20 20  ions found";..  
1d4c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
1d4d0 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20  turn false;..   
1d4e0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
1d4f0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 66 72            if (fr
1d500 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 50 6c 61 74  ameworkList.Plat
1d510 66 6f 72 6d 4e 61 6d 65 73 20 3d 3d 20 6e 75 6c  formNames == nul
1d520 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
1d530 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
1d540 20 20 20 65 72 72 6f 72 20 3d 20 22 6e 6f 20 70     error = "no p
1d550 6c 61 74 66 6f 72 6d 20 6e 61 6d 65 73 20 66 6f  latform names fo
1d560 75 6e 64 22 3b 0d 0a 20 20 20 20 20 20 20 20 20  und";..         
1d570 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
1d580 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lse;..          
1d590 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
1d5a0 20 20 20 69 66 20 28 66 72 61 6d 65 77 6f 72 6b     if (framework
1d5b0 4c 69 73 74 2e 4e 61 6d 65 73 2e 43 6f 75 6e 74  List.Names.Count
1d5c0 20 21 3d 20 66 72 61 6d 65 77 6f 72 6b 4c 69 73   != frameworkLis
1d5d0 74 2e 50 6c 61 74 66 6f 72 6d 4e 61 6d 65 73 2e  t.PlatformNames.
1d5e0 43 6f 75 6e 74 29 0d 0a 20 20 20 20 20 20 20 20  Count)..        
1d5f0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1d600 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 53         error = S
1d610 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22 66 72  tring.Format("fr
1d620 61 6d 65 77 6f 72 6b 20 6e 61 6d 65 20 63 6f 75  amework name cou
1d630 6e 74 20 7b 30 7d 20 64 6f 65 73 20 6e 6f 74 20  nt {0} does not 
1d640 22 20 2b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  " +..           
1d650 20 20 20 20 20 20 20 20 20 22 6d 61 74 63 68 20           "match 
1d660 70 6c 61 74 66 6f 72 6d 20 6e 61 6d 65 20 63 6f  platform name co
1d670 75 6e 74 20 7b 31 7d 22 2c 20 66 72 61 6d 65 77  unt {1}", framew
1d680 6f 72 6b 4c 69 73 74 2e 4e 61 6d 65 73 2e 43 6f  orkList.Names.Co
1d690 75 6e 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  unt,..          
1d6a0 20 20 20 20 20 20 20 20 20 20 66 72 61 6d 65 77            framew
1d6b0 6f 72 6b 4c 69 73 74 2e 50 6c 61 74 66 6f 72 6d  orkList.Platform
1d6c0 4e 61 6d 65 73 2e 43 6f 75 6e 74 29 3b 0d 0a 0d  Names.Count);...
1d6d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1d6e0 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
1d6f0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
1d700 0a 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72  .            for
1d710 20 28 69 6e 74 20 69 6e 64 65 78 20 3d 20 30 3b   (int index = 0;
1d720 20 69 6e 64 65 78 20 3c 20 66 72 61 6d 65 77 6f   index < framewo
1d730 72 6b 4c 69 73 74 2e 4e 61 6d 65 73 2e 43 6f 75  rkList.Names.Cou
1d740 6e 74 3b 20 69 6e 64 65 78 2b 2b 29 0d 0a 20 20  nt; index++)..  
1d750 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1d760 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
1d770 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1d780 20 2f 2f 20 4e 4f 54 45 3a 20 47 72 61 62 20 74   // NOTE: Grab t
1d790 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 66  he name of the f
1d7a0 72 61 6d 65 77 6f 72 6b 20 28 65 2e 67 2e 20 22  ramework (e.g. "
1d7b0 2e 4e 45 54 46 72 61 6d 65 77 6f 72 6b 22 29 0d  .NETFramework").
1d7c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1d7d0 20 2f 2f 20 20 20 20 20 20 20 61 6e 64 20 74 68   //       and th
1d7e0 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 70 6c  e name of the pl
1d7f0 61 74 66 6f 72 6d 20 28 65 2e 67 2e 20 22 57 69  atform (e.g. "Wi
1d800 6e 64 6f 77 73 43 45 22 29 2e 0d 0a 20 20 20 20  ndowsCE")...    
1d810 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
1d820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d830 73 74 72 69 6e 67 20 66 72 61 6d 65 77 6f 72 6b  string framework
1d840 4e 61 6d 65 20 3d 20 66 72 61 6d 65 77 6f 72 6b  Name = framework
1d850 4c 69 73 74 2e 4e 61 6d 65 73 5b 69 6e 64 65 78  List.Names[index
1d860 5d 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ];..            
1d870 20 20 20 20 73 74 72 69 6e 67 20 70 6c 61 74 66      string platf
1d880 6f 72 6d 4e 61 6d 65 20 3d 20 66 72 61 6d 65 77  ormName = framew
1d890 6f 72 6b 4c 69 73 74 2e 50 6c 61 74 66 6f 72 6d  orkList.Platform
1d8a0 4e 61 6d 65 73 5b 69 6e 64 65 78 5d 3b 0d 0a 0d  Names[index];...
1d8b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1d8c0 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
1d8d0 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 47 72       // NOTE: Gr
1d8e0 61 62 20 74 68 65 20 73 75 70 70 6f 72 74 65 64  ab the supported
1d8f0 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 74 68 69   versions of thi
1d900 73 20 70 61 72 74 69 63 75 6c 61 72 0d 0a 20 20  s particular..  
1d910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
1d920 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b         framework
1d930 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1d940 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
1d950 20 20 20 20 20 20 20 56 65 72 73 69 6f 6e 4c 69         VersionLi
1d960 73 74 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73  st frameworkVers
1d970 69 6f 6e 4c 69 73 74 3b 0d 0a 0d 0a 20 20 20 20  ionList;....    
1d980 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
1d990 21 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 2e 56  !frameworkList.V
1d9a0 65 72 73 69 6f 6e 73 2e 54 72 79 47 65 74 56 61  ersions.TryGetVa
1d9b0 6c 75 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20  lue(..          
1d9c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 72                fr
1d9d0 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 20 6f 75 74  ameworkName, out
1d9e0 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f   frameworkVersio
1d9f0 6e 4c 69 73 74 29 20 7c 7c 0d 0a 20 20 20 20 20  nList) ||..     
1da00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28                 (
1da10 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e  frameworkVersion
1da20 4c 69 73 74 20 3d 3d 20 6e 75 6c 6c 29 29 0d 0a  List == null))..
1da30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1da40 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
1da50 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b         continue;
1da60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1da70 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
1da80 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 28         foreach (
1da90 56 65 72 73 69 6f 6e 20 66 72 61 6d 65 77 6f 72  Version framewor
1daa0 6b 56 65 72 73 69 6f 6e 20 69 6e 20 66 72 61 6d  kVersion in fram
1dab0 65 77 6f 72 6b 56 65 72 73 69 6f 6e 4c 69 73 74  eworkVersionList
1dac0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
1dad0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
1dae0 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f            TraceO
1daf0 70 73 2e 54 72 61 63 65 28 0d 0a 20 20 20 20 20  ps.Trace(..     
1db00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1db10 20 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79     TracePriority
1db20 2e 4c 6f 77 65 72 2c 20 74 72 61 63 65 43 61 6c  .Lower, traceCal
1db30 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f  lback, String.Fo
1db40 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
1db50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
1db60 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 20 3d 20  frameworkName = 
1db70 7b 30 7d 2c 20 66 72 61 6d 65 77 6f 72 6b 56 65  {0}, frameworkVe
1db80 72 73 69 6f 6e 20 3d 20 7b 31 7d 2c 20 22 20 2b  rsion = {1}, " +
1db90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1dba0 20 20 20 20 20 20 20 20 20 20 22 70 6c 61 74 66            "platf
1dbb0 6f 72 6d 4e 61 6d 65 20 3d 20 7b 32 7d 22 2c 20  ormName = {2}", 
1dbc0 46 6f 72 44 69 73 70 6c 61 79 28 66 72 61 6d 65  ForDisplay(frame
1dbd0 77 6f 72 6b 4e 61 6d 65 29 2c 0d 0a 20 20 20 20  workName),..    
1dbe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dbf0 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79 28 66      ForDisplay(f
1dc00 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 29  rameworkVersion)
1dc10 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
1dc20 20 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69             ForDi
1dc30 73 70 6c 61 79 28 70 6c 61 74 66 6f 72 6d 4e 61  splay(platformNa
1dc40 6d 65 29 29 2c 20 74 72 61 63 65 43 61 74 65 67  me)), traceCateg
1dc50 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ory);....       
1dc60 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
1dc70 28 21 48 61 76 65 46 72 61 6d 65 77 6f 72 6b 28  (!HaveFramework(
1dc80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1dc90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f                ro
1dca0 6f 74 4b 65 79 2c 20 66 72 61 6d 65 77 6f 72 6b  otKey, framework
1dcb0 4e 61 6d 65 2c 20 66 72 61 6d 65 77 6f 72 6b 56  Name, frameworkV
1dcc0 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20  ersion,..       
1dcd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dce0 20 20 20 20 20 70 6c 61 74 66 6f 72 6d 4e 61 6d       platformNam
1dcf0 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f  e, whatIf, verbo
1dd00 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  se))..          
1dd10 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1dd20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dd30 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e 54 72       TraceOps.Tr
1dd40 61 63 65 28 54 72 61 63 65 50 72 69 6f 72 69 74  ace(TracePriorit
1dd50 79 2e 4c 6f 77 2c 20 74 72 61 63 65 43 61 6c 6c  y.Low, traceCall
1dd60 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20  back,..         
1dd70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dd80 20 20 20 22 2e 4e 45 54 20 46 72 61 6d 65 77 6f     ".NET Framewo
1dd90 72 6b 20 6e 6f 74 20 66 6f 75 6e 64 2c 20 73 6b  rk not found, sk
1dda0 69 70 70 69 6e 67 2e 2e 2e 22 2c 0d 0a 20 20 20  ipping...",..   
1ddb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ddc0 20 20 20 20 20 20 20 20 20 74 72 61 63 65 43 61           traceCa
1ddd0 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
1dde0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ddf0 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 20      continue;.. 
1de00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1de10 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
1de20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
1de30 63 61 6c 6c 62 61 63 6b 20 3d 3d 20 6e 75 6c 6c  callback == null
1de40 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
1de50 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69             conti
1de60 6e 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  nue;....        
1de70 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
1de80 21 63 61 6c 6c 62 61 63 6b 28 0d 0a 20 20 20 20  !callback(..    
1de90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1dea0 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c          rootKey,
1deb0 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 20   frameworkName, 
1dec0 66 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e  frameworkVersion
1ded0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
1dee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70                 p
1def0 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c 20 63 6c 69  latformName, cli
1df00 65 6e 74 44 61 74 61 2c 20 77 68 61 74 49 66 2c  entData, whatIf,
1df10 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20   verbose,..     
1df20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1df30 20 20 20 20 20 20 20 72 65 66 20 65 72 72 6f 72         ref error
1df40 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
1df50 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
1df60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1df70 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
1df80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1df90 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
1dfa0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
1dfb0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
1dfc0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
1dfd0 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d  true;..        }
1dfe0 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65  ..        #endre
1dff0 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gion....        
1e000 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e010 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e020 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e030 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e040 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
1e050 20 20 20 23 72 65 67 69 6f 6e 20 50 65 72 2d 56     #region Per-V
1e060 69 73 75 61 6c 20 53 74 75 64 69 6f 20 56 65 72  isual Studio Ver
1e070 73 69 6f 6e 20 48 61 6e 64 6c 69 6e 67 0d 0a 20  sion Handling.. 
1e080 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
1e090 74 61 74 69 63 20 76 6f 69 64 20 49 6e 69 74 69  tatic void Initi
1e0a0 61 6c 69 7a 65 56 73 4c 69 73 74 28 0d 0a 20 20  alizeVsList(..  
1e0b0 20 20 20 20 20 20 20 20 20 20 43 6f 6e 66 69 67            Config
1e0c0 75 72 61 74 69 6f 6e 20 63 6f 6e 66 69 67 75 72  uration configur
1e0d0 61 74 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20  ation,..        
1e0e0 20 20 20 20 72 65 66 20 56 73 4c 69 73 74 20 76      ref VsList v
1e0f0 73 4c 69 73 74 0d 0a 20 20 20 20 20 20 20 20 20  sList..         
1e100 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d     )..        {.
1e110 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
1e120 28 76 73 4c 69 73 74 20 3d 3d 20 6e 75 6c 6c 29  (vsList == null)
1e130 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1e140 20 20 76 73 4c 69 73 74 20 3d 20 6e 65 77 20 56    vsList = new V
1e150 73 4c 69 73 74 28 29 3b 0d 0a 0d 0a 20 20 20 20  sList();....    
1e160 20 20 20 20 20 20 20 20 69 66 20 28 76 73 4c 69          if (vsLi
1e170 73 74 2e 52 6f 6f 74 4b 65 79 20 3d 3d 20 6e 75  st.RootKey == nu
1e180 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
1e190 20 20 20 20 20 76 73 4c 69 73 74 2e 52 6f 6f 74       vsList.Root
1e1a0 4b 65 79 20 3d 20 52 65 67 69 73 74 72 79 2e 4c  Key = Registry.L
1e1b0 6f 63 61 6c 4d 61 63 68 69 6e 65 3b 0d 0a 0d 0a  ocalMachine;....
1e1c0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
1e1d0 76 73 4c 69 73 74 2e 56 65 72 73 69 6f 6e 73 20  vsList.Versions 
1e1e0 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
1e1f0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1e200 20 20 20 20 20 20 20 20 20 76 73 4c 69 73 74 2e           vsList.
1e210 56 65 72 73 69 6f 6e 73 20 3d 20 6e 65 77 20 56  Versions = new V
1e220 65 72 73 69 6f 6e 4c 69 73 74 28 29 3b 0d 0a 0d  ersionList();...
1e230 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1e240 20 2f 2f 20 76 73 4c 69 73 74 2e 56 65 72 73 69   // vsList.Versi
1e250 6f 6e 73 2e 41 64 64 28 6e 65 77 20 56 65 72 73  ons.Add(new Vers
1e260 69 6f 6e 28 38 2c 20 30 29 29 3b 20 2f 2f 20 56  ion(8, 0)); // V
1e270 69 73 75 61 6c 20 53 74 75 64 69 6f 20 32 30 30  isual Studio 200
1e280 35 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  5....           
1e290 20 20 20 20 20 69 66 20 28 28 63 6f 6e 66 69 67       if ((config
1e2a0 75 72 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29  uration == null)
1e2b0 20 7c 7c 20 21 63 6f 6e 66 69 67 75 72 61 74 69   || !configurati
1e2c0 6f 6e 2e 4e 6f 56 73 32 30 30 38 29 0d 0a 20 20  on.NoVs2008)..  
1e2d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e2e0 20 20 76 73 4c 69 73 74 2e 56 65 72 73 69 6f 6e    vsList.Version
1e2f0 73 2e 41 64 64 28 6e 65 77 20 56 65 72 73 69 6f  s.Add(new Versio
1e300 6e 28 39 2c 20 30 29 29 3b 20 2f 2f 20 56 69 73  n(9, 0)); // Vis
1e310 75 61 6c 20 53 74 75 64 69 6f 20 32 30 30 38 0d  ual Studio 2008.
1e320 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1e330 20 20 20 69 66 20 28 28 63 6f 6e 66 69 67 75 72     if ((configur
1e340 61 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20 7c  ation == null) |
1e350 7c 20 21 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  | !configuration
1e360 2e 4e 6f 56 73 32 30 31 30 29 0d 0a 20 20 20 20  .NoVs2010)..    
1e370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e380 76 73 4c 69 73 74 2e 56 65 72 73 69 6f 6e 73 2e  vsList.Versions.
1e390 41 64 64 28 6e 65 77 20 56 65 72 73 69 6f 6e 28  Add(new Version(
1e3a0 31 30 2c 20 30 29 29 3b 2f 2f 20 56 69 73 75 61  10, 0));// Visua
1e3b0 6c 20 53 74 75 64 69 6f 20 32 30 31 30 0d 0a 20  l Studio 2010.. 
1e3c0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
1e3d0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
1e3e0 76 73 4c 69 73 74 2e 46 72 61 6d 65 77 6f 72 6b  vsList.Framework
1e3f0 56 65 72 73 69 6f 6e 73 20 3d 3d 20 6e 75 6c 6c  Versions == null
1e400 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
1e410 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1e420 20 20 76 73 4c 69 73 74 2e 46 72 61 6d 65 77 6f    vsList.Framewo
1e430 72 6b 56 65 72 73 69 6f 6e 73 20 3d 20 6e 65 77  rkVersions = new
1e440 20 56 65 72 73 69 6f 6e 4c 69 73 74 4d 61 70 28   VersionListMap(
1e450 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
1e460 20 20 20 20 20 20 2f 2f 20 76 73 4c 69 73 74 2e        // vsList.
1e470 46 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e  FrameworkVersion
1e480 73 2e 41 64 64 28 6e 65 77 20 56 65 72 73 69 6f  s.Add(new Versio
1e490 6e 28 38 2c 20 30 29 2c 0d 0a 20 20 20 20 20 20  n(8, 0),..      
1e4a0 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
1e4b0 20 6e 65 77 20 56 65 72 73 69 6f 6e 4c 69 73 74   new VersionList
1e4c0 28 6e 65 77 20 56 65 72 73 69 6f 6e 5b 5d 20 7b  (new Version[] {
1e4d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1e4e0 20 20 2f 2f 20 20 20 20 20 20 20 20 20 6e 65 77    //         new
1e4f0 20 56 65 72 73 69 6f 6e 28 32 2c 20 30 2c 20 35   Version(2, 0, 5
1e500 30 37 32 37 29 20 7d 29 29 3b 0d 0a 0d 0a 20 20  0727) }));....  
1e510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
1e520 20 28 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e   ((configuration
1e530 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 21 63 6f   == null) || !co
1e540 6e 66 69 67 75 72 61 74 69 6f 6e 2e 4e 6f 56 73  nfiguration.NoVs
1e550 32 30 30 38 29 0d 0a 20 20 20 20 20 20 20 20 20  2008)..         
1e560 20 20 20 20 20 20 20 20 20 20 20 76 73 4c 69 73             vsLis
1e570 74 2e 46 72 61 6d 65 77 6f 72 6b 56 65 72 73 69  t.FrameworkVersi
1e580 6f 6e 73 2e 41 64 64 28 6e 65 77 20 56 65 72 73  ons.Add(new Vers
1e590 69 6f 6e 28 39 2c 20 30 29 2c 0d 0a 20 20 20 20  ion(9, 0),..    
1e5a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e5b0 20 20 20 20 6e 65 77 20 56 65 72 73 69 6f 6e 4c      new VersionL
1e5c0 69 73 74 28 6e 65 77 20 56 65 72 73 69 6f 6e 5b  ist(new Version[
1e5d0 5d 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ] {..           
1e5e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e5f0 20 6e 65 77 20 56 65 72 73 69 6f 6e 28 32 2c 20   new Version(2, 
1e600 30 2c 20 35 30 37 32 37 29 20 7d 29 29 3b 0d 0a  0, 50727) }));..
1e610 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1e620 20 20 69 66 20 28 28 63 6f 6e 66 69 67 75 72 61    if ((configura
1e630 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c  tion == null) ||
1e640 20 21 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e   !configuration.
1e650 4e 6f 56 73 32 30 31 30 29 0d 0a 20 20 20 20 20  NoVs2010)..     
1e660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76                 v
1e670 73 4c 69 73 74 2e 46 72 61 6d 65 77 6f 72 6b 56  sList.FrameworkV
1e680 65 72 73 69 6f 6e 73 2e 41 64 64 28 6e 65 77 20  ersions.Add(new 
1e690 56 65 72 73 69 6f 6e 28 31 30 2c 20 30 29 2c 0d  Version(10, 0),.
1e6a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1e6b0 20 20 20 20 20 20 20 20 20 6e 65 77 20 56 65 72           new Ver
1e6c0 73 69 6f 6e 4c 69 73 74 28 6e 65 77 20 56 65 72  sionList(new Ver
1e6d0 73 69 6f 6e 5b 5d 20 7b 0d 0a 20 20 20 20 20 20  sion[] {..      
1e6e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e6f0 20 20 20 20 20 20 6e 65 77 20 56 65 72 73 69 6f        new Versio
1e700 6e 28 32 2c 20 30 2c 20 35 30 37 32 37 29 2c 0d  n(2, 0, 50727),.
1e710 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1e720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e730 20 6e 65 77 20 56 65 72 73 69 6f 6e 28 34 2c 20   new Version(4, 
1e740 30 2c 20 33 30 33 31 39 29 20 7d 29 29 3b 0d 0a  0, 30319) }));..
1e750 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
1e760 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
1e770 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
1e780 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e790 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e7a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e7b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
1e7c0 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
1e7d0 74 61 74 69 63 20 62 6f 6f 6c 20 48 61 76 65 56  tatic bool HaveV
1e7e0 73 56 65 72 73 69 6f 6e 28 0d 0a 20 20 20 20 20  sVersion(..     
1e7f0 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79 4b         RegistryK
1e800 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20  ey rootKey,..   
1e810 20 20 20 20 20 20 20 20 20 56 65 72 73 69 6f 6e           Version
1e820 20 76 73 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20   vsVersion,..   
1e830 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68           bool wh
1e840 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20  atIf,..         
1e850 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 0d     bool verbose.
1e860 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a  .            )..
1e870 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
1e880 20 20 20 20 20 20 20 69 66 20 28 76 73 56 65 72         if (vsVer
1e890 73 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  sion == null).. 
1e8a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
1e8b0 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a  eturn false;....
1e8c0 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
1e8d0 6e 67 20 66 6f 72 6d 61 74 20 3d 20 22 53 6f 66  ng format = "Sof
1e8e0 74 77 61 72 65 5c 5c 4d 69 63 72 6f 73 6f 66 74  tware\\Microsoft
1e8f0 5c 5c 56 69 73 75 61 6c 53 74 75 64 69 6f 5c 5c  \\VisualStudio\\
1e900 7b 30 7d 22 3b 0d 0a 20 20 20 20 20 20 20 20 20  {0}";..         
1e910 20 20 20 73 74 72 69 6e 67 20 6b 65 79 4e 61 6d     string keyNam
1e920 65 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  e = String.Forma
1e930 74 28 66 6f 72 6d 61 74 2c 20 76 73 56 65 72 73  t(format, vsVers
1e940 69 6f 6e 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ion);....       
1e950 20 20 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b       using (Mock
1e960 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65 79 20  RegistryKey key 
1e970 3d 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72  = RegistryHelper
1e980 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20  .OpenSubKey(..  
1e990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e9a0 20 20 72 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e 61    rootKey, keyNa
1e9b0 6d 65 2c 20 66 61 6c 73 65 2c 20 77 68 61 74 49  me, false, whatI
1e9c0 66 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20  f, verbose))..  
1e9d0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1e9e0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
1e9f0 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  (key == null).. 
1ea00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ea10 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
1ea20 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1ea30 20 20 20 20 6f 62 6a 65 63 74 20 76 61 6c 75 65      object value
1ea40 20 3d 20 52 65 67 69 73 74 72 79 48 65 6c 70 65   = RegistryHelpe
1ea50 72 2e 47 65 74 56 61 6c 75 65 28 0d 0a 20 20 20  r.GetValue(..   
1ea60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ea70 20 6b 65 79 2c 20 22 49 6e 73 74 61 6c 6c 44 69   key, "InstallDi
1ea80 72 22 2c 20 6e 75 6c 6c 2c 20 77 68 61 74 49 66  r", null, whatIf
1ea90 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20  , verbose);.... 
1eaa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
1eab0 66 20 28 21 28 76 61 6c 75 65 20 69 73 20 73 74  f (!(value is st
1eac0 72 69 6e 67 29 29 0d 0a 20 20 20 20 20 20 20 20  ring))..        
1ead0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
1eae0 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20  rn false;....   
1eaf0 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72               str
1eb00 69 6e 67 20 64 69 72 65 63 74 6f 72 79 20 3d 20  ing directory = 
1eb10 28 73 74 72 69 6e 67 29 76 61 6c 75 65 3b 0d 0a  (string)value;..
1eb20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1eb30 20 20 69 66 20 28 53 74 72 69 6e 67 2e 49 73 4e    if (String.IsN
1eb40 75 6c 6c 4f 72 45 6d 70 74 79 28 64 69 72 65 63  ullOrEmpty(direc
1eb50 74 6f 72 79 29 29 0d 0a 20 20 20 20 20 20 20 20  tory))..        
1eb60 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
1eb70 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20  rn false;....   
1eb80 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
1eb90 28 21 44 69 72 65 63 74 6f 72 79 2e 45 78 69 73  (!Directory.Exis
1eba0 74 73 28 64 69 72 65 63 74 6f 72 79 29 29 0d 0a  ts(directory))..
1ebb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ebc0 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
1ebd0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
1ebe0 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65       return true
1ebf0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
1ec00 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
1ec10 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
1ec20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ec30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ec40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ec50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
1ec60 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
1ec70 65 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 46 6f  e static bool Fo
1ec80 72 45 61 63 68 56 73 56 65 72 73 69 6f 6e 52 65  rEachVsVersionRe
1ec90 67 69 73 74 72 79 28 0d 0a 20 20 20 20 20 20 20  gistry(..       
1eca0 20 20 20 20 20 56 73 4c 69 73 74 20 76 73 4c 69       VsList vsLi
1ecb0 73 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  st,..           
1ecc0 20 56 69 73 75 61 6c 53 74 75 64 69 6f 52 65 67   VisualStudioReg
1ecd0 69 73 74 72 79 43 61 6c 6c 62 61 63 6b 20 63 61  istryCallback ca
1ece0 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20 20  llback,..       
1ecf0 20 20 20 20 20 50 61 63 6b 61 67 65 20 70 61 63       Package pac
1ed00 6b 61 67 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  kage,..         
1ed10 20 20 20 6f 62 6a 65 63 74 20 63 6c 69 65 6e 74     object client
1ed20 44 61 74 61 2c 0d 0a 20 20 20 20 20 20 20 20 20  Data,..         
1ed30 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d     bool whatIf,.
1ed40 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
1ed50 6c 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20  l verbose,..    
1ed60 20 20 20 20 20 20 20 20 72 65 66 20 73 74 72 69          ref stri
1ed70 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20  ng error..      
1ed80 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20        )..       
1ed90 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1eda0 69 66 20 28 76 73 4c 69 73 74 20 3d 3d 20 6e 75  if (vsList == nu
1edb0 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
1edc0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1edd0 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69 6e 76      error = "inv
1ede0 61 6c 69 64 20 56 53 20 6c 69 73 74 22 3b 0d 0a  alid VS list";..
1edf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ee00 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20  return false;.. 
1ee10 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
1ee20 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69              Regi
1ee30 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 20  stryKey rootKey 
1ee40 3d 20 76 73 4c 69 73 74 2e 52 6f 6f 74 4b 65 79  = vsList.RootKey
1ee50 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
1ee60 20 69 66 20 28 72 6f 6f 74 4b 65 79 20 3d 3d 20   if (rootKey == 
1ee70 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
1ee80 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
1ee90 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69        error = "i
1eea0 6e 76 61 6c 69 64 20 72 6f 6f 74 20 6b 65 79 22  nvalid root key"
1eeb0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
1eec0 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
1eed0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
1eee0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
1eef0 66 20 28 21 4f 62 6a 65 63 74 2e 52 65 66 65 72  f (!Object.Refer
1ef00 65 6e 63 65 45 71 75 61 6c 73 28 72 6f 6f 74 4b  enceEquals(rootK
1ef10 65 79 2c 20 52 65 67 69 73 74 72 79 2e 43 75 72  ey, Registry.Cur
1ef20 72 65 6e 74 55 73 65 72 29 20 26 26 0d 0a 20 20  rentUser) &&..  
1ef30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 21 4f                !O
1ef40 62 6a 65 63 74 2e 52 65 66 65 72 65 6e 63 65 45  bject.ReferenceE
1ef50 71 75 61 6c 73 28 72 6f 6f 74 4b 65 79 2c 20 52  quals(rootKey, R
1ef60 65 67 69 73 74 72 79 2e 4c 6f 63 61 6c 4d 61 63  egistry.LocalMac
1ef70 68 69 6e 65 29 29 0d 0a 20 20 20 20 20 20 20 20  hine))..        
1ef80 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1ef90 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22         error = "
1efa0 72 6f 6f 74 20 6b 65 79 20 6d 75 73 74 20 62 65  root key must be
1efb0 20 70 65 72 2d 75 73 65 72 20 6f 72 20 70 65 72   per-user or per
1efc0 2d 6d 61 63 68 69 6e 65 22 3b 0d 0a 20 20 20 20  -machine";..    
1efd0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
1efe0 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
1eff0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
1f000 20 20 20 20 20 20 20 20 69 66 20 28 76 73 4c 69          if (vsLi
1f010 73 74 2e 56 65 72 73 69 6f 6e 73 20 3d 3d 20 6e  st.Versions == n
1f020 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
1f030 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
1f040 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 6e 6f       error = "no
1f050 20 56 53 20 76 65 72 73 69 6f 6e 73 20 66 6f 75   VS versions fou
1f060 6e 64 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  nd";..          
1f070 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
1f080 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se;..           
1f090 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
1f0a0 20 20 66 6f 72 65 61 63 68 20 28 56 65 72 73 69    foreach (Versi
1f0b0 6f 6e 20 76 73 56 65 72 73 69 6f 6e 20 69 6e 20  on vsVersion in 
1f0c0 76 73 4c 69 73 74 2e 56 65 72 73 69 6f 6e 73 29  vsList.Versions)
1f0d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
1f0e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1f0f0 20 54 72 61 63 65 4f 70 73 2e 54 72 61 63 65 28   TraceOps.Trace(
1f100 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1f110 20 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72        TracePrior
1f120 69 74 79 2e 4c 6f 77 65 72 2c 20 74 72 61 63 65  ity.Lower, trace
1f130 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67  Callback, String
1f140 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
1f150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 76                "v
1f160 73 56 65 72 73 69 6f 6e 20 3d 20 7b 30 7d 22 2c  sVersion = {0}",
1f170 20 46 6f 72 44 69 73 70 6c 61 79 28 76 73 56 65   ForDisplay(vsVe
1f180 72 73 69 6f 6e 29 29 2c 0d 0a 20 20 20 20 20 20  rsion)),..      
1f190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
1f1a0 61 63 65 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d  aceCategory);...
1f1b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1f1c0 20 69 66 20 28 21 48 61 76 65 56 73 56 65 72 73   if (!HaveVsVers
1f1d0 69 6f 6e 28 72 6f 6f 74 4b 65 79 2c 20 76 73 56  ion(rootKey, vsV
1f1e0 65 72 73 69 6f 6e 2c 20 77 68 61 74 49 66 2c 20  ersion, whatIf, 
1f1f0 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20  verbose))..     
1f200 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
1f210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f220 20 20 54 72 61 63 65 4f 70 73 2e 54 72 61 63 65    TraceOps.Trace
1f230 28 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 4c  (TracePriority.L
1f240 6f 77 2c 20 74 72 61 63 65 43 61 6c 6c 62 61 63  ow, traceCallbac
1f250 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  k,..            
1f260 20 20 20 20 20 20 20 20 20 20 20 20 22 56 69 73              "Vis
1f270 75 61 6c 20 53 74 75 64 69 6f 20 76 65 72 73 69  ual Studio versi
1f280 6f 6e 20 6e 6f 74 20 66 6f 75 6e 64 2c 20 73 6b  on not found, sk
1f290 69 70 70 69 6e 67 2e 2e 2e 22 2c 0d 0a 20 20 20  ipping...",..   
1f2a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f2b0 20 20 20 20 20 74 72 61 63 65 43 61 74 65 67 6f       traceCatego
1f2c0 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ry);....        
1f2d0 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74              cont
1f2e0 69 6e 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  inue;..         
1f2f0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
1f300 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
1f310 63 61 6c 6c 62 61 63 6b 20 3d 3d 20 6e 75 6c 6c  callback == null
1f320 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
1f330 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b         continue;
1f340 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1f350 20 20 20 20 69 66 20 28 21 63 61 6c 6c 62 61 63      if (!callbac
1f360 6b 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  k(..            
1f370 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74              root
1f380 4b 65 79 2c 20 76 73 56 65 72 73 69 6f 6e 2c 20  Key, vsVersion, 
1f390 70 61 63 6b 61 67 65 2c 20 63 6c 69 65 6e 74 44  package, clientD
1f3a0 61 74 61 2c 20 77 68 61 74 49 66 2c 0d 0a 20 20  ata, whatIf,..  
1f3b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f3c0 20 20 20 20 20 20 76 65 72 62 6f 73 65 2c 20 72        verbose, r
1f3d0 65 66 20 65 72 72 6f 72 29 29 0d 0a 20 20 20 20  ef error))..    
1f3e0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
1f3f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f400 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
1f410 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1f420 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
1f430 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
1f440 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a    return true;..
1f450 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
1f460 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
1f470 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
1f480 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f490 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f4a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f4b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1f4c0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67  ....        #reg
1f4d0 69 6f 6e 20 43 6f 6e 66 69 67 75 72 61 74 69 6f  ion Configuratio
1f4e0 6e 20 46 69 6c 65 20 48 61 6e 64 6c 69 6e 67 0d  n File Handling.
1f4f0 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
1f500 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 41 64 64   static bool Add
1f510 44 62 50 72 6f 76 69 64 65 72 46 61 63 74 6f 72  DbProviderFactor
1f520 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
1f530 73 74 72 69 6e 67 20 66 69 6c 65 4e 61 6d 65 2c  string fileName,
1f540 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
1f550 72 69 6e 67 20 69 6e 76 61 72 69 61 6e 74 2c 0d  ring invariant,.
1f560 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72  .            str
1f570 69 6e 67 20 6e 61 6d 65 2c 0d 0a 20 20 20 20 20  ing name,..     
1f580 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 64 65         string de
1f590 73 63 72 69 70 74 69 6f 6e 2c 0d 0a 20 20 20 20  scription,..    
1f5a0 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 74          string t
1f5b0 79 70 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20  ypeName,..      
1f5c0 20 20 20 20 20 20 41 73 73 65 6d 62 6c 79 4e 61        AssemblyNa
1f5d0 6d 65 20 61 73 73 65 6d 62 6c 79 4e 61 6d 65 2c  me assemblyName,
1f5e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
1f5f0 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20  ol whatIf,..    
1f600 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72          bool ver
1f610 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  bose,..         
1f620 20 20 20 72 65 66 20 62 6f 6f 6c 20 73 61 76 65     ref bool save
1f630 64 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d,..            
1f640 72 65 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72  ref string error
1f650 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d  ..            ).
1f660 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
1f670 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 64 69 72          bool dir
1f680 74 79 20 3d 20 66 61 6c 73 65 3b 0d 0a 20 20 20  ty = false;..   
1f690 20 20 20 20 20 20 20 20 20 58 6d 6c 44 6f 63 75           XmlDocu
1f6a0 6d 65 6e 74 20 64 6f 63 75 6d 65 6e 74 20 3d 20  ment document = 
1f6b0 6e 65 77 20 58 6d 6c 44 6f 63 75 6d 65 6e 74 28  new XmlDocument(
1f6c0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
1f6d0 20 20 64 6f 63 75 6d 65 6e 74 2e 50 72 65 73 65    document.Prese
1f6e0 72 76 65 57 68 69 74 65 73 70 61 63 65 20 3d 20  rveWhitespace = 
1f6f0 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  true;..         
1f700 20 20 20 64 6f 63 75 6d 65 6e 74 2e 4c 6f 61 64     document.Load
1f710 28 66 69 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20  (fileName);.... 
1f720 20 20 20 20 20 20 20 20 20 20 20 58 6d 6c 45 6c             XmlEl
1f730 65 6d 65 6e 74 20 65 6c 65 6d 65 6e 74 20 3d 20  ement element = 
1f740 64 6f 63 75 6d 65 6e 74 2e 53 65 6c 65 63 74 53  document.SelectS
1f750 69 6e 67 6c 65 4e 6f 64 65 28 53 74 72 69 6e 67  ingleNode(String
1f760 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
1f770 20 20 20 20 20 20 20 20 20 20 58 50 61 74 68 46            XPathF
1f780 6f 72 41 64 64 45 6c 65 6d 65 6e 74 2c 20 69 6e  orAddElement, in
1f790 76 61 72 69 61 6e 74 29 29 20 61 73 20 58 6d 6c  variant)) as Xml
1f7a0 45 6c 65 6d 65 6e 74 3b 0d 0a 0d 0a 20 20 20 20  Element;....    
1f7b0 20 20 20 20 20 20 20 20 69 66 20 28 65 6c 65 6d          if (elem
1f7c0 65 6e 74 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ent == null)..  
1f7d0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1f7e0 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72               str
1f7f0 69 6e 67 5b 5d 20 65 6c 65 6d 65 6e 74 4e 61 6d  ing[] elementNam
1f800 65 73 20 3d 20 7b 0d 0a 20 20 20 20 20 20 20 20  es = {..        
1f810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f820 22 73 79 73 74 65 6d 2e 64 61 74 61 22 2c 20 22  "system.data", "
1f830 44 62 50 72 6f 76 69 64 65 72 46 61 63 74 6f 72  DbProviderFactor
1f840 69 65 73 22 0d 0a 20 20 20 20 20 20 20 20 20 20  ies"..          
1f850 20 20 20 20 20 20 20 20 20 20 7d 3b 0d 0a 0d 0a            };....
1f860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f870 58 6d 6c 45 6c 65 6d 65 6e 74 20 70 72 65 76 69  XmlElement previ
1f880 6f 75 73 45 6c 65 6d 65 6e 74 20 3d 0d 0a 20 20  ousElement =..  
1f890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f8a0 20 20 64 6f 63 75 6d 65 6e 74 2e 44 6f 63 75 6d    document.Docum
1f8b0 65 6e 74 45 6c 65 6d 65 6e 74 3b 20 2f 2a 20 63  entElement; /* c
1f8c0 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 2a 2f 0d  onfiguration */.
1f8d0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1f8e0 20 20 20 66 6f 72 65 61 63 68 20 28 73 74 72 69     foreach (stri
1f8f0 6e 67 20 65 6c 65 6d 65 6e 74 4e 61 6d 65 20 69  ng elementName i
1f900 6e 20 65 6c 65 6d 65 6e 74 4e 61 6d 65 73 29 0d  n elementNames).
1f910 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1f920 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1f930 20 20 20 20 20 20 20 20 65 6c 65 6d 65 6e 74 20          element 
1f940 3d 20 70 72 65 76 69 6f 75 73 45 6c 65 6d 65 6e  = previousElemen
1f950 74 2e 53 65 6c 65 63 74 53 69 6e 67 6c 65 4e 6f  t.SelectSingleNo
1f960 64 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  de(..           
1f970 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 65               ele
1f980 6d 65 6e 74 4e 61 6d 65 29 20 61 73 20 58 6d 6c  mentName) as Xml
1f990 45 6c 65 6d 65 6e 74 3b 0d 0a 0d 0a 20 20 20 20  Element;....    
1f9a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f9b0 69 66 20 28 65 6c 65 6d 65 6e 74 20 3d 3d 20 6e  if (element == n
1f9c0 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
1f9d0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
1f9e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1f9f0 20 20 20 20 20 65 6c 65 6d 65 6e 74 20 3d 20 64       element = d
1fa00 6f 63 75 6d 65 6e 74 2e 43 72 65 61 74 65 45 6c  ocument.CreateEl
1fa10 65 6d 65 6e 74 28 0d 0a 20 20 20 20 20 20 20 20  ement(..        
1fa20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fa30 20 20 20 20 65 6c 65 6d 65 6e 74 4e 61 6d 65 2c      elementName,
1fa40 20 53 74 72 69 6e 67 2e 45 6d 70 74 79 29 3b 0d   String.Empty);.
1fa50 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
1fa60 20 20 20 20 20 20 20 20 20 20 20 70 72 65 76 69             previ
1fa70 6f 75 73 45 6c 65 6d 65 6e 74 2e 41 70 70 65 6e  ousElement.Appen
1fa80 64 43 68 69 6c 64 28 65 6c 65 6d 65 6e 74 29 3b  dChild(element);
1fa90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1faa0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
1fab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70                 p
1fac0 72 65 76 69 6f 75 73 45 6c 65 6d 65 6e 74 20 3d  reviousElement =
1fad0 20 65 6c 65 6d 65 6e 74 3b 0d 0a 20 20 20 20 20   element;..     
1fae0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
1faf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fb00 65 6c 65 6d 65 6e 74 20 3d 20 64 6f 63 75 6d 65  element = docume
1fb10 6e 74 2e 43 72 65 61 74 65 45 6c 65 6d 65 6e 74  nt.CreateElement
1fb20 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
1fb30 20 20 20 20 20 20 20 22 61 64 64 22 2c 20 53 74         "add", St
1fb40 72 69 6e 67 2e 45 6d 70 74 79 29 3b 0d 0a 0d 0a  ring.Empty);....
1fb50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fb60 70 72 65 76 69 6f 75 73 45 6c 65 6d 65 6e 74 2e  previousElement.
1fb70 41 70 70 65 6e 64 43 68 69 6c 64 28 65 6c 65 6d  AppendChild(elem
1fb80 65 6e 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ent);....       
1fb90 20 20 20 20 20 20 20 20 20 64 69 72 74 79 20 3d           dirty =
1fba0 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20   true;..        
1fbb0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
1fbc0 20 20 20 20 20 69 66 20 28 21 53 74 72 69 6e 67       if (!String
1fbd0 2e 45 71 75 61 6c 73 28 65 6c 65 6d 65 6e 74 2e  .Equals(element.
1fbe0 47 65 74 41 74 74 72 69 62 75 74 65 28 22 6e 61  GetAttribute("na
1fbf0 6d 65 22 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  me"),..         
1fc00 20 20 20 20 20 20 20 20 20 20 20 6e 61 6d 65 2c             name,
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 6e 61 6d 65 22  Attribute("name"
1fc70 2c 20 6e 61 6d 65 29 3b 0d 0a 20 20 20 20 20 20  , name);..      
1fc80 20 20 20 20 20 20 20 20 20 20 64 69 72 74 79 20            dirty 
1fc90 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20  = true;..       
1fca0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
1fcb0 20 20 20 20 20 20 69 66 20 28 21 53 74 72 69 6e        if (!Strin
1fcc0 67 2e 45 71 75 61 6c 73 28 65 6c 65 6d 65 6e 74  g.Equals(element
1fcd0 2e 47 65 74 41 74 74 72 69 62 75 74 65 28 22 69  .GetAttribute("i
1fce0 6e 76 61 72 69 61 6e 74 22 29 2c 0d 0a 20 20 20  nvariant"),..   
1fcf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fd00 20 69 6e 76 61 72 69 61 6e 74 2c 20 53 74 72 69   invariant, Stri
1fd10 6e 67 43 6f 6d 70 61 72 69 73 6f 6e 2e 49 6e 76  ngComparison.Inv
1fd20 61 72 69 61 6e 74 43 75 6c 74 75 72 65 29 29 0d  ariantCulture)).
1fd30 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
1fd40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fd50 65 6c 65 6d 65 6e 74 2e 53 65 74 41 74 74 72 69  element.SetAttri
1fd60 62 75 74 65 28 22 69 6e 76 61 72 69 61 6e 74 22  bute("invariant"
1fd70 2c 20 69 6e 76 61 72 69 61 6e 74 29 3b 0d 0a 20  , invariant);.. 
1fd80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
1fd90 69 72 74 79 20 3d 20 74 72 75 65 3b 0d 0a 20 20  irty = true;..  
1fda0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
1fdb0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21             if (!
1fdc0 53 74 72 69 6e 67 2e 45 71 75 61 6c 73 28 65 6c  String.Equals(el
1fdd0 65 6d 65 6e 74 2e 47 65 74 41 74 74 72 69 62 75  ement.GetAttribu
1fde0 74 65 28 22 64 65 73 63 72 69 70 74 69 6f 6e 22  te("description"
1fdf0 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
1fe00 20 20 20 20 20 20 20 20 64 65 73 63 72 69 70 74          descript
1fe10 69 6f 6e 2c 20 53 74 72 69 6e 67 43 6f 6d 70 61  ion, StringCompa
1fe20 72 69 73 6f 6e 2e 49 6e 76 61 72 69 61 6e 74 43  rison.InvariantC
1fe30 75 6c 74 75 72 65 29 29 0d 0a 20 20 20 20 20 20  ulture))..      
1fe40 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1fe50 20 20 20 20 20 20 20 20 20 65 6c 65 6d 65 6e 74           element
1fe60 2e 53 65 74 41 74 74 72 69 62 75 74 65 28 22 64  .SetAttribute("d
1fe70 65 73 63 72 69 70 74 69 6f 6e 22 2c 20 64 65 73  escription", des
1fe80 63 72 69 70 74 69 6f 6e 29 3b 0d 0a 20 20 20 20  cription);..    
1fe90 20 20 20 20 20 20 20 20 20 20 20 20 64 69 72 74              dirt
1fea0 79 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20  y = true;..     
1feb0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
1fec0 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 66          string f
1fed0 75 6c 6c 54 79 70 65 4e 61 6d 65 20 3d 20 53 74  ullTypeName = St
1fee0 72 69 6e 67 2e 46 6f 72 6d 61 74 28 22 7b 30 7d  ring.Format("{0}
1fef0 2c 20 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20  , {1}",..       
1ff00 20 20 20 20 20 20 20 20 20 74 79 70 65 4e 61 6d           typeNam
1ff10 65 2c 20 61 73 73 65 6d 62 6c 79 4e 61 6d 65 29  e, assemblyName)
1ff20 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
1ff30 20 69 66 20 28 21 53 74 72 69 6e 67 2e 45 71 75   if (!String.Equ
1ff40 61 6c 73 28 65 6c 65 6d 65 6e 74 2e 47 65 74 41  als(element.GetA
1ff50 74 74 72 69 62 75 74 65 28 22 74 79 70 65 22 29  ttribute("type")
1ff60 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
1ff70 20 20 20 20 20 20 20 66 75 6c 6c 54 79 70 65 4e         fullTypeN
1ff80 61 6d 65 2c 20 53 74 72 69 6e 67 43 6f 6d 70 61  ame, StringCompa
1ff90 72 69 73 6f 6e 2e 49 6e 76 61 72 69 61 6e 74 43  rison.InvariantC
1ffa0 75 6c 74 75 72 65 29 29 0d 0a 20 20 20 20 20 20  ulture))..      
1ffb0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1ffc0 20 20 20 20 20 20 20 20 20 65 6c 65 6d 65 6e 74           element
1ffd0 2e 53 65 74 41 74 74 72 69 62 75 74 65 28 22 74  .SetAttribute("t
1ffe0 79 70 65 22 2c 20 66 75 6c 6c 54 79 70 65 4e 61  ype", fullTypeNa
1fff0 6d 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  me);..          
20000 20 20 20 20 20 20 64 69 72 74 79 20 3d 20 74 72        dirty = tr
20010 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
20020 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
20030 20 20 69 66 20 28 64 69 72 74 79 20 7c 7c 20 77    if (dirty || w
20040 68 61 74 49 66 29 0d 0a 20 20 20 20 20 20 20 20  hatIf)..        
20050 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
20060 20 20 20 20 20 20 20 69 66 20 28 76 65 72 62 6f         if (verbo
20070 73 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se)..           
20080 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70           TraceOp
20090 73 2e 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20  s.Trace(..      
200a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
200b0 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e    TracePriority.
200c0 48 69 67 68 65 73 74 2c 20 74 72 61 63 65 43 61  Highest, traceCa
200d0 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46  llback, String.F
200e0 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
200f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20100 22 65 6c 65 6d 65 6e 74 20 3d 20 7b 30 7d 22 2c  "element = {0}",
20110 20 46 6f 72 44 69 73 70 6c 61 79 28 65 6c 65 6d   ForDisplay(elem
20120 65 6e 74 29 29 2c 20 74 72 61 63 65 43 61 74 65  ent)), traceCate
20130 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  gory);....      
20140 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21 77            if (!w
20150 68 61 74 49 66 29 0d 0a 20 20 20 20 20 20 20 20  hatIf)..        
20160 20 20 20 20 20 20 20 20 20 20 20 20 64 6f 63 75              docu
20170 6d 65 6e 74 2e 53 61 76 65 28 66 69 6c 65 4e 61  ment.Save(fileNa
20180 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  me);....        
20190 20 20 20 20 20 20 20 20 73 61 76 65 64 20 3d 20          saved = 
201a0 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  true;..         
201b0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
201c0 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b      return true;
201d0 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
201e0 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
201f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20200 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20210 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20220 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
20230 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
20240 65 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 52 65  e static bool Re
20250 6d 6f 76 65 44 62 50 72 6f 76 69 64 65 72 46 61  moveDbProviderFa
20260 63 74 6f 72 79 28 0d 0a 20 20 20 20 20 20 20 20  ctory(..        
20270 20 20 20 20 73 74 72 69 6e 67 20 66 69 6c 65 4e      string fileN
20280 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ame,..          
20290 20 20 73 74 72 69 6e 67 20 69 6e 76 61 72 69 61    string invaria
202a0 6e 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  nt,..           
202b0 20 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20   bool whatIf,.. 
202c0 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
202d0 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20  verbose,..      
202e0 20 20 20 20 20 20 72 65 66 20 62 6f 6f 6c 20 73        ref bool s
202f0 61 76 65 64 2c 0d 0a 20 20 20 20 20 20 20 20 20  aved,..         
20300 20 20 20 72 65 66 20 73 74 72 69 6e 67 20 65 72     ref string er
20310 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ror..           
20320 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20   )..        {.. 
20330 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20             bool 
20340 64 69 72 74 79 20 3d 20 66 61 6c 73 65 3b 0d 0a  dirty = false;..
20350 20 20 20 20 20 20 20 20 20 20 20 20 58 6d 6c 44              XmlD
20360 6f 63 75 6d 65 6e 74 20 64 6f 63 75 6d 65 6e 74  ocument document
20370 20 3d 20 6e 65 77 20 58 6d 6c 44 6f 63 75 6d 65   = new XmlDocume
20380 6e 74 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  nt();....       
20390 20 20 20 20 20 64 6f 63 75 6d 65 6e 74 2e 50 72       document.Pr
203a0 65 73 65 72 76 65 57 68 69 74 65 73 70 61 63 65  eserveWhitespace
203b0 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20   = true;..      
203c0 20 20 20 20 20 20 64 6f 63 75 6d 65 6e 74 2e 4c        document.L
203d0 6f 61 64 28 66 69 6c 65 4e 61 6d 65 29 3b 0d 0a  oad(fileName);..
203e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 58 6d  ..            Xm
203f0 6c 45 6c 65 6d 65 6e 74 20 65 6c 65 6d 65 6e 74  lElement element
20400 20 3d 20 64 6f 63 75 6d 65 6e 74 2e 53 65 6c 65   = document.Sele
20410 63 74 53 69 6e 67 6c 65 4e 6f 64 65 28 53 74 72  ctSingleNode(Str
20420 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
20430 20 20 20 20 20 20 20 20 20 20 20 20 20 58 50 61               XPa
20440 74 68 46 6f 72 41 64 64 45 6c 65 6d 65 6e 74 2c  thForAddElement,
20450 20 69 6e 76 61 72 69 61 6e 74 29 29 20 61 73 20   invariant)) as 
20460 58 6d 6c 45 6c 65 6d 65 6e 74 3b 0d 0a 0d 0a 20  XmlElement;.... 
20470 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 65             if (e
20480 6c 65 6d 65 6e 74 20 21 3d 20 6e 75 6c 6c 29 0d  lement != null).
20490 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
204a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
204b0 65 6c 65 6d 65 6e 74 2e 50 61 72 65 6e 74 4e 6f  element.ParentNo
204c0 64 65 2e 52 65 6d 6f 76 65 43 68 69 6c 64 28 65  de.RemoveChild(e
204d0 6c 65 6d 65 6e 74 29 3b 0d 0a 20 20 20 20 20 20  lement);..      
204e0 20 20 20 20 20 20 20 20 20 20 64 69 72 74 79 20            dirty 
204f0 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20  = true;..       
20500 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
20510 20 20 20 20 20 20 65 6c 65 6d 65 6e 74 20 3d 20        element = 
20520 64 6f 63 75 6d 65 6e 74 2e 53 65 6c 65 63 74 53  document.SelectS
20530 69 6e 67 6c 65 4e 6f 64 65 28 53 74 72 69 6e 67  ingleNode(String
20540 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
20550 20 20 20 20 20 20 20 20 20 20 58 50 61 74 68 46            XPathF
20560 6f 72 52 65 6d 6f 76 65 45 6c 65 6d 65 6e 74 2c  orRemoveElement,
20570 20 69 6e 76 61 72 69 61 6e 74 29 29 20 61 73 20   invariant)) as 
20580 58 6d 6c 45 6c 65 6d 65 6e 74 3b 0d 0a 0d 0a 20  XmlElement;.... 
20590 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 65             if (e
205a0 6c 65 6d 65 6e 74 20 21 3d 20 6e 75 6c 6c 29 0d  lement != null).
205b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
205c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
205d0 65 6c 65 6d 65 6e 74 2e 50 61 72 65 6e 74 4e 6f  element.ParentNo
205e0 64 65 2e 52 65 6d 6f 76 65 43 68 69 6c 64 28 65  de.RemoveChild(e
205f0 6c 65 6d 65 6e 74 29 3b 0d 0a 20 20 20 20 20 20  lement);..      
20600 20 20 20 20 20 20 20 20 20 20 64 69 72 74 79 20            dirty 
20610 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20  = true;..       
20620 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
20630 20 20 20 20 20 20 69 66 20 28 64 69 72 74 79 20        if (dirty 
20640 7c 7c 20 77 68 61 74 49 66 29 0d 0a 20 20 20 20  || whatIf)..    
20650 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
20660 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76             if (v
20670 65 72 62 6f 73 65 29 0d 0a 20 20 20 20 20 20 20  erbose)..       
20680 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
20690 63 65 4f 70 73 2e 54 72 61 63 65 28 0d 0a 20 20  ceOps.Trace(..  
206a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
206b0 20 20 20 20 20 20 54 72 61 63 65 50 72 69 6f 72        TracePrior
206c0 69 74 79 2e 48 69 67 68 65 73 74 2c 20 74 72 61  ity.Highest, tra
206d0 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72 69  ceCallback, Stri
206e0 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
206f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20700 20 20 20 20 22 65 6c 65 6d 65 6e 74 20 3d 20 7b      "element = {
20710 30 7d 22 2c 20 46 6f 72 44 69 73 70 6c 61 79 28  0}", ForDisplay(
20720 65 6c 65 6d 65 6e 74 29 29 2c 20 74 72 61 63 65  element)), trace
20730 43 61 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20  Category);....  
20740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
20750 20 28 21 77 68 61 74 49 66 29 0d 0a 20 20 20 20   (!whatIf)..    
20760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20770 64 6f 63 75 6d 65 6e 74 2e 53 61 76 65 28 66 69  document.Save(fi
20780 6c 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20  leName);....    
20790 20 20 20 20 20 20 20 20 20 20 20 20 73 61 76 65              save
207a0 64 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20  d = true;..     
207b0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
207c0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74          return t
207d0 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  rue;..        }.
207e0 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
207f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20800 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20810 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20820 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20830 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72  //....        pr
20840 69 76 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f  ivate static boo
20850 6c 20 50 72 6f 63 65 73 73 44 62 50 72 6f 76 69  l ProcessDbProvi
20860 64 65 72 46 61 63 74 6f 72 79 28 0d 0a 20 20 20  derFactory(..   
20870 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
20880 66 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20  fileName,..     
20890 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 69 6e         string in
208a0 76 61 72 69 61 6e 74 2c 0d 0a 20 20 20 20 20 20  variant,..      
208b0 20 20 20 20 20 20 73 74 72 69 6e 67 20 6e 61 6d        string nam
208c0 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
208d0 73 74 72 69 6e 67 20 64 65 73 63 72 69 70 74 69  string descripti
208e0 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on,..           
208f0 20 73 74 72 69 6e 67 20 74 79 70 65 4e 61 6d 65   string typeName
20900 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 41  ,..            A
20910 73 73 65 6d 62 6c 79 4e 61 6d 65 20 61 73 73 65  ssemblyName asse
20920 6d 62 6c 79 4e 61 6d 65 2c 0d 0a 20 20 20 20 20  mblyName,..     
20930 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 63 6c         object cl
20940 69 65 6e 74 44 61 74 61 2c 0d 0a 20 20 20 20 20  ientData,..     
20950 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74         bool what
20960 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  If,..           
20970 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a   bool verbose,..
20980 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20              ref 
20990 62 6f 6f 6c 20 73 61 76 65 64 2c 0d 0a 20 20 20  bool saved,..   
209a0 20 20 20 20 20 20 20 20 20 72 65 66 20 73 74 72           ref str
209b0 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20 20 20  ing error..     
209c0 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
209d0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
209e0 20 41 6e 79 50 61 69 72 3c 73 74 72 69 6e 67 2c   AnyPair<string,
209f0 20 62 6f 6f 6c 3e 20 70 61 69 72 20 3d 20 63 6c   bool> pair = cl
20a00 69 65 6e 74 44 61 74 61 20 61 73 20 41 6e 79 50  ientData as AnyP
20a10 61 69 72 3c 73 74 72 69 6e 67 2c 20 62 6f 6f 6c  air<string, bool
20a20 3e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  >;....          
20a30 20 20 69 66 20 28 70 61 69 72 20 3d 3d 20 6e 75    if (pair == nu
20a40 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
20a50 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
20a60 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69 6e 76      error = "inv
20a70 61 6c 69 64 20 66 72 61 6d 65 77 6f 72 6b 20 63  alid framework c
20a80 6f 6e 66 69 67 20 63 61 6c 6c 62 61 63 6b 20 64  onfig callback d
20a90 61 74 61 22 3b 0d 0a 20 20 20 20 20 20 20 20 20  ata";..         
20aa0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
20ab0 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lse;..          
20ac0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
20ad0 20 20 20 69 66 20 28 70 61 69 72 2e 59 29 0d 0a     if (pair.Y)..
20ae0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
20af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
20b00 65 74 75 72 6e 20 52 65 6d 6f 76 65 44 62 50 72  eturn RemoveDbPr
20b10 6f 76 69 64 65 72 46 61 63 74 6f 72 79 28 0d 0a  oviderFactory(..
20b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20b30 20 20 20 20 66 69 6c 65 4e 61 6d 65 2c 20 69 6e      fileName, in
20b40 76 61 72 69 61 6e 74 2c 20 77 68 61 74 49 66 2c  variant, whatIf,
20b50 20 76 65 72 62 6f 73 65 2c 20 72 65 66 20 73 61   verbose, ref sa
20b60 76 65 64 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ved,..          
20b70 20 20 20 20 20 20 20 20 20 20 72 65 66 20 65 72            ref er
20b80 72 6f 72 29 20 26 26 0d 0a 20 20 20 20 20 20 20  ror) &&..       
20b90 20 20 20 20 20 20 20 20 20 41 64 64 44 62 50 72           AddDbPr
20ba0 6f 76 69 64 65 72 46 61 63 74 6f 72 79 28 0d 0a  oviderFactory(..
20bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20bc0 20 20 20 20 66 69 6c 65 4e 61 6d 65 2c 20 69 6e      fileName, in
20bd0 76 61 72 69 61 6e 74 2c 20 6e 61 6d 65 2c 20 64  variant, name, d
20be0 65 73 63 72 69 70 74 69 6f 6e 2c 20 74 79 70 65  escription, type
20bf0 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  Name,..         
20c00 20 20 20 20 20 20 20 20 20 20 20 61 73 73 65 6d             assem
20c10 62 6c 79 4e 61 6d 65 2c 20 77 68 61 74 49 66 2c  blyName, whatIf,
20c20 20 76 65 72 62 6f 73 65 2c 20 72 65 66 20 73 61   verbose, ref sa
20c30 76 65 64 2c 20 72 65 66 20 65 72 72 6f 72 29 3b  ved, ref error);
20c40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
20c50 0a 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73  .            els
20c60 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  e..            {
20c70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
20c80 20 20 72 65 74 75 72 6e 20 52 65 6d 6f 76 65 44    return RemoveD
20c90 62 50 72 6f 76 69 64 65 72 46 61 63 74 6f 72 79  bProviderFactory
20ca0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
20cb0 20 20 20 20 20 20 20 66 69 6c 65 4e 61 6d 65 2c         fileName,
20cc0 20 69 6e 76 61 72 69 61 6e 74 2c 20 77 68 61 74   invariant, what
20cd0 49 66 2c 20 76 65 72 62 6f 73 65 2c 20 72 65 66  If, verbose, ref
20ce0 20 73 61 76 65 64 2c 0d 0a 20 20 20 20 20 20 20   saved,..       
20cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66               ref
20d00 20 65 72 72 6f 72 29 3b 0d 0a 20 20 20 20 20 20   error);..      
20d10 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
20d20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e 64   }..        #end
20d30 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
20d40 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
20d50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20d60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20d70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20d80 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
20d90 20 20 20 20 20 23 72 65 67 69 6f 6e 20 41 73 73       #region Ass
20da0 65 6d 62 6c 79 20 46 6f 6c 64 65 72 73 20 48 61  embly Folders Ha
20db0 6e 64 6c 69 6e 67 0d 0a 20 20 20 20 20 20 20 20  ndling..        
20dc0 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 73  private static s
20dd0 74 72 69 6e 67 20 47 65 74 41 73 73 65 6d 62 6c  tring GetAssembl
20de0 79 46 6f 6c 64 65 72 73 4b 65 79 4e 61 6d 65 28  yFoldersKeyName(
20df0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
20e00 72 69 6e 67 20 66 72 61 6d 65 77 6f 72 6b 4e 61  ring frameworkNa
20e10 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me,..           
20e20 20 56 65 72 73 69 6f 6e 20 66 72 61 6d 65 77 6f   Version framewo
20e30 72 6b 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20  rkVersion,..    
20e40 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 70          string p
20e50 6c 61 74 66 6f 72 6d 4e 61 6d 65 0d 0a 20 20 20  latformName..   
20e60 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
20e70 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
20e80 20 20 20 73 74 72 69 6e 67 20 66 6f 72 6d 61 74     string format
20e90 20 3d 20 21 53 74 72 69 6e 67 2e 49 73 4e 75 6c   = !String.IsNul
20ea0 6c 4f 72 45 6d 70 74 79 28 70 6c 61 74 66 6f 72  lOrEmpty(platfor
20eb0 6d 4e 61 6d 65 29 20 3f 0d 0a 20 20 20 20 20 20  mName) ?..      
20ec0 20 20 20 20 20 20 20 20 20 20 22 53 6f 66 74 77            "Softw
20ed0 61 72 65 5c 5c 4d 69 63 72 6f 73 6f 66 74 5c 5c  are\\Microsoft\\
20ee0 7b 30 7d 5c 5c 76 7b 31 7d 5c 5c 7b 32 7d 5c 5c  {0}\\v{1}\\{2}\\
20ef0 41 73 73 65 6d 62 6c 79 46 6f 6c 64 65 72 73 45  AssemblyFoldersE
20f00 78 22 20 3a 0d 0a 20 20 20 20 20 20 20 20 20 20  x" :..          
20f10 20 20 20 20 20 20 22 53 6f 66 74 77 61 72 65 5c        "Software\
20f20 5c 4d 69 63 72 6f 73 6f 66 74 5c 5c 7b 30 7d 5c  \Microsoft\\{0}\
20f30 5c 76 7b 31 7d 5c 5c 41 73 73 65 6d 62 6c 79 46  \v{1}\\AssemblyF
20f40 6f 6c 64 65 72 73 45 78 22 3b 0d 0a 0d 0a 20 20  oldersEx";....  
20f50 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
20f60 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 66   String.Format(f
20f70 6f 72 6d 61 74 2c 20 66 72 61 6d 65 77 6f 72 6b  ormat, framework
20f80 4e 61 6d 65 2c 20 66 72 61 6d 65 77 6f 72 6b 56  Name, frameworkV
20f90 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20  ersion,..       
20fa0 20 20 20 20 20 20 20 20 20 70 6c 61 74 66 6f 72           platfor
20fb0 6d 4e 61 6d 65 29 3b 0d 0a 20 20 20 20 20 20 20  mName);..       
20fc0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f   }....        //
20fd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20fe0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
20ff0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21000 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21010 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
21020 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
21030 62 6f 6f 6c 20 41 64 64 54 6f 41 73 73 65 6d 62  bool AddToAssemb
21040 6c 79 46 6f 6c 64 65 72 73 28 0d 0a 20 20 20 20  lyFolders(..    
21050 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79          Registry
21060 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20  Key rootKey,..  
21070 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
21080 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 0d   frameworkName,.
21090 0a 20 20 20 20 20 20 20 20 20 20 20 20 56 65 72  .            Ver
210a0 73 69 6f 6e 20 66 72 61 6d 65 77 6f 72 6b 56 65  sion frameworkVe
210b0 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20  rsion,..        
210c0 20 20 20 20 73 74 72 69 6e 67 20 70 6c 61 74 66      string platf
210d0 6f 72 6d 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20  ormName,..      
210e0 20 20 20 20 20 20 73 74 72 69 6e 67 20 73 75 62        string sub
210f0 4b 65 79 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20  KeyName,..      
21100 20 20 20 20 20 20 73 74 72 69 6e 67 20 64 69 72        string dir
21110 65 63 74 6f 72 79 2c 0d 0a 20 20 20 20 20 20 20  ectory,..       
21120 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66       bool whatIf
21130 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
21140 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20  ool verbose,..  
21150 20 20 20 20 20 20 20 20 20 20 72 65 66 20 73 74            ref st
21160 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20 20  ring error..    
21170 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
21180 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
21190 20 20 73 74 72 69 6e 67 20 6b 65 79 4e 61 6d 65    string keyName
211a0 20 3d 20 47 65 74 41 73 73 65 6d 62 6c 79 46 6f   = GetAssemblyFo
211b0 6c 64 65 72 73 4b 65 79 4e 61 6d 65 28 0d 0a 20  ldersKeyName(.. 
211c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66                 f
211d0 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 20 66 72  rameworkName, fr
211e0 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 20  ameworkVersion, 
211f0 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 29 3b 0d 0a  platformName);..
21200 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 75 73  ..            us
21210 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72  ing (MockRegistr
21220 79 4b 65 79 20 6b 65 79 20 3d 20 52 65 67 69 73  yKey key = Regis
21230 74 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75  tryHelper.OpenSu
21240 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20  bKey(..         
21250 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b             rootK
21260 65 79 2c 20 6b 65 79 4e 61 6d 65 2c 20 74 72 75  ey, keyName, tru
21270 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f  e, whatIf, verbo
21280 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  se))..          
21290 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
212a0 20 20 20 20 20 69 66 20 28 6b 65 79 20 3d 3d 20       if (key == 
212b0 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
212c0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
212d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
212e0 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72  ror = String.For
212f0 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
21300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 63                "c
21310 6f 75 6c 64 20 6e 6f 74 20 6f 70 65 6e 20 72 65  ould not open re
21320 67 69 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c  gistry key: {0}\
21330 5c 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20  \{1}",..        
21340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21350 72 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e 61 6d 65  rootKey, keyName
21360 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
21370 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
21380 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
21390 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
213a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 75 73                us
213b0 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72  ing (MockRegistr
213c0 79 4b 65 79 20 73 75 62 4b 65 79 20 3d 20 52 65  yKey subKey = Re
213d0 67 69 73 74 72 79 48 65 6c 70 65 72 2e 43 72 65  gistryHelper.Cre
213e0 61 74 65 53 75 62 4b 65 79 28 0d 0a 20 20 20 20  ateSubKey(..    
213f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21400 20 20 20 20 6b 65 79 2c 20 73 75 62 4b 65 79 4e      key, subKeyN
21410 61 6d 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72  ame, whatIf, ver
21420 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20  bose))..        
21430 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
21440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
21450 66 20 28 73 75 62 4b 65 79 20 3d 3d 20 6e 75 6c  f (subKey == nul
21460 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
21470 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
21480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21490 20 20 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e     error = Strin
214a0 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
214b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
214c0 20 20 20 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f         "could no
214d0 74 20 63 72 65 61 74 65 20 72 65 67 69 73 74 72  t create registr
214e0 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 7b 31 7d 22  y key: {0}\\{1}"
214f0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
21500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b                 k
21510 65 79 2c 20 73 75 62 4b 65 79 4e 61 6d 65 29 3b  ey, subKeyName);
21520 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
21530 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
21540 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
21550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
21560 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
21570 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79          Registry
21580 48 65 6c 70 65 72 2e 53 65 74 56 61 6c 75 65 28  Helper.SetValue(
21590 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
215a0 20 20 20 20 20 20 20 20 20 20 73 75 62 4b 65 79            subKey
215b0 2c 20 6e 75 6c 6c 2c 20 64 69 72 65 63 74 6f 72  , null, director
215c0 79 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f  y, whatIf, verbo
215d0 73 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  se);..          
215e0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
215f0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
21600 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75        return tru
21610 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d  e;..        }...
21620 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
21630 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21640 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21650 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21660 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21670 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  ....        priv
21680 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f 6c 20  ate static bool 
21690 52 65 6d 6f 76 65 46 72 6f 6d 41 73 73 65 6d 62  RemoveFromAssemb
216a0 6c 79 46 6f 6c 64 65 72 73 28 0d 0a 20 20 20 20  lyFolders(..    
216b0 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79          Registry
216c0 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20  Key rootKey,..  
216d0 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
216e0 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 0d   frameworkName,.
216f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 56 65 72  .            Ver
21700 73 69 6f 6e 20 66 72 61 6d 65 77 6f 72 6b 56 65  sion frameworkVe
21710 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20  rsion,..        
21720 20 20 20 20 73 74 72 69 6e 67 20 70 6c 61 74 66      string platf
21730 6f 72 6d 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20  ormName,..      
21740 20 20 20 20 20 20 73 74 72 69 6e 67 20 73 75 62        string sub
21750 4b 65 79 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20  KeyName,..      
21760 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49        bool whatI
21770 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f,..            
21780 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a 20  bool verbose,.. 
21790 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20 73             ref s
217a0 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20  tring error..   
217b0 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
217c0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
217d0 20 20 20 73 74 72 69 6e 67 20 6b 65 79 4e 61 6d     string keyNam
217e0 65 20 3d 20 47 65 74 41 73 73 65 6d 62 6c 79 46  e = GetAssemblyF
217f0 6f 6c 64 65 72 73 4b 65 79 4e 61 6d 65 28 0d 0a  oldersKeyName(..
21800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21810 66 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 20 66  frameworkName, f
21820 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c  rameworkVersion,
21830 20 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 29 3b 0d   platformName);.
21840 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 75  ...            u
21850 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74  sing (MockRegist
21860 72 79 4b 65 79 20 6b 65 79 20 3d 20 52 65 67 69  ryKey key = Regi
21870 73 74 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53  stryHelper.OpenS
21880 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20  ubKey(..        
21890 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74              root
218a0 4b 65 79 2c 20 6b 65 79 4e 61 6d 65 2c 20 66 61  Key, keyName, fa
218b0 6c 73 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72  lse, whatIf, ver
218c0 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20  bose))..        
218d0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
218e0 20 20 20 20 20 20 20 69 66 20 28 6b 65 79 20 3d         if (key =
218f0 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
21900 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
21910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21920 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46  error = String.F
21930 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
21940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21950 22 63 6f 75 6c 64 20 6e 6f 74 20 6f 70 65 6e 20  "could not open 
21960 72 65 67 69 73 74 72 79 20 6b 65 79 3a 20 7b 30  registry key: {0
21970 7d 5c 5c 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20  }\\{1}",..      
21980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21990 20 20 72 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e 61    rootKey, keyNa
219a0 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  me);....        
219b0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
219c0 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
219d0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
219e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
219f0 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 44  RegistryHelper.D
21a00 65 6c 65 74 65 53 75 62 4b 65 79 28 0d 0a 20 20  eleteSubKey(..  
21a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21a20 20 20 6b 65 79 2c 20 73 75 62 4b 65 79 4e 61 6d    key, subKeyNam
21a30 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f  e, whatIf, verbo
21a40 73 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  se);..          
21a50 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
21a60 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d     return true;.
21a70 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
21a80 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
21a90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21aa0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21ab0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21ac0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
21ad0 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
21ae0 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 50 72 6f   static bool Pro
21af0 63 65 73 73 41 73 73 65 6d 62 6c 79 46 6f 6c 64  cessAssemblyFold
21b00 65 72 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ers(..          
21b10 20 20 52 65 67 69 73 74 72 79 4b 65 79 20 72 6f    RegistryKey ro
21b20 6f 74 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20  otKey,..        
21b30 20 20 20 20 73 74 72 69 6e 67 20 66 72 61 6d 65      string frame
21b40 77 6f 72 6b 4e 61 6d 65 2c 0d 0a 20 20 20 20 20  workName,..     
21b50 20 20 20 20 20 20 20 56 65 72 73 69 6f 6e 20 66         Version f
21b60 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c  rameworkVersion,
21b70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74  ..            st
21b80 72 69 6e 67 20 70 6c 61 74 66 6f 72 6d 4e 61 6d  ring platformNam
21b90 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
21ba0 6f 62 6a 65 63 74 20 63 6c 69 65 6e 74 44 61 74  object clientDat
21bb0 61 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  a,..            
21bc0 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20  bool whatIf,..  
21bd0 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76            bool v
21be0 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20  erbose,..       
21bf0 20 20 20 20 20 72 65 66 20 73 74 72 69 6e 67 20       ref string 
21c00 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20  error..         
21c10 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d     )..        {.
21c20 0a 20 20 20 20 20 20 20 20 20 20 20 20 41 6e 79  .            Any
21c30 50 61 69 72 3c 73 74 72 69 6e 67 2c 20 62 6f 6f  Pair<string, boo
21c40 6c 3e 20 70 61 69 72 20 3d 20 63 6c 69 65 6e 74  l> pair = client
21c50 44 61 74 61 20 61 73 20 41 6e 79 50 61 69 72 3c  Data as AnyPair<
21c60 73 74 72 69 6e 67 2c 20 62 6f 6f 6c 3e 3b 0d 0a  string, bool>;..
21c70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
21c80 20 28 70 61 69 72 20 3d 3d 20 6e 75 6c 6c 29 0d   (pair == null).
21c90 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
21ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21cb0 65 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64  error = "invalid
21cc0 20 66 72 61 6d 65 77 6f 72 6b 20 63 61 6c 6c 62   framework callb
21cd0 61 63 6b 20 64 61 74 61 22 3b 0d 0a 20 20 20 20  ack data";..    
21ce0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
21cf0 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
21d00 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
21d10 20 20 20 20 20 20 20 20 69 66 20 28 70 61 69 72          if (pair
21d20 2e 59 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  .Y)..           
21d30 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
21d40 20 20 20 20 72 65 74 75 72 6e 20 52 65 6d 6f 76      return Remov
21d50 65 46 72 6f 6d 41 73 73 65 6d 62 6c 79 46 6f 6c  eFromAssemblyFol
21d60 64 65 72 73 28 0d 0a 20 20 20 20 20 20 20 20 20  ders(..         
21d70 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b             rootK
21d80 65 79 2c 20 66 72 61 6d 65 77 6f 72 6b 4e 61 6d  ey, frameworkNam
21d90 65 2c 20 66 72 61 6d 65 77 6f 72 6b 56 65 72 73  e, frameworkVers
21da0 69 6f 6e 2c 20 70 6c 61 74 66 6f 72 6d 4e 61 6d  ion, platformNam
21db0 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
21dc0 20 20 20 20 20 20 20 20 4c 65 67 61 63 79 50 72          LegacyPr
21dd0 6f 6a 65 63 74 4e 61 6d 65 2c 20 77 68 61 74 49  ojectName, whatI
21de0 66 2c 20 76 65 72 62 6f 73 65 2c 20 72 65 66 20  f, verbose, ref 
21df0 65 72 72 6f 72 29 20 26 26 0d 0a 20 20 20 20 20  error) &&..     
21e00 20 20 20 20 20 20 20 20 20 20 20 41 64 64 54 6f             AddTo
21e10 41 73 73 65 6d 62 6c 79 46 6f 6c 64 65 72 73 28  AssemblyFolders(
21e20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
21e30 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 66        rootKey, f
21e40 72 61 6d 65 77 6f 72 6b 4e 61 6d 65 2c 20 66 72  rameworkName, fr
21e50 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 2c 20  ameworkVersion, 
21e60 70 6c 61 74 66 6f 72 6d 4e 61 6d 65 2c 0d 0a 20  platformName,.. 
21e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21e80 20 20 20 50 72 6f 6a 65 63 74 4e 61 6d 65 2c 20     ProjectName, 
21e90 70 61 69 72 2e 58 2c 20 77 68 61 74 49 66 2c 20  pair.X, whatIf, 
21ea0 76 65 72 62 6f 73 65 2c 20 72 65 66 20 65 72 72  verbose, ref err
21eb0 6f 72 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  or);..          
21ec0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
21ed0 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20   else..         
21ee0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
21ef0 20 20 20 20 20 20 72 65 74 75 72 6e 20 52 65 6d        return Rem
21f00 6f 76 65 46 72 6f 6d 41 73 73 65 6d 62 6c 79 46  oveFromAssemblyF
21f10 6f 6c 64 65 72 73 28 0d 0a 20 20 20 20 20 20 20  olders(..       
21f20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f               roo
21f30 74 4b 65 79 2c 20 66 72 61 6d 65 77 6f 72 6b 4e  tKey, frameworkN
21f40 61 6d 65 2c 20 66 72 61 6d 65 77 6f 72 6b 56 65  ame, frameworkVe
21f50 72 73 69 6f 6e 2c 20 70 6c 61 74 66 6f 72 6d 4e  rsion, platformN
21f60 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ame,..          
21f70 20 20 20 20 20 20 20 20 20 20 50 72 6f 6a 65 63            Projec
21f80 74 4e 61 6d 65 2c 20 77 68 61 74 49 66 2c 20 76  tName, whatIf, v
21f90 65 72 62 6f 73 65 2c 20 72 65 66 20 65 72 72 6f  erbose, ref erro
21fa0 72 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  r);..           
21fb0 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20   }..        }.. 
21fc0 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
21fd0 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f  n....        ///
21fe0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
21ff0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22000 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22010 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22020 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
22030 23 72 65 67 69 6f 6e 20 56 69 73 75 61 6c 20 53  #region Visual S
22040 74 75 64 69 6f 20 48 61 6e 64 6c 69 6e 67 0d 0a  tudio Handling..
22050 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
22060 73 74 61 74 69 63 20 73 74 72 69 6e 67 20 47 65  static string Ge
22070 74 56 73 4b 65 79 4e 61 6d 65 28 0d 0a 20 20 20  tVsKeyName(..   
22080 20 20 20 20 20 20 20 20 20 56 65 72 73 69 6f 6e           Version
22090 20 76 73 56 65 72 73 69 6f 6e 0d 0a 20 20 20 20   vsVersion..    
220a0 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
220b0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
220c0 20 20 69 66 20 28 76 73 56 65 72 73 69 6f 6e 20    if (vsVersion 
220d0 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
220e0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
220f0 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20   null;....      
22100 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 74 72        return Str
22110 69 6e 67 2e 46 6f 72 6d 61 74 28 22 53 6f 66 74  ing.Format("Soft
22120 77 61 72 65 5c 5c 4d 69 63 72 6f 73 6f 66 74 5c  ware\\Microsoft\
22130 5c 56 69 73 75 61 6c 53 74 75 64 69 6f 5c 5c 7b  \VisualStudio\\{
22140 30 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  0}",..          
22150 20 20 20 20 20 20 76 73 56 65 72 73 69 6f 6e 29        vsVersion)
22160 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  ;..        }....
22170 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
22180 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22190 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
221a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
221b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
221c0 0a 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69  ...        #regi
221d0 6f 6e 20 56 69 73 75 61 6c 20 53 74 75 64 69 6f  on Visual Studio
221e0 20 56 65 72 73 69 6f 6e 20 48 61 6e 64 6c 69 6e   Version Handlin
221f0 67 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  g..        priva
22200 74 65 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 41  te static bool A
22210 64 64 56 73 56 65 72 73 69 6f 6e 28 0d 0a 20 20  ddVsVersion(..  
22220 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74            Regist
22230 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a  ryKey rootKey,..
22240 20 20 20 20 20 20 20 20 20 20 20 20 56 65 72 73              Vers
22250 69 6f 6e 20 76 73 56 65 72 73 69 6f 6e 2c 0d 0a  ion vsVersion,..
22260 20 20 20 20 20 20 20 20 20 20 20 20 50 61 63 6b              Pack
22270 61 67 65 20 70 61 63 6b 61 67 65 2c 0d 0a 20 20  age package,..  
22280 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74            object
22290 20 63 6c 69 65 6e 74 44 61 74 61 2c 0d 0a 20 20   clientData,..  
222a0 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77            bool w
222b0 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20  hatIf,..        
222c0 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65      bool verbose
222d0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ,..            r
222e0 65 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72 0d  ef string error.
222f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a  .            )..
22300 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
22310 20 20 20 20 20 20 20 69 66 20 28 76 73 56 65 72         if (vsVer
22320 73 69 6f 6e 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20  sion != null).. 
22330 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
22340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 56 73                Vs
22350 4c 69 73 74 20 76 73 4c 69 73 74 20 3d 20 63 6c  List vsList = cl
22360 69 65 6e 74 44 61 74 61 20 61 73 20 56 73 4c 69  ientData as VsLi
22370 73 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  st;....         
22380 20 20 20 20 20 20 20 69 66 20 28 76 73 4c 69 73         if (vsLis
22390 74 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  t != null)..    
223a0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
223b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
223c0 20 20 20 69 66 20 28 76 73 4c 69 73 74 2e 49 6e     if (vsList.In
223d0 73 74 61 6c 6c 65 64 56 65 72 73 69 6f 6e 73 20  stalledVersions 
223e0 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
223f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22400 20 20 76 73 4c 69 73 74 2e 49 6e 73 74 61 6c 6c    vsList.Install
22410 65 64 56 65 72 73 69 6f 6e 73 20 3d 20 6e 65 77  edVersions = new
22420 20 56 65 72 73 69 6f 6e 4c 69 73 74 28 29 3b 0d   VersionList();.
22430 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
22440 20 20 20 20 20 20 20 69 66 20 28 21 76 73 4c 69         if (!vsLi
22450 73 74 2e 49 6e 73 74 61 6c 6c 65 64 56 65 72 73  st.InstalledVers
22460 69 6f 6e 73 2e 43 6f 6e 74 61 69 6e 73 28 76 73  ions.Contains(vs
22470 56 65 72 73 69 6f 6e 29 29 0d 0a 20 20 20 20 20  Version))..     
22480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22490 20 20 20 76 73 4c 69 73 74 2e 49 6e 73 74 61 6c     vsList.Instal
224a0 6c 65 64 56 65 72 73 69 6f 6e 73 2e 41 64 64 28  ledVersions.Add(
224b0 76 73 56 65 72 73 69 6f 6e 29 3b 0d 0a 20 20 20  vsVersion);..   
224c0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
224d0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
224e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
224f0 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20  urn true;..     
22500 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65     }..        #e
22510 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
22520 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
22530 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22540 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22550 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
22560 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
22570 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 56         #region V
22580 69 73 75 61 6c 20 53 74 75 64 69 6f 20 44 61 74  isual Studio Dat
22590 61 20 53 6f 75 72 63 65 20 48 61 6e 64 6c 69 6e  a Source Handlin
225a0 67 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61  g..        priva
225b0 74 65 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 41  te static bool A
225c0 64 64 56 73 44 61 74 61 53 6f 75 72 63 65 28 0d  ddVsDataSource(.
225d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67  .            Reg
225e0 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79  istryKey rootKey
225f0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 56  ,..            V
22600 65 72 73 69 6f 6e 20 76 73 56 65 72 73 69 6f 6e  ersion vsVersion
22610 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 50  ,..            P
22620 61 63 6b 61 67 65 20 70 61 63 6b 61 67 65 2c 0d  ackage package,.
22630 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f  .            boo
22640 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20  l whatIf,..     
22650 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72 62         bool verb
22660 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ose,..          
22670 20 20 72 65 66 20 73 74 72 69 6e 67 20 65 72 72    ref string err
22680 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  or..            
22690 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
226a0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76 73            if (vs
226b0 56 65 72 73 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29  Version == null)
226c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
226d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
226e0 20 65 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69   error = "invali
226f0 64 20 56 53 20 76 65 72 73 69 6f 6e 22 3b 0d 0a  d VS version";..
22700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22710 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20  return false;.. 
22720 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
22730 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
22740 70 61 63 6b 61 67 65 20 3d 3d 20 6e 75 6c 6c 29  package == null)
22750 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
22760 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
22770 20 65 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69   error = "invali
22780 64 20 56 53 20 70 61 63 6b 61 67 65 22 3b 0d 0a  d VS package";..
22790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
227a0 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20  return false;.. 
227b0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
227c0 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
227d0 6e 67 20 6b 65 79 4e 61 6d 65 20 3d 20 47 65 74  ng keyName = Get
227e0 56 73 4b 65 79 4e 61 6d 65 28 76 73 56 65 72 73  VsKeyName(vsVers
227f0 69 6f 6e 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ion);....       
22800 20 20 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b       using (Mock
22810 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65 79 20  RegistryKey key 
22820 3d 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72  = RegistryHelper
22830 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20  .OpenSubKey(..  
22840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22850 20 20 72 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e 61    rootKey, keyNa
22860 6d 65 2c 20 66 61 6c 73 65 2c 20 77 68 61 74 49  me, false, whatI
22870 66 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20  f, verbose))..  
22880 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
22890 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
228a0 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  (key == null).. 
228b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
228c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
228d0 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 53 74        error = St
228e0 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
228f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22900 20 20 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74        "could not
22910 20 6f 70 65 6e 20 72 65 67 69 73 74 72 79 20 6b   open registry k
22920 65 79 3a 20 7b 30 7d 5c 5c 7b 31 7d 22 2c 0d 0a  ey: {0}\\{1}",..
22930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22940 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c          rootKey,
22950 20 6b 65 79 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20   keyName);....  
22960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22970 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
22980 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
22990 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
229a0 20 20 20 20 20 20 75 73 69 6e 67 20 28 4d 6f 63        using (Moc
229b0 6b 52 65 67 69 73 74 72 79 4b 65 79 20 73 75 62  kRegistryKey sub
229c0 4b 65 79 20 3d 20 52 65 67 69 73 74 72 79 48 65  Key = RegistryHe
229d0 6c 70 65 72 2e 4f 70 65 6e 53 75 62 4b 65 79 28  lper.OpenSubKey(
229e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
229f0 20 20 20 20 20 20 20 20 20 20 6b 65 79 2c 20 22            key, "
22a00 44 61 74 61 53 6f 75 72 63 65 73 22 2c 20 74 72  DataSources", tr
22a10 75 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62  ue, whatIf, verb
22a20 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ose))..         
22a30 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
22a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
22a50 20 28 73 75 62 4b 65 79 20 3d 3d 20 6e 75 6c 6c   (subKey == null
22a60 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
22a70 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
22a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22a90 20 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67    error = String
22aa0 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
22ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22ac0 20 20 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74        "could not
22ad0 20 6f 70 65 6e 20 72 65 67 69 73 74 72 79 20 6b   open registry k
22ae0 65 79 3a 20 7b 30 7d 5c 5c 44 61 74 61 53 6f 75  ey: {0}\\DataSou
22af0 72 63 65 73 22 2c 0d 0a 20 20 20 20 20 20 20 20  rces",..        
22b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22b10 20 20 20 20 6b 65 79 29 3b 0d 0a 0d 0a 20 20 20      key);....   
22b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22b30 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
22b40 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
22b50 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
22b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22b70 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69   using (MockRegi
22b80 73 74 72 79 4b 65 79 20 64 61 74 61 53 6f 75 72  stryKey dataSour
22b90 63 65 4b 65 79 20 3d 0d 0a 20 20 20 20 20 20 20  ceKey =..       
22ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22bb0 20 20 20 20 20 52 65 67 69 73 74 72 79 48 65 6c       RegistryHel
22bc0 70 65 72 2e 43 72 65 61 74 65 53 75 62 4b 65 79  per.CreateSubKey
22bd0 28 73 75 62 4b 65 79 2c 0d 0a 20 20 20 20 20 20  (subKey,..      
22be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22bf0 20 20 20 20 20 20 70 61 63 6b 61 67 65 2e 44 61        package.Da
22c00 74 61 53 6f 75 72 63 65 49 64 2e 54 6f 53 74 72  taSourceId.ToStr
22c10 69 6e 67 28 56 73 49 64 46 6f 72 6d 61 74 29 2c  ing(VsIdFormat),
22c20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
22c30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 77 68                wh
22c40 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 29 0d  atIf, verbose)).
22c50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
22c60 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
22c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22c80 69 66 20 28 64 61 74 61 53 6f 75 72 63 65 4b 65  if (dataSourceKe
22c90 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  y == null)..    
22ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22cb0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
22cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22cd0 20 20 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e     error = Strin
22ce0 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
22cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22d00 20 20 20 20 20 20 20 20 20 20 20 22 63 6f 75 6c             "coul
22d10 64 20 6e 6f 74 20 63 72 65 61 74 65 20 72 65 67  d not create reg
22d20 69 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c  istry key: {0}\\
22d30 7b 31 7d 22 2c 20 6b 65 79 2c 0d 0a 20 20 20 20  {1}", key,..    
22d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22d50 20 20 20 20 20 20 20 20 20 20 20 20 70 61 63 6b              pack
22d60 61 67 65 2e 44 61 74 61 53 6f 75 72 63 65 49 64  age.DataSourceId
22d70 2e 54 6f 53 74 72 69 6e 67 28 56 73 49 64 46 6f  .ToString(VsIdFo
22d80 72 6d 61 74 29 29 3b 0d 0a 0d 0a 20 20 20 20 20  rmat));....     
22d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22da0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
22db0 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lse;..          
22dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
22dd0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
22de0 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73             Regis
22df0 74 72 79 48 65 6c 70 65 72 2e 53 65 74 56 61 6c  tryHelper.SetVal
22e00 75 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue(..           
22e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22e20 20 64 61 74 61 53 6f 75 72 63 65 4b 65 79 2c 20   dataSourceKey, 
22e30 6e 75 6c 6c 2c 20 53 74 72 69 6e 67 2e 46 6f 72  null, String.For
22e40 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
22e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22e60 20 20 22 7b 30 7d 20 44 61 74 61 62 61 73 65 20    "{0} Database 
22e70 46 69 6c 65 22 2c 20 50 72 6f 6a 65 63 74 4e 61  File", ProjectNa
22e80 6d 65 29 2c 20 77 68 61 74 49 66 2c 0d 0a 20 20  me), whatIf,..  
22e90 20 20 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 76 65 72 62 6f 73            verbos
22eb0 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  e);....         
22ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52                 R
22ed0 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 43 72  egistryHelper.Cr
22ee0 65 61 74 65 53 75 62 4b 65 79 28 64 61 74 61 53  eateSubKey(dataS
22ef0 6f 75 72 63 65 4b 65 79 2c 0d 0a 20 20 20 20 20  ourceKey,..     
22f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22f10 20 20 20 20 20 20 20 53 74 72 69 6e 67 2e 46 6f         String.Fo
22f20 72 6d 61 74 28 22 53 75 70 70 6f 72 74 69 6e 67  rmat("Supporting
22f30 50 72 6f 76 69 64 65 72 73 5c 5c 7b 30 7d 22 2c  Providers\\{0}",
22f40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
22f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 61                pa
22f60 63 6b 61 67 65 2e 44 61 74 61 50 72 6f 76 69 64  ckage.DataProvid
22f70 65 72 49 64 2e 54 6f 53 74 72 69 6e 67 28 56 73  erId.ToString(Vs
22f80 49 64 46 6f 72 6d 61 74 29 29 2c 0d 0a 20 20 20  IdFormat)),..   
22f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22fa0 20 20 20 20 20 20 20 20 20 77 68 61 74 49 66 2c           whatIf,
22fb0 20 76 65 72 62 6f 73 65 29 3b 0d 0a 20 20 20 20   verbose);..    
22fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22fd0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..             
22fe0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
22ff0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
23000 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d     return true;.
23010 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
23020 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
23030 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23040 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23050 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23060 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
23070 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65  .        private
23080 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 52 65 6d   static bool Rem
23090 6f 76 65 56 73 44 61 74 61 53 6f 75 72 63 65 28  oveVsDataSource(
230a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 52 65  ..            Re
230b0 67 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65  gistryKey rootKe
230c0 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y,..            
230d0 56 65 72 73 69 6f 6e 20 76 73 56 65 72 73 69 6f  Version vsVersio
230e0 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n,..            
230f0 50 61 63 6b 61 67 65 20 70 61 63 6b 61 67 65 2c  Package package,
23100 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
23110 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20  ol whatIf,..    
23120 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65 72          bool ver
23130 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  bose,..         
23140 20 20 20 72 65 66 20 73 74 72 69 6e 67 20 65 72     ref string er
23150 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ror..           
23160 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20   )..        {.. 
23170 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 76             if (v
23180 73 56 65 72 73 69 6f 6e 20 3d 3d 20 6e 75 6c 6c  sVersion == null
23190 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
231a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
231b0 20 20 65 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c    error = "inval
231c0 69 64 20 56 53 20 76 65 72 73 69 6f 6e 22 3b 0d  id VS version";.
231d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
231e0 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
231f0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
23200 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
23210 28 70 61 63 6b 61 67 65 20 3d 3d 20 6e 75 6c 6c  (package == null
23220 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
23230 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
23240 20 20 65 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c    error = "inval
23250 69 64 20 56 53 20 70 61 63 6b 61 67 65 22 3b 0d  id VS package";.
23260 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
23270 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
23280 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
23290 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72  .            str
232a0 69 6e 67 20 6b 65 79 4e 61 6d 65 20 3d 20 47 65  ing keyName = Ge
232b0 74 56 73 4b 65 79 4e 61 6d 65 28 76 73 56 65 72  tVsKeyName(vsVer
232c0 73 69 6f 6e 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  sion);....      
232d0 20 20 20 20 20 20 75 73 69 6e 67 20 28 4d 6f 63        using (Moc
232e0 6b 52 65 67 69 73 74 72 79 4b 65 79 20 6b 65 79  kRegistryKey key
232f0 20 3d 20 52 65 67 69 73 74 72 79 48 65 6c 70 65   = RegistryHelpe
23300 72 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20  r.OpenSubKey(.. 
23310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23320 20 20 20 72 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e     rootKey, keyN
23330 61 6d 65 2c 20 66 61 6c 73 65 2c 20 77 68 61 74  ame, false, what
23340 49 66 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a 20  If, verbose)).. 
23350 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
23360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
23370 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a   (key == null)..
23380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23390 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
233a0 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 53         error = S
233b0 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
233c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
233d0 20 20 20 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f         "could no
233e0 74 20 6f 70 65 6e 20 72 65 67 69 73 74 72 79 20  t open registry 
233f0 6b 65 79 3a 20 7b 30 7d 5c 5c 7b 31 7d 22 2c 0d  key: {0}\\{1}",.
23400 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
23410 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65 79           rootKey
23420 2c 20 6b 65 79 4e 61 6d 65 29 3b 0d 0a 0d 0a 20  , keyName);.... 
23430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23440 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
23450 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
23460 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
23470 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 4d 6f         using (Mo
23480 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 73 75  ckRegistryKey su
23490 62 4b 65 79 20 3d 20 52 65 67 69 73 74 72 79 48  bKey = RegistryH
234a0 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62 4b 65 79  elper.OpenSubKey
234b0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
234c0 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 2c 20             key, 
234d0 22 44 61 74 61 53 6f 75 72 63 65 73 22 2c 20 74  "DataSources", t
234e0 72 75 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72  rue, whatIf, ver
234f0 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20  bose))..        
23500 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
23510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
23520 66 20 28 73 75 62 4b 65 79 20 3d 3d 20 6e 75 6c  f (subKey == nul
23530 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
23540 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
23550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23560 20 20 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e     error = Strin
23570 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
23580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23590 20 20 20 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f         "could no
235a0 74 20 6f 70 65 6e 20 72 65 67 69 73 74 72 79 20  t open registry 
235b0 6b 65 79 3a 20 7b 30 7d 5c 5c 44 61 74 61 53 6f  key: {0}\\DataSo
235c0 75 72 63 65 73 22 2c 0d 0a 20 20 20 20 20 20 20  urces",..       
235d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
235e0 20 20 20 20 20 6b 65 79 29 3b 0d 0a 0d 0a 20 20       key);....  
235f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23600 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
23610 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se;..           
23620 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
23630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23640 20 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72    RegistryHelper
23650 2e 44 65 6c 65 74 65 53 75 62 4b 65 79 54 72 65  .DeleteSubKeyTre
23660 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
23670 20 20 20 20 20 20 20 20 20 20 20 20 73 75 62 4b              subK
23680 65 79 2c 20 70 61 63 6b 61 67 65 2e 44 61 74 61  ey, package.Data
23690 53 6f 75 72 63 65 49 64 2e 54 6f 53 74 72 69 6e  SourceId.ToStrin
236a0 67 28 56 73 49 64 46 6f 72 6d 61 74 29 2c 0d 0a  g(VsIdFormat),..
236b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
236c0 20 20 20 20 20 20 20 20 77 68 61 74 49 66 2c 20          whatIf, 
236d0 76 65 72 62 6f 73 65 29 3b 0d 0a 20 20 20 20 20  verbose);..     
236e0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
236f0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
23700 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
23710 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20  n true;..       
23720 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f   }....        //
23730 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23740 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23750 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23760 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23770 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20  /////....       
23780 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
23790 62 6f 6f 6c 20 50 72 6f 63 65 73 73 56 73 44 61  bool ProcessVsDa
237a0 74 61 53 6f 75 72 63 65 28 0d 0a 20 20 20 20 20  taSource(..     
237b0 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79 4b         RegistryK
237c0 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20  ey rootKey,..   
237d0 20 20 20 20 20 20 20 20 20 56 65 72 73 69 6f 6e           Version
237e0 20 76 73 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20   vsVersion,..   
237f0 20 20 20 20 20 20 20 20 20 50 61 63 6b 61 67 65           Package
23800 20 70 61 63 6b 61 67 65 2c 0d 0a 20 20 20 20 20   package,..     
23810 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 63 6c         object cl
23820 69 65 6e 74 44 61 74 61 2c 0d 0a 20 20 20 20 20  ientData,..     
23830 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74         bool what
23840 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  If,..           
23850 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a   bool verbose,..
23860 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20              ref 
23870 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20  string error..  
23880 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
23890 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
238a0 20 20 20 20 69 66 20 28 70 61 63 6b 61 67 65 20      if (package 
238b0 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
238c0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
238d0 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
238e0 20 22 69 6e 76 61 6c 69 64 20 56 53 20 70 61 63   "invalid VS pac
238f0 6b 61 67 65 22 3b 0d 0a 20 20 20 20 20 20 20 20  kage";..        
23900 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
23910 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
23920 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
23930 20 20 20 20 41 6e 79 50 61 69 72 3c 73 74 72 69      AnyPair<stri
23940 6e 67 2c 20 62 6f 6f 6c 3e 20 70 61 69 72 20 3d  ng, bool> pair =
23950 20 63 6c 69 65 6e 74 44 61 74 61 20 61 73 20 41   clientData as A
23960 6e 79 50 61 69 72 3c 73 74 72 69 6e 67 2c 20 62  nyPair<string, b
23970 6f 6f 6c 3e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ool>;....       
23980 20 20 20 20 20 69 66 20 28 70 61 69 72 20 3d 3d       if (pair ==
23990 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
239a0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
239b0 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22         error = "
239c0 69 6e 76 61 6c 69 64 20 56 53 20 63 61 6c 6c 62  invalid VS callb
239d0 61 63 6b 20 64 61 74 61 22 3b 0d 0a 20 20 20 20  ack data";..    
239e0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
239f0 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
23a00 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
23a10 20 20 20 20 20 20 20 20 69 66 20 28 70 61 69 72          if (pair
23a20 2e 59 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  .Y)..           
23a30 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
23a40 20 20 20 20 72 65 74 75 72 6e 20 41 64 64 56 73      return AddVs
23a50 44 61 74 61 53 6f 75 72 63 65 28 0d 0a 20 20 20  DataSource(..   
23a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23a70 20 72 6f 6f 74 4b 65 79 2c 20 76 73 56 65 72 73   rootKey, vsVers
23a80 69 6f 6e 2c 20 70 61 63 6b 61 67 65 2c 20 77 68  ion, package, wh
23a90 61 74 49 66 2c 20 76 65 72 62 6f 73 65 2c 20 72  atIf, verbose, r
23aa0 65 66 20 65 72 72 6f 72 29 3b 0d 0a 20 20 20 20  ef error);..    
23ab0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
23ac0 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20         else..   
23ad0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
23ae0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
23af0 72 6e 20 52 65 6d 6f 76 65 56 73 44 61 74 61 53  rn RemoveVsDataS
23b00 6f 75 72 63 65 28 0d 0a 20 20 20 20 20 20 20 20  ource(..        
23b10 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74              root
23b20 4b 65 79 2c 20 76 73 56 65 72 73 69 6f 6e 2c 20  Key, vsVersion, 
23b30 70 61 63 6b 61 67 65 2c 20 77 68 61 74 49 66 2c  package, whatIf,
23b40 20 76 65 72 62 6f 73 65 2c 20 72 65 66 20 65 72   verbose, ref er
23b50 72 6f 72 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ror);..         
23b60 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d     }..        }.
23b70 0a 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67  .        #endreg
23b80 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f  ion....        /
23b90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23ba0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23bb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23bc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23bd0 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
23be0 20 20 23 72 65 67 69 6f 6e 20 56 69 73 75 61 6c    #region Visual
23bf0 20 53 74 75 64 69 6f 20 44 61 74 61 20 50 72 6f   Studio Data Pro
23c00 76 69 64 65 72 20 48 61 6e 64 6c 69 6e 67 0d 0a  vider Handling..
23c10 20 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20          private 
23c20 73 74 61 74 69 63 20 62 6f 6f 6c 20 41 64 64 56  static bool AddV
23c30 73 44 61 74 61 50 72 6f 76 69 64 65 72 28 0d 0a  sDataProvider(..
23c40 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69              Regi
23c50 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c  stryKey rootKey,
23c60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 56 65  ..            Ve
23c70 72 73 69 6f 6e 20 76 73 56 65 72 73 69 6f 6e 2c  rsion vsVersion,
23c80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 50 61  ..            Pa
23c90 63 6b 61 67 65 20 70 61 63 6b 61 67 65 2c 0d 0a  ckage package,..
23ca0 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
23cb0 6e 67 20 66 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20  ng fileName,..  
23cc0 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 77            bool w
23cd0 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20  hatIf,..        
23ce0 20 20 20 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65      bool verbose
23cf0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ,..            r
23d00 65 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72 0d  ef string error.
23d10 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d 0a  .            )..
23d20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
23d30 20 20 20 20 20 20 20 69 66 20 28 76 73 56 65 72         if (vsVer
23d40 73 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  sion == null).. 
23d50 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
23d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
23d70 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 56  ror = "invalid V
23d80 53 20 76 65 72 73 69 6f 6e 22 3b 0d 0a 20 20 20  S version";..   
23d90 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
23da0 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  urn false;..    
23db0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
23dc0 20 20 20 20 20 20 20 20 20 69 66 20 28 70 61 63           if (pac
23dd0 6b 61 67 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  kage == null).. 
23de0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
23df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
23e00 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64 20 56  ror = "invalid V
23e10 53 20 70 61 63 6b 61 67 65 22 3b 0d 0a 20 20 20  S package";..   
23e20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
23e30 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  urn false;..    
23e40 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
23e50 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
23e60 6b 65 79 4e 61 6d 65 20 3d 20 47 65 74 56 73 4b  keyName = GetVsK
23e70 65 79 4e 61 6d 65 28 76 73 56 65 72 73 69 6f 6e  eyName(vsVersion
23e80 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
23e90 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67    using (MockReg
23ea0 69 73 74 72 79 4b 65 79 20 6b 65 79 20 3d 20 52  istryKey key = R
23eb0 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 4f 70  egistryHelper.Op
23ec0 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20  enSubKey(..     
23ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
23ee0 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e 61 6d 65 2c  ootKey, keyName,
23ef0 20 66 61 6c 73 65 2c 20 77 68 61 74 49 66 2c 20   false, whatIf, 
23f00 76 65 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20  verbose))..     
23f10 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
23f20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6b 65            if (ke
23f30 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  y == null)..    
23f40 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
23f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23f60 20 20 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e     error = Strin
23f70 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  g.Format(..     
23f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23f90 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20 6f 70     "could not op
23fa0 65 6e 20 72 65 67 69 73 74 72 79 20 6b 65 79 3a  en registry key:
23fb0 20 7b 30 7d 5c 5c 7b 31 7d 22 2c 0d 0a 20 20 20   {0}\\{1}",..   
23fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23fd0 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 6b 65       rootKey, ke
23fe0 79 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  yName);....     
23ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
24000 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
24010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
24020 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
24030 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65     using (MockRe
24040 67 69 73 74 72 79 4b 65 79 20 73 75 62 4b 65 79  gistryKey subKey
24050 20 3d 20 52 65 67 69 73 74 72 79 48 65 6c 70 65   = RegistryHelpe
24060 72 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20  r.OpenSubKey(.. 
24070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24080 20 20 20 20 20 20 20 6b 65 79 2c 20 22 44 61 74         key, "Dat
24090 61 50 72 6f 76 69 64 65 72 73 22 2c 20 74 72 75  aProviders", tru
240a0 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f  e, whatIf, verbo
240b0 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  se))..          
240c0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
240d0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
240e0 28 73 75 62 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29  (subKey == null)
240f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
24100 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
24110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24120 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e   error = String.
24130 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
24140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24150 20 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20       "could not 
24160 6f 70 65 6e 20 72 65 67 69 73 74 72 79 20 6b 65  open registry ke
24170 79 3a 20 7b 30 7d 5c 5c 44 61 74 61 50 72 6f 76  y: {0}\\DataProv
24180 69 64 65 72 73 22 2c 0d 0a 20 20 20 20 20 20 20  iders",..       
24190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
241a0 20 20 20 20 20 6b 65 79 29 3b 0d 0a 0d 0a 20 20       key);....  
241b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
241c0 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
241d0 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  se;..           
241e0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
241f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24200 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67    using (MockReg
24210 69 73 74 72 79 4b 65 79 20 64 61 74 61 50 72 6f  istryKey dataPro
24220 76 69 64 65 72 4b 65 79 20 3d 0d 0a 20 20 20 20  viderKey =..    
24230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24240 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79          Registry
24250 48 65 6c 70 65 72 2e 43 72 65 61 74 65 53 75 62  Helper.CreateSub
24260 4b 65 79 28 73 75 62 4b 65 79 2c 0d 0a 20 20 20  Key(subKey,..   
24270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24280 20 20 20 20 20 20 20 20 20 70 61 63 6b 61 67 65           package
24290 2e 44 61 74 61 50 72 6f 76 69 64 65 72 49 64 2e  .DataProviderId.
242a0 54 6f 53 74 72 69 6e 67 28 56 73 49 64 46 6f 72  ToString(VsIdFor
242b0 6d 61 74 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  mat),..         
242c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
242d0 20 20 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f     whatIf, verbo
242e0 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  se))..          
242f0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
24300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24310 20 20 20 20 20 69 66 20 28 64 61 74 61 50 72 6f       if (dataPro
24320 76 69 64 65 72 4b 65 79 20 3d 3d 20 6e 75 6c 6c  viderKey == null
24330 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
24340 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
24350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24360 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
24370 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28  = String.Format(
24380 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
24390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
243a0 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20 63 72 65    "could not cre
243b0 61 74 65 20 72 65 67 69 73 74 72 79 20 6b 65 79  ate registry key
243c0 3a 20 7b 30 7d 5c 5c 7b 31 7d 22 2c 20 6b 65 79  : {0}\\{1}", key
243d0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
243e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
243f0 20 20 20 70 61 63 6b 61 67 65 2e 44 61 74 61 50     package.DataP
24400 72 6f 76 69 64 65 72 49 64 2e 54 6f 53 74 72 69  roviderId.ToStri
24410 6e 67 28 56 73 49 64 46 6f 72 6d 61 74 29 29 3b  ng(VsIdFormat));
24420 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
24430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24440 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20  return false;.. 
24450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24460 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
24470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24480 20 20 20 20 52 65 67 69 73 74 72 79 48 65 6c 70      RegistryHelp
24490 65 72 2e 53 65 74 56 61 6c 75 65 28 0d 0a 20 20  er.SetValue(..  
244a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
244b0 20 20 20 20 20 20 20 20 20 20 64 61 74 61 50 72            dataPr
244c0 6f 76 69 64 65 72 4b 65 79 2c 20 6e 75 6c 6c 2c  oviderKey, null,
244d0 20 44 65 73 63 72 69 70 74 69 6f 6e 2c 20 77 68   Description, wh
244e0 61 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20  atIf,..         
244f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24500 20 20 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a     verbose);....
24510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24520 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79          Registry
24530 48 65 6c 70 65 72 2e 53 65 74 56 61 6c 75 65 28  Helper.SetValue(
24540 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
24550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 61                da
24560 74 61 50 72 6f 76 69 64 65 72 4b 65 79 2c 20 22  taProviderKey, "
24570 49 6e 76 61 72 69 61 6e 74 4e 61 6d 65 22 2c 20  InvariantName", 
24580 49 6e 76 61 72 69 61 6e 74 4e 61 6d 65 2c 0d 0a  InvariantName,..
24590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
245a0 20 20 20 20 20 20 20 20 20 20 20 20 77 68 61 74              what
245b0 49 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d  If, verbose);...
245c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
245d0 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72           Registr
245e0 79 48 65 6c 70 65 72 2e 53 65 74 56 61 6c 75 65  yHelper.SetValue
245f0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
24600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
24610 61 74 61 50 72 6f 76 69 64 65 72 4b 65 79 2c 20  ataProviderKey, 
24620 22 54 65 63 68 6e 6f 6c 6f 67 79 22 2c 0d 0a 20  "Technology",.. 
24630 20 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 70 61 63 6b 61             packa
24650 67 65 2e 41 64 6f 4e 65 74 54 65 63 68 6e 6f 6c  ge.AdoNetTechnol
24660 6f 67 79 49 64 2e 54 6f 53 74 72 69 6e 67 28 56  ogyId.ToString(V
24670 73 49 64 46 6f 72 6d 61 74 29 2c 0d 0a 20 20 20  sIdFormat),..   
24680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24690 20 20 20 20 20 20 20 20 20 77 68 61 74 49 66 2c           whatIf,
246a0 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20   verbose);....  
246b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
246c0 20 20 20 20 20 20 52 65 67 69 73 74 72 79 48 65        RegistryHe
246d0 6c 70 65 72 2e 53 65 74 56 61 6c 75 65 28 0d 0a  lper.SetValue(..
246e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
246f0 20 20 20 20 20 20 20 20 20 20 20 20 64 61 74 61              data
24700 50 72 6f 76 69 64 65 72 4b 65 79 2c 20 22 43 6f  ProviderKey, "Co
24710 64 65 42 61 73 65 22 2c 20 66 69 6c 65 4e 61 6d  deBase", fileNam
24720 65 2c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20  e, whatIf,..    
24730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24740 20 20 20 20 20 20 20 20 76 65 72 62 6f 73 65 29          verbose)
24750 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
24760 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67               Reg
24770 69 73 74 72 79 48 65 6c 70 65 72 2e 53 65 74 56  istryHelper.SetV
24780 61 6c 75 65 28 0d 0a 20 20 20 20 20 20 20 20 20  alue(..         
24790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
247a0 20 20 20 64 61 74 61 50 72 6f 76 69 64 65 72 4b     dataProviderK
247b0 65 79 2c 20 22 46 61 63 74 6f 72 79 53 65 72 76  ey, "FactoryServ
247c0 69 63 65 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  ice",..         
247d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
247e0 20 20 20 70 61 63 6b 61 67 65 2e 53 65 72 76 69     package.Servi
247f0 63 65 49 64 2e 54 6f 53 74 72 69 6e 67 28 56 73  ceId.ToString(Vs
24800 49 64 46 6f 72 6d 61 74 29 2c 20 77 68 61 74 49  IdFormat), whatI
24810 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f,..            
24820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24830 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20  verbose);....   
24840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24850 20 20 20 20 20 52 65 67 69 73 74 72 79 48 65 6c       RegistryHel
24860 70 65 72 2e 43 72 65 61 74 65 53 75 62 4b 65 79  per.CreateSubKey
24870 28 64 61 74 61 50 72 6f 76 69 64 65 72 4b 65 79  (dataProviderKey
24880 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
24890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
248a0 53 75 70 70 6f 72 74 65 64 4f 62 6a 65 63 74 73  SupportedObjects
248b0 5c 5c 44 61 74 61 43 6f 6e 6e 65 63 74 69 6f 6e  \\DataConnection
248c0 55 49 43 6f 6e 74 72 6f 6c 22 2c 0d 0a 20 20 20  UIControl",..   
248d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
248e0 20 20 20 20 20 20 20 20 20 77 68 61 74 49 66 2c           whatIf,
248f0 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20   verbose);....  
24900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24910 20 20 20 20 20 20 52 65 67 69 73 74 72 79 48 65        RegistryHe
24920 6c 70 65 72 2e 43 72 65 61 74 65 53 75 62 4b 65  lper.CreateSubKe
24930 79 28 64 61 74 61 50 72 6f 76 69 64 65 72 4b 65  y(dataProviderKe
24940 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y,..            
24950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24960 22 53 75 70 70 6f 72 74 65 64 4f 62 6a 65 63 74  "SupportedObject
24970 73 5c 5c 44 61 74 61 43 6f 6e 6e 65 63 74 69 6f  s\\DataConnectio
24980 6e 50 72 6f 70 65 72 74 69 65 73 22 2c 0d 0a 20  nProperties",.. 
24990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
249a0 20 20 20 20 20 20 20 20 20 20 20 77 68 61 74 49             whatI
249b0 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a  f, verbose);....
249c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
249d0 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79          Registry
249e0 48 65 6c 70 65 72 2e 43 72 65 61 74 65 53 75 62  Helper.CreateSub
249f0 4b 65 79 28 64 61 74 61 50 72 6f 76 69 64 65 72  Key(dataProvider
24a00 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  Key,..          
24a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24a20 20 20 22 53 75 70 70 6f 72 74 65 64 4f 62 6a 65    "SupportedObje
24a30 63 74 73 5c 5c 44 61 74 61 43 6f 6e 6e 65 63 74  cts\\DataConnect
24a40 69 6f 6e 53 75 70 70 6f 72 74 22 2c 20 77 68 61  ionSupport", wha
24a50 74 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf,..          
24a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24a70 20 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20    verbose);.... 
24a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24a90 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79 48         RegistryH
24aa0 65 6c 70 65 72 2e 43 72 65 61 74 65 53 75 62 4b  elper.CreateSubK
24ab0 65 79 28 64 61 74 61 50 72 6f 76 69 64 65 72 4b  ey(dataProviderK
24ac0 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey,..           
24ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24ae0 20 22 53 75 70 70 6f 72 74 65 64 4f 62 6a 65 63   "SupportedObjec
24af0 74 73 5c 5c 44 61 74 61 4f 62 6a 65 63 74 53 75  ts\\DataObjectSu
24b00 70 70 6f 72 74 22 2c 20 77 68 61 74 49 66 2c 0d  pport", whatIf,.
24b10 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
24b20 20 20 20 20 20 20 20 20 20 20 20 20 20 76 65 72               ver
24b30 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  bose);....      
24b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24b50 20 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72    RegistryHelper
24b60 2e 43 72 65 61 74 65 53 75 62 4b 65 79 28 64 61  .CreateSubKey(da
24b70 74 61 50 72 6f 76 69 64 65 72 4b 65 79 2c 0d 0a  taProviderKey,..
24b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24b90 20 20 20 20 20 20 20 20 20 20 20 20 22 53 75 70              "Sup
24ba0 70 6f 72 74 65 64 4f 62 6a 65 63 74 73 5c 5c 44  portedObjects\\D
24bb0 61 74 61 56 69 65 77 53 75 70 70 6f 72 74 22 2c  ataViewSupport",
24bc0 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20 20 20   whatIf,..      
24bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24be0 20 20 20 20 20 20 76 65 72 62 6f 73 65 29 3b 0d        verbose);.
24bf0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
24c00 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
24c10 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
24c20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
24c30 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74          return t
24c40 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  rue;..        }.
24c50 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
24c60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24c70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24c80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24c90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
24ca0 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72  //....        pr
24cb0 69 76 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f  ivate static boo
24cc0 6c 20 52 65 6d 6f 76 65 56 73 44 61 74 61 50 72  l RemoveVsDataPr
24cd0 6f 76 69 64 65 72 28 0d 0a 20 20 20 20 20 20 20  ovider(..       
24ce0 20 20 20 20 20 52 65 67 69 73 74 72 79 4b 65 79       RegistryKey
24cf0 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 20 20   rootKey,..     
24d00 20 20 20 20 20 20 20 56 65 72 73 69 6f 6e 20 76         Version v
24d10 73 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20  sVersion,..     
24d20 20 20 20 20 20 20 20 50 61 63 6b 61 67 65 20 70         Package p
24d30 61 63 6b 61 67 65 2c 0d 0a 20 20 20 20 20 20 20  ackage,..       
24d40 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49 66       bool whatIf
24d50 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
24d60 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a 20 20  ool verbose,..  
24d70 20 20 20 20 20 20 20 20 20 20 72 65 66 20 73 74            ref st
24d80 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20 20  ring error..    
24d90 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
24da0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
24db0 20 20 69 66 20 28 76 73 56 65 72 73 69 6f 6e 20    if (vsVersion 
24dc0 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
24dd0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
24de0 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
24df0 20 22 69 6e 76 61 6c 69 64 20 56 53 20 76 65 72   "invalid VS ver
24e00 73 69 6f 6e 22 3b 0d 0a 20 20 20 20 20 20 20 20  sion";..        
24e10 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
24e20 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
24e30 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
24e40 20 20 20 20 73 74 72 69 6e 67 20 6b 65 79 4e 61      string keyNa
24e50 6d 65 20 3d 20 47 65 74 56 73 4b 65 79 4e 61 6d  me = GetVsKeyNam
24e60 65 28 76 73 56 65 72 73 69 6f 6e 29 3b 0d 0a 0d  e(vsVersion);...
24e70 0a 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69  .            usi
24e80 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79  ng (MockRegistry
24e90 4b 65 79 20 6b 65 79 20 3d 20 52 65 67 69 73 74  Key key = Regist
24ea0 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62  ryHelper.OpenSub
24eb0 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  Key(..          
24ec0 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b 65            rootKe
24ed0 79 2c 20 6b 65 79 4e 61 6d 65 2c 20 66 61 6c 73  y, keyName, fals
24ee0 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f  e, whatIf, verbo
24ef0 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  se))..          
24f00 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
24f10 20 20 20 20 20 69 66 20 28 6b 65 79 20 3d 3d 20       if (key == 
24f20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
24f30 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
24f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72                er
24f50 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72  ror = String.For
24f60 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
24f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 63                "c
24f80 6f 75 6c 64 20 6e 6f 74 20 6f 70 65 6e 20 72 65  ould not open re
24f90 67 69 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c  gistry key: {0}\
24fa0 5c 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20  \{1}",..        
24fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24fc0 72 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e 61 6d 65  rootKey, keyName
24fd0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
24fe0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
24ff0 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
25000 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
25010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 75 73                us
25020 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74 72  ing (MockRegistr
25030 79 4b 65 79 20 73 75 62 4b 65 79 20 3d 20 52 65  yKey subKey = Re
25040 67 69 73 74 72 79 48 65 6c 70 65 72 2e 4f 70 65  gistryHelper.Ope
25050 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20  nSubKey(..      
25060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25070 20 20 6b 65 79 2c 20 22 44 61 74 61 50 72 6f 76    key, "DataProv
25080 69 64 65 72 73 22 2c 20 74 72 75 65 2c 20 77 68  iders", true, wh
25090 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 29 0d  atIf, verbose)).
250a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
250b0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
250c0 20 20 20 20 20 20 20 20 69 66 20 28 73 75 62 4b          if (subK
250d0 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ey == null)..   
250e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
250f0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
25100 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
25110 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  r = String.Forma
25120 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
25130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25140 22 63 6f 75 6c 64 20 6e 6f 74 20 6f 70 65 6e 20  "could not open 
25150 72 65 67 69 73 74 72 79 20 6b 65 79 3a 20 7b 30  registry key: {0
25160 7d 5c 5c 44 61 74 61 50 72 6f 76 69 64 65 72 73  }\\DataProviders
25170 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
25180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25190 6b 65 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  key);....       
251a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
251b0 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a   return false;..
251c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
251d0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
251e0 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67               Reg
251f0 69 73 74 72 79 48 65 6c 70 65 72 2e 44 65 6c 65  istryHelper.Dele
25200 74 65 53 75 62 4b 65 79 54 72 65 65 28 0d 0a 20  teSubKeyTree(.. 
25210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25220 20 20 20 20 20 20 20 73 75 62 4b 65 79 2c 20 70         subKey, p
25230 61 63 6b 61 67 65 2e 44 61 74 61 50 72 6f 76 69  ackage.DataProvi
25240 64 65 72 49 64 2e 54 6f 53 74 72 69 6e 67 28 56  derId.ToString(V
25250 73 49 64 46 6f 72 6d 61 74 29 2c 0d 0a 20 20 20  sIdFormat),..   
25260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25270 20 20 20 20 20 77 68 61 74 49 66 2c 20 76 65 72       whatIf, ver
25280 62 6f 73 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  bose);..        
25290 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
252a0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
252b0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74          return t
252c0 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  rue;..        }.
252d0 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
252e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
252f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25300 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25310 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25320 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72  //....        pr
25330 69 76 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f  ivate static boo
25340 6c 20 50 72 6f 63 65 73 73 56 73 44 61 74 61 50  l ProcessVsDataP
25350 72 6f 76 69 64 65 72 28 0d 0a 20 20 20 20 20 20  rovider(..      
25360 20 20 20 20 20 20 52 65 67 69 73 74 72 79 4b 65        RegistryKe
25370 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20 20 20 20  y rootKey,..    
25380 20 20 20 20 20 20 20 20 56 65 72 73 69 6f 6e 20          Version 
25390 76 73 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20  vsVersion,..    
253a0 20 20 20 20 20 20 20 20 50 61 63 6b 61 67 65 20          Package 
253b0 70 61 63 6b 61 67 65 2c 0d 0a 20 20 20 20 20 20  package,..      
253c0 20 20 20 20 20 20 6f 62 6a 65 63 74 20 63 6c 69        object cli
253d0 65 6e 74 44 61 74 61 2c 0d 0a 20 20 20 20 20 20  entData,..      
253e0 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74 49        bool whatI
253f0 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f,..            
25400 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a 20  bool verbose,.. 
25410 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20 73             ref s
25420 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20  tring error..   
25430 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
25440 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
25450 20 20 20 41 6e 79 50 61 69 72 3c 73 74 72 69 6e     AnyPair<strin
25460 67 2c 20 62 6f 6f 6c 3e 20 70 61 69 72 20 3d 20  g, bool> pair = 
25470 63 6c 69 65 6e 74 44 61 74 61 20 61 73 20 41 6e  clientData as An
25480 79 50 61 69 72 3c 73 74 72 69 6e 67 2c 20 62 6f  yPair<string, bo
25490 6f 6c 3e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ol>;....        
254a0 20 20 20 20 69 66 20 28 70 61 69 72 20 3d 3d 20      if (pair == 
254b0 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
254c0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
254d0 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69        error = "i
254e0 6e 76 61 6c 69 64 20 56 53 20 63 61 6c 6c 62 61  nvalid VS callba
254f0 63 6b 20 64 61 74 61 22 3b 0d 0a 20 20 20 20 20  ck data";..     
25500 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
25510 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
25520 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
25530 20 20 20 20 20 20 20 69 66 20 28 70 61 69 72 2e         if (pair.
25540 59 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  Y)..            
25550 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
25560 20 20 20 72 65 74 75 72 6e 20 41 64 64 56 73 44     return AddVsD
25570 61 74 61 50 72 6f 76 69 64 65 72 28 0d 0a 20 20  ataProvider(..  
25580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25590 20 20 72 6f 6f 74 4b 65 79 2c 20 76 73 56 65 72    rootKey, vsVer
255a0 73 69 6f 6e 2c 20 70 61 63 6b 61 67 65 2c 20 70  sion, package, p
255b0 61 69 72 2e 58 2c 0d 0a 20 20 20 20 20 20 20 20  air.X,..        
255c0 20 20 20 20 20 20 20 20 20 20 20 20 77 68 61 74              what
255d0 49 66 2c 20 76 65 72 62 6f 73 65 2c 20 72 65 66  If, verbose, ref
255e0 20 65 72 72 6f 72 29 3b 0d 0a 20 20 20 20 20 20   error);..      
255f0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
25600 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20       else..     
25610 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
25620 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
25630 20 52 65 6d 6f 76 65 56 73 44 61 74 61 50 72 6f   RemoveVsDataPro
25640 76 69 64 65 72 28 0d 0a 20 20 20 20 20 20 20 20  vider(..        
25650 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74              root
25660 4b 65 79 2c 20 76 73 56 65 72 73 69 6f 6e 2c 20  Key, vsVersion, 
25670 70 61 63 6b 61 67 65 2c 20 77 68 61 74 49 66 2c  package, whatIf,
25680 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
25690 20 20 20 20 20 20 76 65 72 62 6f 73 65 2c 20 72        verbose, r
256a0 65 66 20 65 72 72 6f 72 29 3b 0d 0a 20 20 20 20  ef error);..    
256b0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
256c0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65     }..        #e
256d0 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
256e0 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
256f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25700 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25710 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25720 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
25730 20 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 56         #region V
25740 69 73 75 61 6c 20 53 74 75 64 69 6f 20 50 61 63  isual Studio Pac
25750 6b 61 67 65 20 48 61 6e 64 6c 69 6e 67 0d 0a 20  kage Handling.. 
25760 20 20 20 20 20 20 20 70 72 69 76 61 74 65 20 73         private s
25770 74 61 74 69 63 20 76 6f 69 64 20 49 6e 69 74 69  tatic void Initi
25780 61 6c 69 7a 65 56 73 50 61 63 6b 61 67 65 28 0d  alizeVsPackage(.
25790 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66  .            ref
257a0 20 50 61 63 6b 61 67 65 20 70 61 63 6b 61 67 65   Package package
257b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 29 0d  ..            ).
257c0 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
257d0 20 20 20 20 20 20 20 20 69 66 20 28 70 61 63 6b          if (pack
257e0 61 67 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  age == null)..  
257f0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
25800 20 20 20 20 20 20 20 20 20 20 20 20 20 70 61 63               pac
25810 6b 61 67 65 20 3d 20 6e 65 77 20 50 61 63 6b 61  kage = new Packa
25820 67 65 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ge();....       
25830 20 20 20 20 20 20 20 20 20 70 61 63 6b 61 67 65           package
25840 2e 41 64 6f 4e 65 74 54 65 63 68 6e 6f 6c 6f 67  .AdoNetTechnolog
25850 79 49 64 20 3d 20 6e 65 77 20 47 75 69 64 28 0d  yId = new Guid(.
25860 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
25870 20 20 20 20 20 22 37 37 41 42 39 41 39 44 2d 37       "77AB9A9D-7
25880 38 42 39 2d 34 42 41 37 2d 39 31 41 43 2d 38 37  8B9-4BA7-91AC-87
25890 33 46 35 33 33 38 46 31 44 32 22 29 3b 0d 0a 0d  3F5338F1D2");...
258a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
258b0 20 70 61 63 6b 61 67 65 2e 50 61 63 6b 61 67 65   package.Package
258c0 49 64 20 3d 20 6e 65 77 20 47 75 69 64 28 0d 0a  Id = new Guid(..
258d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
258e0 20 20 20 20 22 44 43 42 45 36 43 38 44 2d 30 45      "DCBE6C8D-0E
258f0 35 37 2d 34 30 39 39 2d 41 31 38 33 2d 39 38 46  57-4099-A183-98F
25900 46 37 34 43 36 34 44 39 43 22 29 3b 0d 0a 0d 0a  F74C64D9C");....
25910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25920 70 61 63 6b 61 67 65 2e 53 65 72 76 69 63 65 49  package.ServiceI
25930 64 20 3d 20 6e 65 77 20 47 75 69 64 28 0d 0a 20  d = new Guid(.. 
25940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25950 20 20 20 22 44 43 42 45 36 43 38 44 2d 30 45 35     "DCBE6C8D-0E5
25960 37 2d 34 30 39 39 2d 41 31 38 33 2d 39 38 46 46  7-4099-A183-98FF
25970 37 34 43 36 34 44 39 44 22 29 3b 0d 0a 0d 0a 20  74C64D9D");.... 
25980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70                 p
25990 61 63 6b 61 67 65 2e 44 61 74 61 53 6f 75 72 63  ackage.DataSourc
259a0 65 49 64 20 3d 20 6e 65 77 20 47 75 69 64 28 0d  eId = new Guid(.
259b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
259c0 20 20 20 20 20 22 30 45 42 41 41 42 36 45 2d 43       "0EBAAB6E-C
259d0 41 38 30 2d 34 42 34 41 2d 38 44 44 46 2d 43 42  A80-4B4A-8DDF-CB
259e0 45 36 42 46 30 35 38 43 37 31 22 29 3b 0d 0a 0d  E6BF058C71");...
259f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
25a00 20 70 61 63 6b 61 67 65 2e 44 61 74 61 50 72 6f   package.DataPro
25a10 76 69 64 65 72 49 64 20 3d 20 6e 65 77 20 47 75  viderId = new Gu
25a20 69 64 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  id(..           
25a30 20 20 20 20 20 20 20 20 20 22 30 45 42 41 41 42           "0EBAAB
25a40 36 45 2d 43 41 38 30 2d 34 42 34 41 2d 38 44 44  6E-CA80-4B4A-8DD
25a50 46 2d 43 42 45 36 42 46 30 35 38 43 37 30 22 29  F-CBE6BF058C70")
25a60 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
25a70 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
25a80 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
25a90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25aa0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25ab0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
25ac0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
25ad0 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76 61 74  ..        privat
25ae0 65 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 41 64  e static bool Ad
25af0 64 56 73 50 61 63 6b 61 67 65 28 0d 0a 20 20 20  dVsPackage(..   
25b00 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72           Registr
25b10 79 4b 65 79 20 72 6f 6f 74 4b 65 79 2c 0d 0a 20  yKey rootKey,.. 
25b20 20 20 20 20 20 20 20 20 20 20 20 56 65 72 73 69             Versi
25b30 6f 6e 20 76 73 56 65 72 73 69 6f 6e 2c 0d 0a 20  on vsVersion,.. 
25b40 20 20 20 20 20 20 20 20 20 20 20 50 61 63 6b 61             Packa
25b50 67 65 20 70 61 63 6b 61 67 65 2c 0d 0a 20 20 20  ge package,..   
25b60 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20           string 
25b70 66 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20  fileName,..     
25b80 20 20 20 20 20 20 20 62 6f 6f 6c 20 77 68 61 74         bool what
25b90 49 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  If,..           
25ba0 20 62 6f 6f 6c 20 76 65 72 62 6f 73 65 2c 0d 0a   bool verbose,..
25bb0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 66 20              ref 
25bc0 73 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20  string error..  
25bd0 20 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20            )..   
25be0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
25bf0 20 20 20 20 69 66 20 28 76 73 56 65 72 73 69 6f      if (vsVersio
25c00 6e 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  n == null)..    
25c10 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
25c20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
25c30 20 3d 20 22 69 6e 76 61 6c 69 64 20 56 53 20 76   = "invalid VS v
25c40 65 72 73 69 6f 6e 22 3b 0d 0a 20 20 20 20 20 20  ersion";..      
25c50 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
25c60 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
25c70 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
25c80 20 20 20 20 20 20 69 66 20 28 70 61 63 6b 61 67        if (packag
25c90 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  e == null)..    
25ca0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
25cb0 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
25cc0 20 3d 20 22 69 6e 76 61 6c 69 64 20 56 53 20 70   = "invalid VS p
25cd0 61 63 6b 61 67 65 22 3b 0d 0a 20 20 20 20 20 20  ackage";..      
25ce0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
25cf0 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
25d00 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
25d10 20 20 20 20 20 20 73 74 72 69 6e 67 20 6b 65 79        string key
25d20 4e 61 6d 65 20 3d 20 47 65 74 56 73 4b 65 79 4e  Name = GetVsKeyN
25d30 61 6d 65 28 76 73 56 65 72 73 69 6f 6e 29 3b 0d  ame(vsVersion);.
25d40 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 75  ...            u
25d50 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73 74  sing (MockRegist
25d60 72 79 4b 65 79 20 6b 65 79 20 3d 20 52 65 67 69  ryKey key = Regi
25d70 73 74 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53  stryHelper.OpenS
25d80 75 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20  ubKey(..        
25d90 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74              root
25da0 4b 65 79 2c 20 6b 65 79 4e 61 6d 65 2c 20 66 61  Key, keyName, fa
25db0 6c 73 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72  lse, whatIf, ver
25dc0 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20  bose))..        
25dd0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
25de0 20 20 20 20 20 20 20 69 66 20 28 6b 65 79 20 3d         if (key =
25df0 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
25e00 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
25e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25e20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46  error = String.F
25e30 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
25e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25e50 22 63 6f 75 6c 64 20 6e 6f 74 20 6f 70 65 6e 20  "could not open 
25e60 72 65 67 69 73 74 72 79 20 6b 65 79 3a 20 7b 30  registry key: {0
25e70 7d 5c 5c 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20  }\\{1}",..      
25e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25e90 20 20 72 6f 6f 74 4b 65 79 2c 20 6b 65 79 4e 61    rootKey, keyNa
25ea0 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  me);....        
25eb0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
25ec0 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20  rn false;..     
25ed0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
25ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25ef0 75 73 69 6e 67 20 28 4d 6f 63 6b 52 65 67 69 73  using (MockRegis
25f00 74 72 79 4b 65 79 20 73 75 62 4b 65 79 20 3d 20  tryKey subKey = 
25f10 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 4f  RegistryHelper.O
25f20 70 65 6e 53 75 62 4b 65 79 28 0d 0a 20 20 20 20  penSubKey(..    
25f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25f40 20 20 20 20 6b 65 79 2c 20 22 50 61 63 6b 61 67      key, "Packag
25f50 65 73 22 2c 20 74 72 75 65 2c 20 77 68 61 74 49  es", true, whatI
25f60 66 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a 20 20  f, verbose))..  
25f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
25f80 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
25f90 20 20 20 20 20 69 66 20 28 73 75 62 4b 65 79 20       if (subKey 
25fa0 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
25fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
25fc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
25fd0 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
25fe0 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
25ff0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
26000 20 20 20 20 20 20 20 20 20 20 20 20 20 22 63 6f               "co
26010 75 6c 64 20 6e 6f 74 20 6f 70 65 6e 20 72 65 67  uld not open reg
26020 69 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c  istry key: {0}\\
26030 50 61 63 6b 61 67 65 73 22 2c 0d 0a 20 20 20 20  Packages",..    
26040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26050 20 20 20 20 20 20 20 20 6b 65 79 29 3b 0d 0a 0d          key);...
26060 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
26070 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
26080 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
26090 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
260a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
260b0 20 20 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b       using (Mock
260c0 52 65 67 69 73 74 72 79 4b 65 79 20 70 61 63 6b  RegistryKey pack
260d0 61 67 65 4b 65 79 20 3d 20 52 65 67 69 73 74 72  ageKey = Registr
260e0 79 48 65 6c 70 65 72 2e 43 72 65 61 74 65 53 75  yHelper.CreateSu
260f0 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20  bKey(..         
26100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26110 20 20 20 73 75 62 4b 65 79 2c 20 70 61 63 6b 61     subKey, packa
26120 67 65 2e 50 61 63 6b 61 67 65 49 64 2e 54 6f 53  ge.PackageId.ToS
26130 74 72 69 6e 67 28 56 73 49 64 46 6f 72 6d 61 74  tring(VsIdFormat
26140 29 2c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20  ), whatIf,..    
26150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26160 20 20 20 20 20 20 20 20 76 65 72 62 6f 73 65 29          verbose)
26170 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
26180 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
26190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
261a0 20 20 69 66 20 28 70 61 63 6b 61 67 65 4b 65 79    if (packageKey
261b0 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
261c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
261d0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
261e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
261f0 20 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67    error = String
26200 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
26210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26220 20 20 20 20 20 20 20 20 20 20 22 63 6f 75 6c 64            "could
26230 20 6e 6f 74 20 63 72 65 61 74 65 20 72 65 67 69   not create regi
26240 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 7b  stry key: {0}\\{
26250 31 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  1}",..          
26260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26270 20 20 20 20 20 20 6b 65 79 2c 20 70 61 63 6b 61        key, packa
26280 67 65 2e 50 61 63 6b 61 67 65 49 64 2e 54 6f 53  ge.PackageId.ToS
26290 74 72 69 6e 67 28 56 73 49 64 46 6f 72 6d 61 74  tring(VsIdFormat
262a0 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ));....         
262b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
262c0 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
262d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
262e0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
262f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26300 20 20 20 20 20 20 20 52 65 67 69 73 74 72 79 48         RegistryH
26310 65 6c 70 65 72 2e 53 65 74 56 61 6c 75 65 28 70  elper.SetValue(p
26320 61 63 6b 61 67 65 4b 65 79 2c 20 6e 75 6c 6c 2c  ackageKey, null,
26330 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
26340 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
26350 20 20 20 20 20 20 20 20 20 20 20 20 20 22 7b 30               "{0
26360 7d 20 44 65 73 69 67 6e 65 72 20 50 61 63 6b 61  } Designer Packa
26370 67 65 22 2c 20 50 72 6f 6a 65 63 74 4e 61 6d 65  ge", ProjectName
26380 29 2c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20 20  ), whatIf,..    
26390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
263a0 20 20 20 20 20 20 20 20 76 65 72 62 6f 73 65 29          verbose)
263b0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
263c0 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67               Reg
263d0 69 73 74 72 79 48 65 6c 70 65 72 2e 53 65 74 56  istryHelper.SetV
263e0 61 6c 75 65 28 70 61 63 6b 61 67 65 4b 65 79 2c  alue(packageKey,
263f0 20 22 43 6c 61 73 73 22 2c 0d 0a 20 20 20 20 20   "Class",..     
26400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26410 20 20 20 20 20 20 20 22 53 51 4c 69 74 65 2e 44         "SQLite.D
26420 65 73 69 67 6e 65 72 2e 53 51 4c 69 74 65 50 61  esigner.SQLitePa
26430 63 6b 61 67 65 22 2c 20 77 68 61 74 49 66 2c 20  ckage", whatIf, 
26440 76 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 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 52 65 67 69 73 74 72 79 48 65 6c       RegistryHel
26470 70 65 72 2e 53 65 74 56 61 6c 75 65 28 70 61 63  per.SetValue(pac
26480 6b 61 67 65 4b 65 79 2c 20 22 43 6f 64 65 42 61  kageKey, "CodeBa
26490 73 65 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  se",..          
264a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
264b0 20 20 66 69 6c 65 4e 61 6d 65 2c 20 77 68 61 74    fileName, what
264c0 49 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d  If, verbose);...
264d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
264e0 20 20 20 20 20 20 20 20 20 52 65 67 69 73 74 72           Registr
264f0 79 48 65 6c 70 65 72 2e 53 65 74 56 61 6c 75 65  yHelper.SetValue
26500 28 70 61 63 6b 61 67 65 4b 65 79 2c 20 22 49 44  (packageKey, "ID
26510 22 2c 20 34 30 30 2c 20 77 68 61 74 49 66 2c 0d  ", 400, whatIf,.
26520 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
26530 20 20 20 20 20 20 20 20 20 20 20 20 20 76 65 72               ver
26540 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  bose);....      
26550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26560 20 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72    RegistryHelper
26570 2e 53 65 74 56 61 6c 75 65 28 70 61 63 6b 61 67  .SetValue(packag
26580 65 4b 65 79 2c 20 22 49 6e 70 72 6f 63 53 65 72  eKey, "InprocSer
26590 76 65 72 33 32 22 2c 0d 0a 20 20 20 20 20 20 20  ver32",..       
265a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
265b0 20 20 20 20 20 50 61 74 68 2e 43 6f 6d 62 69 6e       Path.Combin
265c0 65 28 45 6e 76 69 72 6f 6e 6d 65 6e 74 2e 53 79  e(Environment.Sy
265d0 73 74 65 6d 44 69 72 65 63 74 6f 72 79 2c 0d 0a  stemDirectory,..
265e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
265f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26600 22 6d 73 63 6f 72 65 65 2e 64 6c 6c 22 29 2c 20  "mscoree.dll"), 
26610 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29  whatIf, verbose)
26620 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
26630 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67               Reg
26640 69 73 74 72 79 48 65 6c 70 65 72 2e 53 65 74 56  istryHelper.SetV
26650 61 6c 75 65 28 70 61 63 6b 61 67 65 4b 65 79 2c  alue(packageKey,
26660 20 22 43 6f 6d 70 61 6e 79 4e 61 6d 65 22 2c 0d   "CompanyName",.
26670 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
26680 20 20 20 20 20 20 20 20 20 20 20 20 20 22 68 74               "ht
26690 74 70 3a 2f 2f 73 79 73 74 65 6d 2e 64 61 74 61  tp://system.data
266a0 2e 73 71 6c 69 74 65 2e 6f 72 67 2f 22 2c 20 77  .sqlite.org/", w
266b0 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 3b  hatIf, verbose);
266c0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
266d0 20 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69              Regi
266e0 73 74 72 79 48 65 6c 70 65 72 2e 53 65 74 56 61  stryHelper.SetVa
266f0 6c 75 65 28 70 61 63 6b 61 67 65 4b 65 79 2c 20  lue(packageKey, 
26700 22 4d 69 6e 45 64 69 74 69 6f 6e 22 2c 0d 0a 20  "MinEdition",.. 
26710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26720 20 20 20 20 20 20 20 20 20 20 20 22 73 74 61 6e             "stan
26730 64 61 72 64 22 2c 20 77 68 61 74 49 66 2c 20 76  dard", whatIf, v
26740 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20  erbose);....    
26750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26760 20 20 20 20 52 65 67 69 73 74 72 79 48 65 6c 70      RegistryHelp
26770 65 72 2e 53 65 74 56 61 6c 75 65 28 70 61 63 6b  er.SetValue(pack
26780 61 67 65 4b 65 79 2c 20 22 50 72 6f 64 75 63 74  ageKey, "Product
26790 4e 61 6d 65 22 2c 0d 0a 20 20 20 20 20 20 20 20  Name",..        
267a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
267b0 20 20 20 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61      String.Forma
267c0 74 28 22 7b 30 7d 20 44 65 73 69 67 6e 65 72 20  t("{0} Designer 
267d0 50 61 63 6b 61 67 65 22 2c 20 50 72 6f 6a 65 63  Package", Projec
267e0 74 4e 61 6d 65 29 2c 0d 0a 20 20 20 20 20 20 20  tName),..       
267f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26800 20 20 20 20 20 77 68 61 74 49 66 2c 20 76 65 72       whatIf, ver
26810 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  bose);....      
26820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26830 20 20 52 65 67 69 73 74 72 79 48 65 6c 70 65 72    RegistryHelper
26840 2e 53 65 74 56 61 6c 75 65 28 70 61 63 6b 61 67  .SetValue(packag
26850 65 4b 65 79 2c 20 22 50 72 6f 64 75 63 74 56 65  eKey, "ProductVe
26860 72 73 69 6f 6e 22 2c 0d 0a 20 20 20 20 20 20 20  rsion",..       
26870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26880 20 20 20 20 20 22 31 2e 30 22 2c 20 77 68 61 74       "1.0", what
26890 49 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a 0d  If, verbose);...
268a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
268b0 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28           using (
268c0 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20  MockRegistryKey 
268d0 74 6f 6f 6c 62 6f 78 4b 65 79 20 3d 20 52 65 67  toolboxKey = Reg
268e0 69 73 74 72 79 48 65 6c 70 65 72 2e 43 72 65 61  istryHelper.Crea
268f0 74 65 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20  teSubKey(..     
26900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26910 20 20 20 20 20 20 20 20 20 20 20 70 61 63 6b 61             packa
26920 67 65 4b 65 79 2c 20 22 54 6f 6f 6c 62 6f 78 22  geKey, "Toolbox"
26930 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62 6f 73  , whatIf, verbos
26940 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e))..           
26950 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
26960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26970 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
26980 74 6f 6f 6c 62 6f 78 4b 65 79 20 3d 3d 20 6e 75  toolboxKey == nu
26990 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
269a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
269b0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
269c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
269d0 20 20 20 20 65 72 72 6f 72 20 3d 20 53 74 72 69      error = Stri
269e0 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
269f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26a10 22 63 6f 75 6c 64 20 6e 6f 74 20 63 72 65 61 74  "could not creat
26a20 65 20 72 65 67 69 73 74 72 79 20 6b 65 79 3a 20  e registry key: 
26a30 7b 30 7d 5c 5c 54 6f 6f 6c 62 6f 78 22 2c 0d 0a  {0}\\Toolbox",..
26a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26a60 20 20 20 20 70 61 63 6b 61 67 65 4b 65 79 29 3b      packageKey);
26a70 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
26a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26a90 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
26aa0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
26ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
26ac0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
26ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26ae0 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 53  RegistryHelper.S
26af0 65 74 56 61 6c 75 65 28 0d 0a 20 20 20 20 20 20  etValue(..      
26b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26b10 20 20 20 20 20 20 20 20 20 20 74 6f 6f 6c 62 6f            toolbo
26b20 78 4b 65 79 2c 20 22 44 65 66 61 75 6c 74 20 49  xKey, "Default I
26b30 74 65 6d 73 22 2c 20 33 2c 20 77 68 61 74 49 66  tems", 3, whatIf
26b40 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
26b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26b60 20 20 20 76 65 72 62 6f 73 65 29 3b 0d 0a 20 20     verbose);..  
26b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26b80 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
26b90 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
26ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26bb0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
26bc0 20 20 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b       using (Mock
26bd0 52 65 67 69 73 74 72 79 4b 65 79 20 73 75 62 4b  RegistryKey subK
26be0 65 79 20 3d 20 52 65 67 69 73 74 72 79 48 65 6c  ey = RegistryHel
26bf0 70 65 72 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d  per.OpenSubKey(.
26c00 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
26c10 20 20 20 20 20 20 20 20 20 6b 65 79 2c 20 22 4d           key, "M
26c20 65 6e 75 73 22 2c 20 74 72 75 65 2c 20 77 68 61  enus", true, wha
26c30 74 49 66 2c 20 76 65 72 62 6f 73 65 29 29 0d 0a  tIf, verbose))..
26c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26c50 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
26c60 20 20 20 20 20 20 20 69 66 20 28 73 75 62 4b 65         if (subKe
26c70 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  y == null)..    
26c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26c90 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
26ca0 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
26cb0 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74   = String.Format
26cc0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
26cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
26ce0 63 6f 75 6c 64 20 6e 6f 74 20 6f 70 65 6e 20 72  could not open r
26cf0 65 67 69 73 74 72 79 20 6b 65 79 3a 20 7b 30 7d  egistry key: {0}
26d00 5c 5c 4d 65 6e 75 73 22 2c 0d 0a 20 20 20 20 20  \\Menus",..     
26d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26d20 20 20 20 20 20 20 20 6b 65 79 29 3b 0d 0a 0d 0a         key);....
26d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26d40 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
26d50 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  alse;..         
26d60 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
26d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26d80 20 20 20 20 52 65 67 69 73 74 72 79 48 65 6c 70      RegistryHelp
26d90 65 72 2e 53 65 74 56 61 6c 75 65 28 0d 0a 20 20  er.SetValue(..  
26da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26db0 20 20 20 20 20 20 73 75 62 4b 65 79 2c 20 70 61        subKey, pa
26dc0 63 6b 61 67 65 2e 50 61 63 6b 61 67 65 49 64 2e  ckage.PackageId.
26dd0 54 6f 53 74 72 69 6e 67 28 56 73 49 64 46 6f 72  ToString(VsIdFor
26de0 6d 61 74 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  mat),..         
26df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
26e00 2c 20 31 30 30 30 2c 20 33 22 2c 20 77 68 61 74  , 1000, 3", what
26e10 49 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d 0a 20  If, verbose);.. 
26e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
26e30 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
26e40 20 20 20 20 75 73 69 6e 67 20 28 4d 6f 63 6b 52      using (MockR
26e50 65 67 69 73 74 72 79 4b 65 79 20 73 75 62 4b 65  egistryKey subKe
26e60 79 20 3d 20 52 65 67 69 73 74 72 79 48 65 6c 70  y = RegistryHelp
26e70 65 72 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d 0a  er.OpenSubKey(..
26e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26e90 20 20 20 20 20 20 20 20 6b 65 79 2c 20 22 53 65          key, "Se
26ea0 72 76 69 63 65 73 22 2c 20 74 72 75 65 2c 20 77  rvices", true, w
26eb0 68 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 29  hatIf, verbose))
26ec0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
26ed0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
26ee0 20 20 20 20 20 20 20 20 20 69 66 20 28 73 75 62           if (sub
26ef0 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  Key == null)..  
26f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26f10 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
26f20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
26f30 6f 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d  or = String.Form
26f40 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
26f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26f60 20 22 63 6f 75 6c 64 20 6e 6f 74 20 6f 70 65 6e   "could not open
26f70 20 72 65 67 69 73 74 72 79 20 6b 65 79 3a 20 7b   registry key: {
26f80 30 7d 5c 5c 53 65 72 76 69 63 65 73 22 2c 0d 0a  0}\\Services",..
26f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26fa0 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 29              key)
26fb0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
26fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
26fd0 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  urn false;..    
26fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26ff0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
27000 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28           using (
27010 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20  MockRegistryKey 
27020 73 65 72 76 69 63 65 4b 65 79 20 3d 20 52 65 67  serviceKey = Reg
27030 69 73 74 72 79 48 65 6c 70 65 72 2e 43 72 65 61  istryHelper.Crea
27040 74 65 53 75 62 4b 65 79 28 0d 0a 20 20 20 20 20  teSubKey(..     
27050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27060 20 20 20 20 20 20 20 73 75 62 4b 65 79 2c 20 70         subKey, p
27070 61 63 6b 61 67 65 2e 53 65 72 76 69 63 65 49 64  ackage.ServiceId
27080 2e 54 6f 53 74 72 69 6e 67 28 56 73 49 64 46 6f  .ToString(VsIdFo
27090 72 6d 61 74 29 2c 20 77 68 61 74 49 66 2c 0d 0a  rmat), whatIf,..
270a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
270b0 20 20 20 20 20 20 20 20 20 20 20 20 76 65 72 62              verb
270c0 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ose))..         
270d0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
270e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
270f0 20 20 20 20 20 20 69 66 20 28 73 65 72 76 69 63        if (servic
27100 65 4b 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  eKey == null).. 
27110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27120 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
27130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27140 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 53 74        error = St
27150 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20  ring.Format(..  
27160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 63                "c
27180 6f 75 6c 64 20 6e 6f 74 20 63 72 65 61 74 65 20  ould not create 
27190 72 65 67 69 73 74 72 79 20 6b 65 79 3a 20 7b 30  registry key: {0
271a0 7d 5c 5c 7b 31 7d 22 2c 0d 0a 20 20 20 20 20 20  }\\{1}",..      
271b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
271c0 20 20 20 20 20 20 20 20 20 20 6b 65 79 2c 20 70            key, p
271d0 61 63 6b 61 67 65 2e 53 65 72 76 69 63 65 49 64  ackage.ServiceId
271e0 2e 54 6f 53 74 72 69 6e 67 28 56 73 49 64 46 6f  .ToString(VsIdFo
271f0 72 6d 61 74 29 29 3b 0d 0a 0d 0a 20 20 20 20 20  rmat));....     
27200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27210 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
27220 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lse;..          
27230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
27240 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
27250 20 20 20 20 20 20 20 20 20 20 20 52 65 67 69 73             Regis
27260 74 72 79 48 65 6c 70 65 72 2e 53 65 74 56 61 6c  tryHelper.SetVal
27270 75 65 28 73 65 72 76 69 63 65 4b 65 79 2c 20 6e  ue(serviceKey, n
27280 75 6c 6c 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ull,..          
27290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
272a0 20 20 70 61 63 6b 61 67 65 2e 50 61 63 6b 61 67    package.Packag
272b0 65 49 64 2e 54 6f 53 74 72 69 6e 67 28 56 73 49  eId.ToString(VsI
272c0 64 46 6f 72 6d 61 74 29 2c 20 77 68 61 74 49 66  dFormat), whatIf
272d0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
272e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76                 v
272f0 65 72 62 6f 73 65 29 3b 0d 0a 0d 0a 20 20 20 20  erbose);....    
27300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27310 20 20 20 20 52 65 67 69 73 74 72 79 48 65 6c 70      RegistryHelp
27320 65 72 2e 53 65 74 56 61 6c 75 65 28 73 65 72 76  er.SetValue(serv
27330 69 63 65 4b 65 79 2c 20 22 4e 61 6d 65 22 2c 0d  iceKey, "Name",.
27340 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
27350 20 20 20 20 20 20 20 20 20 20 20 20 20 53 74 72               Str
27360 69 6e 67 2e 46 6f 72 6d 61 74 28 22 7b 30 7d 20  ing.Format("{0} 
27370 44 65 73 69 67 6e 65 72 20 53 65 72 76 69 63 65  Designer Service
27380 22 2c 20 50 72 6f 6a 65 63 74 4e 61 6d 65 29 2c  ", ProjectName),
27390 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
273a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 77 68                wh
273b0 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 3b 0d  atIf, verbose);.
273c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
273d0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
273e0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
273f0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
27400 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74          return t
27410 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  rue;..        }.
27420 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f  ...        /////
27430 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27440 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27450 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27460 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
27470 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72  //....        pr
27480 69 76 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f  ivate static boo
27490 6c 20 52 65 6d 6f 76 65 56 73 50 61 63 6b 61 67  l RemoveVsPackag
274a0 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
274b0 52 65 67 69 73 74 72 79 4b 65 79 20 72 6f 6f 74  RegistryKey root
274c0 4b 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  Key,..          
274d0 20 20 56 65 72 73 69 6f 6e 20 76 73 56 65 72 73    Version vsVers
274e0 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ion,..          
274f0 20 20 50 61 63 6b 61 67 65 20 70 61 63 6b 61 67    Package packag
27500 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
27510 62 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20  bool whatIf,..  
27520 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76            bool v
27530 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20  erbose,..       
27540 20 20 20 20 20 72 65 66 20 73 74 72 69 6e 67 20       ref string 
27550 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20  error..         
27560 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d     )..        {.
27570 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
27580 28 76 73 56 65 72 73 69 6f 6e 20 3d 3d 20 6e 75  (vsVersion == nu
27590 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
275a0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
275b0 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69 6e 76      error = "inv
275c0 61 6c 69 64 20 56 53 20 76 65 72 73 69 6f 6e 22  alid VS version"
275d0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
275e0 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
275f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
27600 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
27610 66 20 28 70 61 63 6b 61 67 65 20 3d 3d 20 6e 75  f (package == nu
27620 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
27630 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
27640 20 20 20 20 65 72 72 6f 72 20 3d 20 22 69 6e 76      error = "inv
27650 61 6c 69 64 20 56 53 20 70 61 63 6b 61 67 65 22  alid VS package"
27660 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
27670 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
27680 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
27690 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  ...            s
276a0 74 72 69 6e 67 20 6b 65 79 4e 61 6d 65 20 3d 20  tring keyName = 
276b0 47 65 74 56 73 4b 65 79 4e 61 6d 65 28 76 73 56  GetVsKeyName(vsV
276c0 65 72 73 69 6f 6e 29 3b 0d 0a 0d 0a 20 20 20 20  ersion);....    
276d0 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28 4d          using (M
276e0 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20 6b  ockRegistryKey k
276f0 65 79 20 3d 20 52 65 67 69 73 74 72 79 48 65 6c  ey = RegistryHel
27700 70 65 72 2e 4f 70 65 6e 53 75 62 4b 65 79 28 0d  per.OpenSubKey(.
27710 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
27720 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 6b 65       rootKey, ke
27730 79 4e 61 6d 65 2c 20 66 61 6c 73 65 2c 20 77 68  yName, false, wh
27740 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 29 0d  atIf, verbose)).
27750 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
27760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27770 69 66 20 28 6b 65 79 20 3d 3d 20 6e 75 6c 6c 29  if (key == null)
27780 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
27790 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
277a0 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20 3d           error =
277b0 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d   String.Format(.
277c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
277d0 20 20 20 20 20 20 20 20 20 22 63 6f 75 6c 64 20           "could 
277e0 6e 6f 74 20 6f 70 65 6e 20 72 65 67 69 73 74 72  not open registr
277f0 79 20 6b 65 79 3a 20 7b 30 7d 5c 5c 7b 31 7d 22  y key: {0}\\{1}"
27800 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
27810 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b             rootK
27820 65 79 2c 20 6b 65 79 4e 61 6d 65 29 3b 0d 0a 0d  ey, keyName);...
27830 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
27840 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73       return fals
27850 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e;..            
27860 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
27870 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28           using (
27880 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65 79 20  MockRegistryKey 
27890 73 75 62 4b 65 79 20 3d 20 52 65 67 69 73 74 72  subKey = Registr
278a0 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75 62 4b  yHelper.OpenSubK
278b0 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey(..           
278c0 20 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79               key
278d0 2c 20 22 50 61 63 6b 61 67 65 73 22 2c 20 74 72  , "Packages", tr
278e0 75 65 2c 20 77 68 61 74 49 66 2c 20 76 65 72 62  ue, whatIf, verb
278f0 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ose))..         
27900 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
27910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
27920 20 28 73 75 62 4b 65 79 20 3d 3d 20 6e 75 6c 6c   (subKey == null
27930 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
27940 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
27950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27960 20 20 65 72 72 6f 72 20 3d 20 53 74 72 69 6e 67    error = String
27970 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  .Format(..      
27980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27990 20 20 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74        "could not
279a0 20 6f 70 65 6e 20 72 65 67 69 73 74 72 79 20 6b   open registry k
279b0 65 79 3a 20 7b 30 7d 5c 5c 50 61 63 6b 61 67 65  ey: {0}\\Package
279c0 73 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s",..           
279d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
279e0 20 6b 65 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20   key);....      
279f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27a00 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
27a10 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
27a20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
27a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65                Re
27a40 67 69 73 74 72 79 48 65 6c 70 65 72 2e 44 65 6c  gistryHelper.Del
27a50 65 74 65 53 75 62 4b 65 79 54 72 65 65 28 0d 0a  eteSubKeyTree(..
27a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27a70 20 20 20 20 20 20 20 20 6b 65 79 2c 20 70 61 63          key, pac
27a80 6b 61 67 65 2e 50 61 63 6b 61 67 65 49 64 2e 54  kage.PackageId.T
27a90 6f 53 74 72 69 6e 67 28 56 73 49 64 46 6f 72 6d  oString(VsIdForm
27aa0 61 74 29 2c 20 77 68 61 74 49 66 2c 0d 0a 20 20  at), whatIf,..  
27ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27ac0 20 20 20 20 20 20 76 65 72 62 6f 73 65 29 3b 0d        verbose);.
27ad0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
27ae0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
27af0 20 20 20 20 20 20 75 73 69 6e 67 20 28 4d 6f 63        using (Moc
27b00 6b 52 65 67 69 73 74 72 79 4b 65 79 20 73 75 62  kRegistryKey sub
27b10 4b 65 79 20 3d 20 52 65 67 69 73 74 72 79 48 65  Key = RegistryHe
27b20 6c 70 65 72 2e 4f 70 65 6e 53 75 62 4b 65 79 28  lper.OpenSubKey(
27b30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
27b40 20 20 20 20 20 20 20 20 20 20 6b 65 79 2c 20 22            key, "
27b50 4d 65 6e 75 73 22 2c 20 74 72 75 65 2c 20 77 68  Menus", true, wh
27b60 61 74 49 66 2c 20 76 65 72 62 6f 73 65 29 29 0d  atIf, verbose)).
27b70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
27b80 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
27b90 20 20 20 20 20 20 20 20 69 66 20 28 73 75 62 4b          if (subK
27ba0 65 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ey == null)..   
27bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27bc0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
27bd0 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
27be0 72 20 3d 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61  r = String.Forma
27bf0 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
27c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27c10 22 63 6f 75 6c 64 20 6e 6f 74 20 6f 70 65 6e 20  "could not open 
27c20 72 65 67 69 73 74 72 79 20 6b 65 79 3a 20 7b 30  registry key: {0
27c30 7d 5c 5c 4d 65 6e 75 73 22 2c 0d 0a 20 20 20 20  }\\Menus",..    
27c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27c50 20 20 20 20 20 20 20 20 6b 65 79 29 3b 0d 0a 0d          key);...
27c60 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
27c70 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
27c80 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
27c90 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
27ca0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
27cb0 20 20 20 20 20 52 65 67 69 73 74 72 79 48 65 6c       RegistryHel
27cc0 70 65 72 2e 44 65 6c 65 74 65 56 61 6c 75 65 28  per.DeleteValue(
27cd0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
27ce0 20 20 20 20 20 20 20 20 20 20 73 75 62 4b 65 79            subKey
27cf0 2c 20 70 61 63 6b 61 67 65 2e 50 61 63 6b 61 67  , package.Packag
27d00 65 49 64 2e 54 6f 53 74 72 69 6e 67 28 56 73 49  eId.ToString(VsI
27d10 64 46 6f 72 6d 61 74 29 2c 20 77 68 61 74 49 66  dFormat), whatIf
27d20 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
27d30 20 20 20 20 20 20 20 20 20 20 20 76 65 72 62 6f             verbo
27d40 73 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  se);..          
27d50 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
27d60 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e 67             using
27d70 20 28 4d 6f 63 6b 52 65 67 69 73 74 72 79 4b 65   (MockRegistryKe
27d80 79 20 73 75 62 4b 65 79 20 3d 20 52 65 67 69 73  y subKey = Regis
27d90 74 72 79 48 65 6c 70 65 72 2e 4f 70 65 6e 53 75  tryHelper.OpenSu
27da0 62 4b 65 79 28 0d 0a 20 20 20 20 20 20 20 20 20  bKey(..         
27db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b                 k
27dc0 65 79 2c 20 22 53 65 72 76 69 63 65 73 22 2c 20  ey, "Services", 
27dd0 74 72 75 65 2c 20 77 68 61 74 49 66 2c 20 76 65  true, whatIf, ve
27de0 72 62 6f 73 65 29 29 0d 0a 20 20 20 20 20 20 20  rbose))..       
27df0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
27e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27e10 69 66 20 28 73 75 62 4b 65 79 20 3d 3d 20 6e 75  if (subKey == nu
27e20 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
27e30 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
27e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27e50 20 20 20 20 65 72 72 6f 72 20 3d 20 53 74 72 69      error = Stri
27e60 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ng.Format(..    
27e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27e80 20 20 20 20 20 20 20 20 22 63 6f 75 6c 64 20 6e          "could n
27e90 6f 74 20 6f 70 65 6e 20 72 65 67 69 73 74 72 79  ot open registry
27ea0 20 6b 65 79 3a 20 7b 30 7d 5c 5c 53 65 72 76 69   key: {0}\\Servi
27eb0 63 65 73 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  ces",..         
27ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27ed0 20 20 20 6b 65 79 29 3b 0d 0a 0d 0a 20 20 20 20     key);....    
27ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27ef0 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
27f00 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
27f10 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
27f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27f30 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e 44  RegistryHelper.D
27f40 65 6c 65 74 65 53 75 62 4b 65 79 54 72 65 65 28  eleteSubKeyTree(
27f50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
27f60 20 20 20 20 20 20 20 20 20 20 73 75 62 4b 65 79            subKey
27f70 2c 20 70 61 63 6b 61 67 65 2e 53 65 72 76 69 63  , package.Servic
27f80 65 49 64 2e 54 6f 53 74 72 69 6e 67 28 56 73 49  eId.ToString(VsI
27f90 64 46 6f 72 6d 61 74 29 2c 20 77 68 61 74 49 66  dFormat), whatIf
27fa0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
27fb0 20 20 20 20 20 20 20 20 20 20 20 76 65 72 62 6f             verbo
27fc0 73 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  se);..          
27fd0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
27fe0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
27ff0 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75        return tru
28000 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d  e;..        }...
28010 0a 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  .        ///////
28020 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28030 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28040 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28050 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28060 0d 0a 0d 0a 20 20 20 20 20 20 20 20 70 72 69 76  ....        priv
28070 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f 6c 20  ate static bool 
28080 50 72 6f 63 65 73 73 56 73 50 61 63 6b 61 67 65  ProcessVsPackage
28090 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 52  (..            R
280a0 65 67 69 73 74 72 79 4b 65 79 20 72 6f 6f 74 4b  egistryKey rootK
280b0 65 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ey,..           
280c0 20 56 65 72 73 69 6f 6e 20 76 73 56 65 72 73 69   Version vsVersi
280d0 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on,..           
280e0 20 50 61 63 6b 61 67 65 20 70 61 63 6b 61 67 65   Package package
280f0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6f  ,..            o
28100 62 6a 65 63 74 20 63 6c 69 65 6e 74 44 61 74 61  bject clientData
28110 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  ,..            b
28120 6f 6f 6c 20 77 68 61 74 49 66 2c 0d 0a 20 20 20  ool whatIf,..   
28130 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 76 65           bool ve
28140 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 20  rbose,..        
28150 20 20 20 20 72 65 66 20 73 74 72 69 6e 67 20 65      ref string e
28160 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20  rror..          
28170 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a    )..        {..
28180 20 20 20 20 20 20 20 20 20 20 20 20 41 6e 79 50              AnyP
28190 61 69 72 3c 73 74 72 69 6e 67 2c 20 62 6f 6f 6c  air<string, bool
281a0 3e 20 70 61 69 72 20 3d 20 63 6c 69 65 6e 74 44  > pair = clientD
281b0 61 74 61 20 61 73 20 41 6e 79 50 61 69 72 3c 73  ata as AnyPair<s
281c0 74 72 69 6e 67 2c 20 62 6f 6f 6c 3e 3b 0d 0a 0d  tring, bool>;...
281d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
281e0 28 70 61 69 72 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  (pair == null)..
281f0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
28200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
28210 72 72 6f 72 20 3d 20 22 69 6e 76 61 6c 69 64 20  rror = "invalid 
28220 56 53 20 63 61 6c 6c 62 61 63 6b 20 64 61 74 61  VS callback data
28230 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ";..            
28240 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
28250 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
28260 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
28270 69 66 20 28 70 61 69 72 2e 59 29 0d 0a 20 20 20  if (pair.Y)..   
28280 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
28290 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
282a0 72 6e 20 41 64 64 56 73 50 61 63 6b 61 67 65 28  rn AddVsPackage(
282b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
282c0 20 20 20 20 20 20 72 6f 6f 74 4b 65 79 2c 20 76        rootKey, v
282d0 73 56 65 72 73 69 6f 6e 2c 20 70 61 63 6b 61 67  sVersion, packag
282e0 65 2c 20 70 61 69 72 2e 58 2c 20 77 68 61 74 49  e, pair.X, whatI
282f0 66 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f,..            
28300 20 20 20 20 20 20 20 20 76 65 72 62 6f 73 65 2c          verbose,
28310 20 72 65 66 20 65 72 72 6f 72 29 3b 0d 0a 20 20   ref error);..  
28320 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
28330 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20           else.. 
28340 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
28350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
28360 74 75 72 6e 20 52 65 6d 6f 76 65 56 73 50 61 63  turn RemoveVsPac
28370 6b 61 67 65 28 0d 0a 20 20 20 20 20 20 20 20 20  kage(..         
28380 20 20 20 20 20 20 20 20 20 20 20 72 6f 6f 74 4b             rootK
28390 65 79 2c 20 76 73 56 65 72 73 69 6f 6e 2c 20 70  ey, vsVersion, p
283a0 61 63 6b 61 67 65 2c 20 77 68 61 74 49 66 2c 20  ackage, whatIf, 
283b0 76 65 72 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20  verbose,..      
283c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
283d0 66 20 65 72 72 6f 72 29 3b 0d 0a 20 20 20 20 20  f error);..     
283e0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
283f0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e    }..        #en
28400 64 72 65 67 69 6f 6e 0d 0a 20 20 20 20 20 20 20  dregion..       
28410 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
28420 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
28430 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28440 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28450 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28460 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
28470 0d 0a 20 20 20 20 20 20 20 20 23 72 65 67 69 6f  ..        #regio
28480 6e 20 41 70 70 6c 69 63 61 74 69 6f 6e 20 45 6e  n Application En
28490 74 72 79 20 50 6f 69 6e 74 0d 0a 20 20 20 20 20  try Point..     
284a0 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
284b0 63 20 69 6e 74 20 4d 61 69 6e 28 0d 0a 20 20 20  c int Main(..   
284c0 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 5b           string[
284d0 5d 20 61 72 67 73 0d 0a 20 20 20 20 20 20 20 20  ] args..        
284e0 20 20 20 20 29 0d 0a 20 20 20 20 20 20 20 20 7b      )..        {
284f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 43 6f  ..            Co
28500 6e 66 69 67 75 72 61 74 69 6f 6e 20 63 6f 6e 66  nfiguration conf
28510 69 67 75 72 61 74 69 6f 6e 20 3d 20 6e 75 6c 6c  iguration = null
28520 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  ;..            s
28530 74 72 69 6e 67 20 65 72 72 6f 72 20 3d 20 6e 75  tring error = nu
28540 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ll;....         
28550 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
28560 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28570 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28580 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28590 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
285a0 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 43 6f        #region Co
285b0 6d 6d 61 6e 64 20 4c 69 6e 65 20 50 72 6f 63 65  mmand Line Proce
285c0 73 73 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 20  ssing..         
285d0 20 20 20 69 66 20 28 21 43 6f 6e 66 69 67 75 72     if (!Configur
285e0 61 74 69 6f 6e 2e 46 72 6f 6d 41 72 67 73 28 0d  ation.FromArgs(.
285f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
28600 20 20 20 20 20 61 72 67 73 2c 20 74 72 75 65 2c       args, true,
28610 20 72 65 66 20 63 6f 6e 66 69 67 75 72 61 74 69   ref configurati
28620 6f 6e 2c 20 72 65 66 20 65 72 72 6f 72 29 20 7c  on, ref error) |
28630 7c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  |..             
28640 20 20 20 21 43 6f 6e 66 69 67 75 72 61 74 69 6f     !Configuratio
28650 6e 2e 50 72 6f 63 65 73 73 28 0d 0a 20 20 20 20  n.Process(..    
28660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28670 61 72 67 73 2c 20 63 6f 6e 66 69 67 75 72 61 74  args, configurat
28680 69 6f 6e 2c 20 74 72 75 65 2c 20 72 65 66 20 65  ion, true, ref e
28690 72 72 6f 72 29 20 7c 7c 0d 0a 20 20 20 20 20 20  rror) ||..      
286a0 20 20 20 20 20 20 20 20 20 20 21 43 6f 6e 66 69            !Confi
286b0 67 75 72 61 74 69 6f 6e 2e 43 68 65 63 6b 52 75  guration.CheckRu
286c0 6e 74 69 6d 65 56 65 72 73 69 6f 6e 28 0d 0a 20  ntimeVersion(.. 
286d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
286e0 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e     configuration
286f0 2c 20 74 72 75 65 2c 20 72 65 66 20 65 72 72 6f  , true, ref erro
28700 72 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  r))..           
28710 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
28720 20 20 20 20 54 72 61 63 65 4f 70 73 2e 53 68 6f      TraceOps.Sho
28730 77 4d 65 73 73 61 67 65 28 0d 0a 20 20 20 20 20  wMessage(..     
28740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54                 T
28750 72 61 63 65 50 72 69 6f 72 69 74 79 2e 48 69 67  racePriority.Hig
28760 68 65 73 74 2c 20 74 72 61 63 65 43 61 6c 6c 62  hest, traceCallb
28770 61 63 6b 2c 20 74 68 69 73 41 73 73 65 6d 62 6c  ack, thisAssembl
28780 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y,..            
28790 20 20 20 20 20 20 20 20 65 72 72 6f 72 2c 20 74          error, t
287a0 72 61 63 65 43 61 74 65 67 6f 72 79 2c 20 4d 65  raceCategory, Me
287b0 73 73 61 67 65 42 6f 78 42 75 74 74 6f 6e 73 2e  ssageBoxButtons.
287c0 4f 4b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  OK,..           
287d0 20 20 20 20 20 20 20 20 20 4d 65 73 73 61 67 65           Message
287e0 42 6f 78 49 63 6f 6e 2e 45 72 72 6f 72 29 3b 0d  BoxIcon.Error);.
287f0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
28800 20 20 20 72 65 74 75 72 6e 20 31 3b 20 2f 2a 20     return 1; /* 
28810 46 41 49 4c 55 52 45 20 2a 2f 0d 0a 20 20 20 20  FAILURE */..    
28820 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
28830 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
28840 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n....           
28850 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
288a0 20 20 20 20 23 72 65 67 69 6f 6e 20 2e 4e 45 54      #region .NET
288b0 20 46 72 61 6d 65 77 6f 72 6b 20 2f 20 56 69 73   Framework / Vis
288c0 75 61 6c 20 53 74 75 64 69 6f 20 44 61 74 61 0d  ual Studio Data.
288d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 50 61 63  .            Pac
288e0 6b 61 67 65 20 70 61 63 6b 61 67 65 20 3d 20 6e  kage package = n
288f0 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ull;..          
28900 20 20 46 72 61 6d 65 77 6f 72 6b 4c 69 73 74 20    FrameworkList 
28910 66 72 61 6d 65 77 6f 72 6b 4c 69 73 74 20 3d 20  frameworkList = 
28920 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20  null;..         
28930 20 20 20 56 73 4c 69 73 74 20 76 73 4c 69 73 74     VsList vsList
28940 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20   = null;....    
28950 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f          ////////
28960 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28970 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 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 0d 0a 0d 0a 20  ///////////.... 
289a0 20 20 20 20 20 20 20 20 20 20 20 49 6e 69 74 69             Initi
289b0 61 6c 69 7a 65 56 73 50 61 63 6b 61 67 65 28 72  alizeVsPackage(r
289c0 65 66 20 70 61 63 6b 61 67 65 29 3b 0d 0a 20 20  ef package);..  
289d0 20 20 20 20 20 20 20 20 20 20 49 6e 69 74 69 61            Initia
289e0 6c 69 7a 65 46 72 61 6d 65 77 6f 72 6b 4c 69 73  lizeFrameworkLis
289f0 74 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2c  t(configuration,
28a00 20 72 65 66 20 66 72 61 6d 65 77 6f 72 6b 4c 69   ref frameworkLi
28a10 73 74 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  st);..          
28a20 20 20 49 6e 69 74 69 61 6c 69 7a 65 56 73 4c 69    InitializeVsLi
28a30 73 74 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  st(configuration
28a40 2c 20 72 65 66 20 76 73 4c 69 73 74 29 3b 0d 0a  , ref vsList);..
28a50 20 20 20 20 20 20 20 20 20 20 20 20 23 65 6e 64              #end
28a60 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  region....      
28a70 20 20 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28aa0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28ab0 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
28ac0 20 20 20 20 20 20 20 20 20 41 73 73 65 6d 62 6c           Assembl
28ad0 79 4e 61 6d 65 20 61 73 73 65 6d 62 6c 79 4e 61  yName assemblyNa
28ae0 6d 65 20 3d 20 41 73 73 65 6d 62 6c 79 4e 61 6d  me = AssemblyNam
28af0 65 2e 47 65 74 41 73 73 65 6d 62 6c 79 4e 61 6d  e.GetAssemblyNam
28b00 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e(..            
28b10 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f      configuratio
28b20 6e 2e 43 6f 72 65 46 69 6c 65 4e 61 6d 65 29 3b  n.CoreFileName);
28b30 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 0d 0a   /* throw */....
28b40 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
28b50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28b60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28b70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28b80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
28b90 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 41  ...            A
28ba0 6e 79 50 61 69 72 3c 73 74 72 69 6e 67 2c 20 62  nyPair<string, b
28bb0 6f 6f 6c 3e 20 64 69 72 65 63 74 6f 72 79 50 61  ool> directoryPa
28bc0 69 72 20 3d 20 6e 65 77 20 41 6e 79 50 61 69 72  ir = new AnyPair
28bd0 3c 73 74 72 69 6e 67 2c 20 62 6f 6f 6c 3e 28 0d  <string, bool>(.
28be0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
28bf0 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 44   configuration.D
28c00 69 72 65 63 74 6f 72 79 2c 20 63 6f 6e 66 69 67  irectory, config
28c10 75 72 61 74 69 6f 6e 2e 49 6e 73 74 61 6c 6c 29  uration.Install)
28c20 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
28c30 20 41 6e 79 50 61 69 72 3c 73 74 72 69 6e 67 2c   AnyPair<string,
28c40 20 62 6f 6f 6c 3e 20 66 69 6c 65 4e 61 6d 65 50   bool> fileNameP
28c50 61 69 72 20 3d 20 6e 65 77 20 41 6e 79 50 61 69  air = new AnyPai
28c60 72 3c 73 74 72 69 6e 67 2c 20 62 6f 6f 6c 3e 28  r<string, bool>(
28c70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
28c80 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e    configuration.
28c90 44 65 73 69 67 6e 65 72 46 69 6c 65 4e 61 6d 65  DesignerFileName
28ca0 2c 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e  , configuration.
28cb0 49 6e 73 74 61 6c 6c 29 3b 0d 0a 0d 0a 20 20 20  Install);....   
28cc0 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
28cd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28ce0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28cf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
28d00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
28d10 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67              #reg
28d20 69 6f 6e 20 2e 4e 45 54 20 47 41 43 20 49 6e 73  ion .NET GAC Ins
28d30 74 61 6c 6c 2f 52 65 6d 6f 76 65 0d 0a 20 20 20  tall/Remove..   
28d40 20 20 20 20 20 20 20 20 20 69 66 20 28 63 6f 6e           if (con
28d50 66 69 67 75 72 61 74 69 6f 6e 2e 48 61 73 46 6c  figuration.HasFl
28d60 61 67 73 28 49 6e 73 74 61 6c 6c 46 6c 61 67 73  ags(InstallFlags
28d70 2e 47 41 43 2c 20 74 72 75 65 29 29 0d 0a 20 20  .GAC, true))..  
28d80 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
28d90 20 20 20 20 20 20 20 20 20 20 20 20 20 50 75 62               Pub
28da0 6c 69 73 68 20 70 75 62 6c 69 73 68 20 3d 20 6e  lish publish = n
28db0 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ull;....        
28dc0 20 20 20 20 20 20 20 20 69 66 20 28 21 63 6f 6e          if (!con
28dd0 66 69 67 75 72 61 74 69 6f 6e 2e 57 68 61 74 49  figuration.WhatI
28de0 66 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  f)..            
28df0 20 20 20 20 20 20 20 20 70 75 62 6c 69 73 68 20          publish 
28e00 3d 20 6e 65 77 20 50 75 62 6c 69 73 68 28 29 3b  = new Publish();
28e10 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
28e20 20 20 20 20 69 66 20 28 63 6f 6e 66 69 67 75 72      if (configur
28e30 61 74 69 6f 6e 2e 49 6e 73 74 61 6c 6c 29 0d 0a  ation.Install)..
28e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28e50 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
28e60 20 20 20 20 20 20 20 69 66 20 28 21 63 6f 6e 66         if (!conf
28e70 69 67 75 72 61 74 69 6f 6e 2e 57 68 61 74 49 66  iguration.WhatIf
28e80 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
28e90 20 20 20 20 20 20 20 20 20 20 20 70 75 62 6c 69             publi
28ea0 73 68 2e 47 61 63 49 6e 73 74 61 6c 6c 28 63 6f  sh.GacInstall(co
28eb0 6e 66 69 67 75 72 61 74 69 6f 6e 2e 43 6f 72 65  nfiguration.Core
28ec0 46 69 6c 65 4e 61 6d 65 29 3b 20 2f 2a 20 74 68  FileName); /* th
28ed0 72 6f 77 20 2a 2f 0d 0a 0d 0a 20 20 20 20 20 20  row */....      
28ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
28ef0 61 63 65 4f 70 73 2e 54 72 61 63 65 28 0d 0a 20  aceOps.Trace(.. 
28f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28f10 20 20 20 20 20 20 20 54 72 61 63 65 50 72 69 6f         TracePrio
28f20 72 69 74 79 2e 48 69 67 68 65 73 74 2c 20 74 72  rity.Highest, tr
28f30 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53 74 72  aceCallback, Str
28f40 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ing.Format(..   
28f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28f60 20 20 20 20 20 22 47 61 63 49 6e 73 74 61 6c 6c       "GacInstall
28f70 3a 20 61 73 73 65 6d 62 6c 79 50 61 74 68 20 3d  : assemblyPath =
28f80 20 7b 30 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20   {0}",..        
28f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28fa0 46 6f 72 44 69 73 70 6c 61 79 28 63 6f 6e 66 69  ForDisplay(confi
28fb0 67 75 72 61 74 69 6f 6e 2e 43 6f 72 65 46 69 6c  guration.CoreFil
28fc0 65 4e 61 6d 65 29 29 2c 20 74 72 61 63 65 43 61  eName)), traceCa
28fd0 74 65 67 6f 72 79 29 3b 0d 0a 0d 0a 20 20 20 20  tegory);....    
28fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28ff0 69 66 20 28 21 63 6f 6e 66 69 67 75 72 61 74 69  if (!configurati
29000 6f 6e 2e 57 68 61 74 49 66 29 0d 0a 20 20 20 20  on.WhatIf)..    
29010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29020 20 20 20 20 70 75 62 6c 69 73 68 2e 47 61 63 49      publish.GacI
29030 6e 73 74 61 6c 6c 28 63 6f 6e 66 69 67 75 72 61  nstall(configura
29040 74 69 6f 6e 2e 4c 69 6e 71 46 69 6c 65 4e 61 6d  tion.LinqFileNam
29050 65 29 3b 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d  e); /* throw */.
29060 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
29070 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73 2e         TraceOps.
29080 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20  Trace(..        
29090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
290a0 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 48 69  TracePriority.Hi
290b0 67 68 65 73 74 2c 20 74 72 61 63 65 43 61 6c 6c  ghest, traceCall
290c0 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72  back, String.For
290d0 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
290e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 47                "G
290f0 61 63 49 6e 73 74 61 6c 6c 3a 20 61 73 73 65 6d  acInstall: assem
29100 62 6c 79 50 61 74 68 20 3d 20 7b 30 7d 22 2c 0d  blyPath = {0}",.
29110 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
29120 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70           ForDisp
29130 6c 61 79 28 63 6f 6e 66 69 67 75 72 61 74 69 6f  lay(configuratio
29140 6e 2e 4c 69 6e 71 46 69 6c 65 4e 61 6d 65 29 29  n.LinqFileName))
29150 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72 79 29  , traceCategory)
29160 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
29170 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
29180 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20        else..    
29190 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
291a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
291b0 20 20 20 69 66 20 28 21 63 6f 6e 66 69 67 75 72     if (!configur
291c0 61 74 69 6f 6e 2e 57 68 61 74 49 66 29 0d 0a 20  ation.WhatIf).. 
291d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
291e0 20 20 20 20 20 20 20 70 75 62 6c 69 73 68 2e 47         publish.G
291f0 61 63 52 65 6d 6f 76 65 28 63 6f 6e 66 69 67 75  acRemove(configu
29200 72 61 74 69 6f 6e 2e 4c 69 6e 71 46 69 6c 65 4e  ration.LinqFileN
29210 61 6d 65 29 3b 20 2f 2a 20 74 68 72 6f 77 20 2a  ame); /* throw *
29220 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
29230 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70           TraceOp
29240 73 2e 54 72 61 63 65 28 0d 0a 20 20 20 20 20 20  s.Trace(..      
29250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29260 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e    TracePriority.
29270 48 69 67 68 65 73 74 2c 20 74 72 61 63 65 43 61  Highest, traceCa
29280 6c 6c 62 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46  llback, String.F
29290 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
292a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
292b0 22 47 61 63 52 65 6d 6f 76 65 3a 20 61 73 73 65  "GacRemove: asse
292c0 6d 62 6c 79 50 61 74 68 20 3d 20 7b 30 7d 22 2c  mblyPath = {0}",
292d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
292e0 20 20 20 20 20 20 20 20 20 20 46 6f 72 44 69 73            ForDis
292f0 70 6c 61 79 28 63 6f 6e 66 69 67 75 72 61 74 69  play(configurati
29300 6f 6e 2e 4c 69 6e 71 46 69 6c 65 4e 61 6d 65 29  on.LinqFileName)
29310 29 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72 79  ), traceCategory
29320 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
29330 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21 63            if (!c
29340 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 57 68 61  onfiguration.Wha
29350 74 49 66 29 0d 0a 20 20 20 20 20 20 20 20 20 20  tIf)..          
29360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 75                pu
29370 62 6c 69 73 68 2e 47 61 63 52 65 6d 6f 76 65 28  blish.GacRemove(
29380 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 43 6f  configuration.Co
29390 72 65 46 69 6c 65 4e 61 6d 65 29 3b 20 2f 2a 20  reFileName); /* 
293a0 74 68 72 6f 77 20 2a 2f 0d 0a 0d 0a 20 20 20 20  throw */....    
293b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
293c0 54 72 61 63 65 4f 70 73 2e 54 72 61 63 65 28 0d  TraceOps.Trace(.
293d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
293e0 20 20 20 20 20 20 20 20 20 54 72 61 63 65 50 72           TracePr
293f0 69 6f 72 69 74 79 2e 48 69 67 68 65 73 74 2c 20  iority.Highest, 
29400 74 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 53  traceCallback, S
29410 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 0d 0a 20  tring.Format(.. 
29420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29430 20 20 20 20 20 20 20 22 47 61 63 52 65 6d 6f 76         "GacRemov
29440 65 3a 20 61 73 73 65 6d 62 6c 79 50 61 74 68 20  e: assemblyPath 
29450 3d 20 7b 30 7d 22 2c 0d 0a 20 20 20 20 20 20 20  = {0}",..       
29460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29470 20 46 6f 72 44 69 73 70 6c 61 79 28 63 6f 6e 66   ForDisplay(conf
29480 69 67 75 72 61 74 69 6f 6e 2e 43 6f 72 65 46 69  iguration.CoreFi
29490 6c 65 4e 61 6d 65 29 29 2c 20 74 72 61 63 65 43  leName)), traceC
294a0 61 74 65 67 6f 72 79 29 3b 0d 0a 20 20 20 20 20  ategory);..     
294b0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
294c0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
294d0 20 20 20 20 20 20 20 20 20 23 65 6e 64 72 65 67           #endreg
294e0 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ion....         
294f0 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
29500 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29510 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29520 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29530 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
29540 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20 2e 4e        #region .N
29550 45 54 20 41 73 73 65 6d 62 6c 79 46 6f 6c 64 65  ET AssemblyFolde
29560 72 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  rs..            
29570 69 66 20 28 63 6f 6e 66 69 67 75 72 61 74 69 6f  if (configuratio
29580 6e 2e 48 61 73 46 6c 61 67 73 28 49 6e 73 74 61  n.HasFlags(Insta
29590 6c 6c 46 6c 61 67 73 2e 41 73 73 65 6d 62 6c 79  llFlags.Assembly
295a0 46 6f 6c 64 65 72 73 2c 20 74 72 75 65 29 29 0d  Folders, true)).
295b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
295c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
295d0 69 66 20 28 21 46 6f 72 45 61 63 68 46 72 61 6d  if (!ForEachFram
295e0 65 77 6f 72 6b 52 65 67 69 73 74 72 79 28 0d 0a  eworkRegistry(..
295f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29600 20 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72          framewor
29610 6b 4c 69 73 74 2c 20 50 72 6f 63 65 73 73 41 73  kList, ProcessAs
29620 73 65 6d 62 6c 79 46 6f 6c 64 65 72 73 2c 0d 0a  semblyFolders,..
29630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29640 20 20 20 20 20 20 20 20 64 69 72 65 63 74 6f 72          director
29650 79 50 61 69 72 2c 20 63 6f 6e 66 69 67 75 72 61  yPair, configura
29660 74 69 6f 6e 2e 57 68 61 74 49 66 2c 0d 0a 20 20  tion.WhatIf,..  
29670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29680 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74        configurat
29690 69 6f 6e 2e 56 65 72 62 6f 73 65 2c 20 72 65 66  ion.Verbose, ref
296a0 20 65 72 72 6f 72 29 29 0d 0a 20 20 20 20 20 20   error))..      
296b0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
296c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
296d0 20 54 72 61 63 65 4f 70 73 2e 53 68 6f 77 4d 65   TraceOps.ShowMe
296e0 73 73 61 67 65 28 0d 0a 20 20 20 20 20 20 20 20  ssage(..        
296f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29700 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 48 69  TracePriority.Hi
29710 67 68 65 73 74 2c 20 74 72 61 63 65 43 61 6c 6c  ghest, traceCall
29720 62 61 63 6b 2c 20 6e 75 6c 6c 2c 0d 0a 20 20 20  back, null,..   
29730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29740 20 20 20 20 20 65 72 72 6f 72 2c 20 74 72 61 63       error, trac
29750 65 43 61 74 65 67 6f 72 79 2c 20 4d 65 73 73 61  eCategory, Messa
29760 67 65 42 6f 78 42 75 74 74 6f 6e 73 2e 4f 4b 2c  geBoxButtons.OK,
29770 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
29780 20 20 20 20 20 20 20 20 20 20 4d 65 73 73 61 67            Messag
29790 65 42 6f 78 49 63 6f 6e 2e 45 72 72 6f 72 29 3b  eBoxIcon.Error);
297a0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
297b0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 31          return 1
297c0 3b 20 2f 2a 20 46 41 49 4c 55 52 45 20 2a 2f 0d  ; /* FAILURE */.
297d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
297e0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
297f0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  }..            #
29800 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20  endregion....   
29810 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f           ///////
29820 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29830 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29840 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29850 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
29860 20 20 20 20 20 20 20 20 20 20 20 20 23 72 65 67              #reg
29870 69 6f 6e 20 2e 4e 45 54 20 44 62 50 72 6f 76 69  ion .NET DbProvi
29880 64 65 72 46 61 63 74 6f 72 79 0d 0a 20 20 20 20  derFactory..    
29890 20 20 20 20 20 20 20 20 69 66 20 28 63 6f 6e 66          if (conf
298a0 69 67 75 72 61 74 69 6f 6e 2e 48 61 73 46 6c 61  iguration.HasFla
298b0 67 73 28 49 6e 73 74 61 6c 6c 46 6c 61 67 73 2e  gs(InstallFlags.
298c0 44 62 50 72 6f 76 69 64 65 72 46 61 63 74 6f 72  DbProviderFactor
298d0 79 2c 20 74 72 75 65 29 29 0d 0a 20 20 20 20 20  y, true))..     
298e0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
298f0 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 73            bool s
29900 61 76 65 64 20 3d 20 66 61 6c 73 65 3b 0d 0a 0d  aved = false;...
29910 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
29920 20 69 66 20 28 21 46 6f 72 45 61 63 68 46 72 61   if (!ForEachFra
29930 6d 65 77 6f 72 6b 43 6f 6e 66 69 67 28 0d 0a 20  meworkConfig(.. 
29940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29950 20 20 20 20 20 20 20 66 72 61 6d 65 77 6f 72 6b         framework
29960 4c 69 73 74 2c 20 50 72 6f 63 65 73 73 44 62 50  List, ProcessDbP
29970 72 6f 76 69 64 65 72 46 61 63 74 6f 72 79 2c 0d  roviderFactory,.
29980 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
29990 20 20 20 20 20 20 20 20 20 49 6e 76 61 72 69 61           Invaria
299a0 6e 74 4e 61 6d 65 2c 20 50 72 6f 76 69 64 65 72  ntName, Provider
299b0 4e 61 6d 65 2c 20 44 65 73 63 72 69 70 74 69 6f  Name, Descriptio
299c0 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n,..            
299d0 20 20 20 20 20 20 20 20 20 20 20 20 46 61 63 74              Fact
299e0 6f 72 79 54 79 70 65 4e 61 6d 65 2c 20 61 73 73  oryTypeName, ass
299f0 65 6d 62 6c 79 4e 61 6d 65 2c 20 64 69 72 65 63  emblyName, direc
29a00 74 6f 72 79 50 61 69 72 2c 0d 0a 20 20 20 20 20  toryPair,..     
29a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29a20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e     configuration
29a30 2e 57 68 61 74 49 66 2c 20 63 6f 6e 66 69 67 75  .WhatIf, configu
29a40 72 61 74 69 6f 6e 2e 56 65 72 62 6f 73 65 2c 0d  ration.Verbose,.
29a50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
29a60 20 20 20 20 20 20 20 20 20 72 65 66 20 73 61 76           ref sav
29a70 65 64 2c 20 72 65 66 20 65 72 72 6f 72 29 29 0d  ed, ref error)).
29a80 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
29a90 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
29aa0 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70 73          TraceOps
29ab0 2e 53 68 6f 77 4d 65 73 73 61 67 65 28 0d 0a 20  .ShowMessage(.. 
29ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29ad0 20 20 20 20 20 20 20 54 72 61 63 65 50 72 69 6f         TracePrio
29ae0 72 69 74 79 2e 48 69 67 68 65 73 74 2c 20 74 72  rity.Highest, tr
29af0 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 6e 75 6c  aceCallback, nul
29b00 6c 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l,..            
29b10 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
29b20 72 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72 79  r, traceCategory
29b30 2c 20 4d 65 73 73 61 67 65 42 6f 78 42 75 74 74  , MessageBoxButt
29b40 6f 6e 73 2e 4f 4b 2c 0d 0a 20 20 20 20 20 20 20  ons.OK,..       
29b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29b60 20 4d 65 73 73 61 67 65 42 6f 78 49 63 6f 6e 2e   MessageBoxIcon.
29b70 45 72 72 6f 72 29 3b 0d 0a 0d 0a 20 20 20 20 20  Error);....     
29b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
29b90 65 74 75 72 6e 20 31 3b 20 2f 2a 20 46 41 49 4c  eturn 1; /* FAIL
29ba0 55 52 45 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20  URE */..        
29bb0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
29bc0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
29bd0 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
29be0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
29bf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29c00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29c10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29c20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29c30 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ///....         
29c40 20 20 20 23 72 65 67 69 6f 6e 20 56 53 20 50 61     #region VS Pa
29c50 63 6b 61 67 65 0d 0a 20 20 20 20 20 20 20 20 20  ckage..         
29c60 20 20 20 69 66 20 28 63 6f 6e 66 69 67 75 72 61     if (configura
29c70 74 69 6f 6e 2e 48 61 73 46 6c 61 67 73 28 49 6e  tion.HasFlags(In
29c80 73 74 61 6c 6c 46 6c 61 67 73 2e 56 73 50 61 63  stallFlags.VsPac
29c90 6b 61 67 65 2c 20 74 72 75 65 29 29 0d 0a 20 20  kage, true))..  
29ca0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
29cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
29cc0 28 21 46 6f 72 45 61 63 68 56 73 56 65 72 73 69  (!ForEachVsVersi
29cd0 6f 6e 52 65 67 69 73 74 72 79 28 0d 0a 20 20 20  onRegistry(..   
29ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29cf0 20 20 20 20 20 76 73 4c 69 73 74 2c 20 50 72 6f       vsList, Pro
29d00 63 65 73 73 56 73 50 61 63 6b 61 67 65 2c 20 70  cessVsPackage, p
29d10 61 63 6b 61 67 65 2c 20 66 69 6c 65 4e 61 6d 65  ackage, fileName
29d20 50 61 69 72 2c 0d 0a 20 20 20 20 20 20 20 20 20  Pair,..         
29d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
29d40 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 57 68 61  onfiguration.Wha
29d50 74 49 66 2c 20 63 6f 6e 66 69 67 75 72 61 74 69  tIf, configurati
29d60 6f 6e 2e 56 65 72 62 6f 73 65 2c 0d 0a 20 20 20  on.Verbose,..   
29d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29d80 20 20 20 20 20 72 65 66 20 65 72 72 6f 72 29 29       ref error))
29d90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
29da0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
29db0 20 20 20 20 20 20 20 20 20 54 72 61 63 65 4f 70           TraceOp
29dc0 73 2e 53 68 6f 77 4d 65 73 73 61 67 65 28 0d 0a  s.ShowMessage(..
29dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29de0 20 20 20 20 20 20 20 20 54 72 61 63 65 50 72 69          TracePri
29df0 6f 72 69 74 79 2e 48 69 67 68 65 73 74 2c 20 74  ority.Highest, t
29e00 72 61 63 65 43 61 6c 6c 62 61 63 6b 2c 20 6e 75  raceCallback, nu
29e10 6c 6c 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll,..           
29e20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72               err
29e30 6f 72 2c 20 74 72 61 63 65 43 61 74 65 67 6f 72  or, traceCategor
29e40 79 2c 20 4d 65 73 73 61 67 65 42 6f 78 42 75 74  y, MessageBoxBut
29e50 74 6f 6e 73 2e 4f 4b 2c 0d 0a 20 20 20 20 20 20  tons.OK,..      
29e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29e70 20 20 4d 65 73 73 61 67 65 42 6f 78 49 63 6f 6e    MessageBoxIcon
29e80 2e 45 72 72 6f 72 29 3b 0d 0a 0d 0a 20 20 20 20  .Error);....    
29e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29ea0 72 65 74 75 72 6e 20 31 3b 20 2f 2a 20 46 41 49  return 1; /* FAI
29eb0 4c 55 52 45 20 2a 2f 0d 0a 20 20 20 20 20 20 20  LURE */..       
29ec0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
29ed0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
29ee0 20 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f         #endregio
29ef0 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n....           
29f00 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
29f10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29f20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29f30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
29f40 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ////....        
29f50 20 20 20 20 23 72 65 67 69 6f 6e 20 56 53 20 44      #region VS D
29f60 61 74 61 53 6f 75 72 63 65 0d 0a 20 20 20 20 20  ataSource..     
29f70 20 20 20 20 20 20 20 69 66 20 28 63 6f 6e 66 69         if (confi
29f80 67 75 72 61 74 69 6f 6e 2e 48 61 73 46 6c 61 67  guration.HasFlag
29f90 73 28 49 6e 73 74 61 6c 6c 46 6c 61 67 73 2e 56  s(InstallFlags.V
29fa0 73 44 61 74 61 53 6f 75 72 63 65 2c 20 74 72 75  sDataSource, tru
29fb0 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e))..           
29fc0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
29fd0 20 20 20 20 69 66 20 28 21 46 6f 72 45 61 63 68      if (!ForEach
29fe0 56 73 56 65 72 73 69 6f 6e 52 65 67 69 73 74 72  VsVersionRegistr
29ff0 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y(..            
2a000 20 20 20 20 20 20 20 20 20 20 20 20 76 73 4c 69              vsLi
2a010 73 74 2c 20 50 72 6f 63 65 73 73 56 73 44 61 74  st, ProcessVsDat
2a020 61 53 6f 75 72 63 65 2c 20 70 61 63 6b 61 67 65  aSource, package
2a030 2c 20 66 69 6c 65 4e 61 6d 65 50 61 69 72 2c 0d  , fileNamePair,.
2a040 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2a050 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75           configu
2a060 72 61 74 69 6f 6e 2e 57 68 61 74 49 66 2c 20 63  ration.WhatIf, c
2a070 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 56 65 72  onfiguration.Ver
2a080 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  bose,..         
2a090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
2a0a0 65 66 20 65 72 72 6f 72 29 29 0d 0a 20 20 20 20  ef error))..    
2a0b0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
2a0c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a0d0 20 20 20 54 72 61 63 65 4f 70 73 2e 53 68 6f 77     TraceOps.Show
2a0e0 4d 65 73 73 61 67 65 28 0d 0a 20 20 20 20 20 20  Message(..      
2a0f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a100 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e    TracePriority.
2a110 48 69 67 68 65 73 74 2c 20 74 72 61 63 65 43 61  Highest, traceCa
2a120 6c 6c 62 61 63 6b 2c 20 6e 75 6c 6c 2c 0d 0a 20  llback, null,.. 
2a130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a140 20 20 20 20 20 20 20 65 72 72 6f 72 2c 20 74 72         error, tr
2a150 61 63 65 43 61 74 65 67 6f 72 79 2c 20 4d 65 73  aceCategory, Mes
2a160 73 61 67 65 42 6f 78 42 75 74 74 6f 6e 73 2e 4f  sageBoxButtons.O
2a170 4b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  K,..            
2a180 20 20 20 20 20 20 20 20 20 20 20 20 4d 65 73 73              Mess
2a190 61 67 65 42 6f 78 49 63 6f 6e 2e 45 72 72 6f 72  ageBoxIcon.Error
2a1a0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
2a1b0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
2a1c0 20 31 3b 20 2f 2a 20 46 41 49 4c 55 52 45 20 2a   1; /* FAILURE *
2a1d0 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
2a1e0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
2a1f0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
2a200 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
2a210 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
2a220 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a230 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a240 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a250 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
2a260 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 72  ..            #r
2a270 65 67 69 6f 6e 20 56 53 20 44 61 74 61 50 72 6f  egion VS DataPro
2a280 76 69 64 65 72 0d 0a 20 20 20 20 20 20 20 20 20  vider..         
2a290 20 20 20 69 66 20 28 63 6f 6e 66 69 67 75 72 61     if (configura
2a2a0 74 69 6f 6e 2e 48 61 73 46 6c 61 67 73 28 49 6e  tion.HasFlags(In
2a2b0 73 74 61 6c 6c 46 6c 61 67 73 2e 56 73 44 61 74  stallFlags.VsDat
2a2c0 61 50 72 6f 76 69 64 65 72 2c 20 74 72 75 65 29  aProvider, true)
2a2d0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
2a2e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2a2f0 20 20 69 66 20 28 21 46 6f 72 45 61 63 68 56 73    if (!ForEachVs
2a300 56 65 72 73 69 6f 6e 52 65 67 69 73 74 72 79 28  VersionRegistry(
2a310 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2a320 20 20 20 20 20 20 20 20 20 20 76 73 4c 69 73 74            vsList
2a330 2c 20 50 72 6f 63 65 73 73 56 73 44 61 74 61 50  , ProcessVsDataP
2a340 72 6f 76 69 64 65 72 2c 20 70 61 63 6b 61 67 65  rovider, package
2a350 2c 20 66 69 6c 65 4e 61 6d 65 50 61 69 72 2c 0d  , fileNamePair,.
2a360 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2a370 20 20 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75           configu
2a380 72 61 74 69 6f 6e 2e 57 68 61 74 49 66 2c 20 63  ration.WhatIf, c
2a390 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 56 65 72  onfiguration.Ver
2a3a0 62 6f 73 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  bose,..         
2a3b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
2a3c0 65 66 20 65 72 72 6f 72 29 29 0d 0a 20 20 20 20  ef error))..    
2a3d0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
2a3e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a3f0 20 20 20 54 72 61 63 65 4f 70 73 2e 53 68 6f 77     TraceOps.Show
2a400 4d 65 73 73 61 67 65 28 0d 0a 20 20 20 20 20 20  Message(..      
2a410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a420 20 20 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e    TracePriority.
2a430 48 69 67 68 65 73 74 2c 20 74 72 61 63 65 43 61  Highest, traceCa
2a440 6c 6c 62 61 63 6b 2c 20 6e 75 6c 6c 2c 0d 0a 20  llback, null,.. 
2a450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a460 20 20 20 20 20 20 20 65 72 72 6f 72 2c 20 74 72         error, tr
2a470 61 63 65 43 61 74 65 67 6f 72 79 2c 20 4d 65 73  aceCategory, Mes
2a480 73 61 67 65 42 6f 78 42 75 74 74 6f 6e 73 2e 4f  sageBoxButtons.O
2a490 4b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  K,..            
2a4a0 20 20 20 20 20 20 20 20 20 20 20 20 4d 65 73 73              Mess
2a4b0 61 67 65 42 6f 78 49 63 6f 6e 2e 45 72 72 6f 72  ageBoxIcon.Error
2a4c0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
2a4d0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
2a4e0 20 31 3b 20 2f 2a 20 46 41 49 4c 55 52 45 20 2a   1; /* FAILURE *
2a4f0 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
2a500 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
2a510 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
2a520 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20   #endregion.... 
2a530 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
2a540 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a550 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a560 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a570 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
2a580 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 72  ..            #r
2a590 65 67 69 6f 6e 20 4c 6f 67 20 53 75 6d 6d 61 72  egion Log Summar
2a5a0 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 54  y..            T
2a5b0 72 61 63 65 4f 70 73 2e 54 72 61 63 65 28 0d 0a  raceOps.Trace(..
2a5c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a5d0 54 72 61 63 65 50 72 69 6f 72 69 74 79 2e 48 69  TracePriority.Hi
2a5e0 67 68 65 72 2c 20 74 72 61 63 65 43 61 6c 6c 62  gher, traceCallb
2a5f0 61 63 6b 2c 20 53 74 72 69 6e 67 2e 46 6f 72 6d  ack, String.Form
2a600 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
2a610 20 20 20 20 20 22 73 75 62 4b 65 79 73 43 72 65       "subKeysCre
2a620 61 74 65 64 20 3d 20 7b 30 7d 2c 20 73 75 62 4b  ated = {0}, subK
2a630 65 79 73 44 65 6c 65 74 65 64 20 3d 20 7b 31 7d  eysDeleted = {1}
2a640 2c 20 22 20 2b 0d 0a 20 20 20 20 20 20 20 20 20  , " +..         
2a650 20 20 20 20 20 20 20 22 6b 65 79 56 61 6c 75 65         "keyValue
2a660 73 53 65 74 20 3d 20 7b 32 7d 2c 20 6b 65 79 56  sSet = {2}, keyV
2a670 61 6c 75 65 73 44 65 6c 65 74 65 64 20 3d 20 7b  aluesDeleted = {
2a680 33 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  3}",..          
2a690 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c 61 79        ForDisplay
2a6a0 28 52 65 67 69 73 74 72 79 48 65 6c 70 65 72 2e  (RegistryHelper.
2a6b0 53 75 62 4b 65 79 73 43 72 65 61 74 65 64 29 2c  SubKeysCreated),
2a6c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2a6d0 20 20 46 6f 72 44 69 73 70 6c 61 79 28 52 65 67    ForDisplay(Reg
2a6e0 69 73 74 72 79 48 65 6c 70 65 72 2e 53 75 62 4b  istryHelper.SubK
2a6f0 65 79 73 44 65 6c 65 74 65 64 29 2c 0d 0a 20 20  eysDeleted),..  
2a700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f                Fo
2a710 72 44 69 73 70 6c 61 79 28 52 65 67 69 73 74 72  rDisplay(Registr
2a720 79 48 65 6c 70 65 72 2e 4b 65 79 56 61 6c 75 65  yHelper.KeyValue
2a730 73 53 65 74 29 2c 0d 0a 20 20 20 20 20 20 20 20  sSet),..        
2a740 20 20 20 20 20 20 20 20 46 6f 72 44 69 73 70 6c          ForDispl
2a750 61 79 28 52 65 67 69 73 74 72 79 48 65 6c 70 65  ay(RegistryHelpe
2a760 72 2e 4b 65 79 56 61 6c 75 65 73 44 65 6c 65 74  r.KeyValuesDelet
2a770 65 64 29 29 2c 0d 0a 20 20 20 20 20 20 20 20 20  ed)),..         
2a780 20 20 20 20 20 20 20 74 72 61 63 65 43 61 74 65         traceCate
2a790 67 6f 72 79 29 3b 0d 0a 20 20 20 20 20 20 20 20  gory);..        
2a7a0 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
2a7b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
2a7c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a7d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a7e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a7f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a800 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  /....           
2a810 20 72 65 74 75 72 6e 20 30 3b 20 2f 2a 20 53 55   return 0; /* SU
2a820 43 43 45 53 53 20 2a 2f 0d 0a 20 20 20 20 20 20  CCESS */..      
2a830 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 23 65 6e    }..        #en
2a840 64 72 65 67 69 6f 6e 0d 0a 20 20 20 20 7d 0d 0a  dregion..    }..
2a850 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a      #endregion..
2a860 7d 0d 0a                                         }..